Message ID | 20240502111613.1380453-2-emil.renner.berthing@canonical.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | riscv: make image compression configurable | expand |
Context | Check | Description |
---|---|---|
conchuod/vmtest-fixes-PR | fail | merge-conflict |
Emil Renner Berthing <emil.renner.berthing@canonical.com> writes: > Previously the build process would always set KBUILD_IMAGE to the > uncompressed Image file (unless XIP_KERNEL or EFI_ZBOOT was enabled) and > unconditionally compress it into Image.gz. However there are already > build targets for Image.bz2, Image.lz4, Image.lzma, Image.lzo and > Image.zstd, so let's make use of those, make the compression method > configurable and set KBUILD_IMAGE accordingly so that targets like > 'make install' and 'make bindeb-pkg' will use the chosen image. > > Signed-off-by: Emil Renner Berthing <emil.renner.berthing@canonical.com> > --- > arch/riscv/Kconfig | 7 +++++++ > arch/riscv/Makefile | 43 ++++++++++++++++++++------------------ > arch/riscv/boot/install.sh | 9 +++++--- > 3 files changed, 36 insertions(+), 23 deletions(-) > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index be09c8836d56..6c092d1ea7db 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -138,6 +138,13 @@ config RISCV > select HAVE_GCC_PLUGINS > select HAVE_GENERIC_VDSO if MMU && 64BIT > select HAVE_IRQ_TIME_ACCOUNTING > + select HAVE_KERNEL_BZIP2 if !XIP_KERNEL && !EFI_ZBOOT > + select HAVE_KERNEL_GZIP if !XIP_KERNEL && !EFI_ZBOOT > + select HAVE_KERNEL_LZ4 if !XIP_KERNEL && !EFI_ZBOOT > + select HAVE_KERNEL_LZMA if !XIP_KERNEL && !EFI_ZBOOT > + select HAVE_KERNEL_LZO if !XIP_KERNEL && !EFI_ZBOOT > + select HAVE_KERNEL_UNCOMPRESSED if !XIP_KERNEL && !EFI_ZBOOT > + select HAVE_KERNEL_ZSTD if !XIP_KERNEL && !EFI_ZBOOT > select HAVE_KPROBES if !XIP_KERNEL > select HAVE_KPROBES_ON_FTRACE if !XIP_KERNEL > select HAVE_KRETPROBES if !XIP_KERNEL > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > index 5b3115a19852..29be676415d6 100644 > --- a/arch/riscv/Makefile > +++ b/arch/riscv/Makefile > @@ -129,11 +129,27 @@ endif > CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS) > > # Default target when executing plain make > -boot := arch/riscv/boot > +boot := arch/riscv/boot > ifeq ($(CONFIG_XIP_KERNEL),y) > KBUILD_IMAGE := $(boot)/xipImage > +else ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_ARCH_CANAAN),yy) > +KBUILD_IMAGE := $(boot)/loader.bin > +else ifeq ($(CONFIG_EFI_ZBOOT),y) > +KBUILD_IMAGE := $(boot)/vmlinuz.efi > +else ifeq ($(CONFIG_KERNEL_GZIP),y) > +KBUILD_IMAGE := $(boot)/Image.gz > +else ifeq ($(CONFIG_KERNEL_BZIP2),y) > +KBUILD_IMAGE := $(boot)/Image.bz2 > +else ifeq ($(CONFIG_KERNEL_LZ4),y) > +KBUILD_IMAGE := $(boot)/Image.lz4 > +else ifeq ($(CONFIG_KERNEL_LZMA),y) > +KBUILD_IMAGE := $(boot)/Image.lzma > +else ifeq ($(CONFIG_KERNEL_LZO),y) > +KBUILD_IMAGE := $(boot)/Image.lzo > +else ifeq ($(CONFIG_KERNEL_ZSTD),y) > +KBUILD_IMAGE := $(boot)/Image.zst > else > -KBUILD_IMAGE := $(boot)/Image.gz > +KBUILD_IMAGE := $(boot)/Image > endif Really a nit/change if you want, but maybe doing something like arch/s390/boot/Makefile does is easier to read: diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile index 024482c68835..70f08e9999b4 100644 --- a/arch/riscv/Makefile +++ b/arch/riscv/Makefile @@ -128,6 +128,14 @@ endif # arch specific predefines for sparse CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS) +suffix-$(CONFIG_KERNEL_GZIP) := .gz +suffix-$(CONFIG_KERNEL_BZIP2) := .bz2 +suffix-$(CONFIG_KERNEL_LZ4) := .lz4 +suffix-$(CONFIG_KERNEL_LZMA) := .lzma +suffix-$(CONFIG_KERNEL_LZO) := .lzo +suffix-$(CONFIG_KERNEL_XZ) := .xz +suffix-$(CONFIG_KERNEL_ZSTD) := .zst + # Default target when executing plain make boot := arch/riscv/boot ifeq ($(CONFIG_XIP_KERNEL),y) @@ -136,20 +144,8 @@ else ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_ARCH_CANAAN),yy) KBUILD_IMAGE := $(boot)/loader.bin else ifeq ($(CONFIG_EFI_ZBOOT),y) KBUILD_IMAGE := $(boot)/vmlinuz.efi -else ifeq ($(CONFIG_KERNEL_GZIP),y) -KBUILD_IMAGE := $(boot)/Image.gz -else ifeq ($(CONFIG_KERNEL_BZIP2),y) -KBUILD_IMAGE := $(boot)/Image.bz2 -else ifeq ($(CONFIG_KERNEL_LZ4),y) -KBUILD_IMAGE := $(boot)/Image.lz4 -else ifeq ($(CONFIG_KERNEL_LZMA),y) -KBUILD_IMAGE := $(boot)/Image.lzma -else ifeq ($(CONFIG_KERNEL_LZO),y) -KBUILD_IMAGE := $(boot)/Image.lzo -else ifeq ($(CONFIG_KERNEL_ZSTD),y) -KBUILD_IMAGE := $(boot)/Image.zst else -KBUILD_IMAGE := $(boot)/Image +KBUILD_IMAGE := $(boot)/Image$(suffix-y) endif Björn
On Thu, May 2, 2024 at 10:05 PM Björn Töpel <bjorn@kernel.org> wrote: > > Emil Renner Berthing <emil.renner.berthing@canonical.com> writes: > > > Previously the build process would always set KBUILD_IMAGE to the > > uncompressed Image file (unless XIP_KERNEL or EFI_ZBOOT was enabled) and > > unconditionally compress it into Image.gz. However there are already > > build targets for Image.bz2, Image.lz4, Image.lzma, Image.lzo and > > Image.zstd, so let's make use of those, make the compression method > > configurable and set KBUILD_IMAGE accordingly so that targets like > > 'make install' and 'make bindeb-pkg' will use the chosen image. > > > > Signed-off-by: Emil Renner Berthing <emil.renner.berthing@canonical.com> > > --- > > arch/riscv/Kconfig | 7 +++++++ > > arch/riscv/Makefile | 43 ++++++++++++++++++++------------------ > > arch/riscv/boot/install.sh | 9 +++++--- > > 3 files changed, 36 insertions(+), 23 deletions(-) > > > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > > index be09c8836d56..6c092d1ea7db 100644 > > --- a/arch/riscv/Kconfig > > +++ b/arch/riscv/Kconfig > > @@ -138,6 +138,13 @@ config RISCV > > select HAVE_GCC_PLUGINS > > select HAVE_GENERIC_VDSO if MMU && 64BIT > > select HAVE_IRQ_TIME_ACCOUNTING > > + select HAVE_KERNEL_BZIP2 if !XIP_KERNEL && !EFI_ZBOOT > > + select HAVE_KERNEL_GZIP if !XIP_KERNEL && !EFI_ZBOOT > > + select HAVE_KERNEL_LZ4 if !XIP_KERNEL && !EFI_ZBOOT > > + select HAVE_KERNEL_LZMA if !XIP_KERNEL && !EFI_ZBOOT > > + select HAVE_KERNEL_LZO if !XIP_KERNEL && !EFI_ZBOOT > > + select HAVE_KERNEL_UNCOMPRESSED if !XIP_KERNEL && !EFI_ZBOOT > > + select HAVE_KERNEL_ZSTD if !XIP_KERNEL && !EFI_ZBOOT > > select HAVE_KPROBES if !XIP_KERNEL > > select HAVE_KPROBES_ON_FTRACE if !XIP_KERNEL > > select HAVE_KRETPROBES if !XIP_KERNEL > > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > > index 5b3115a19852..29be676415d6 100644 > > --- a/arch/riscv/Makefile > > +++ b/arch/riscv/Makefile > > @@ -129,11 +129,27 @@ endif > > CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS) > > > > # Default target when executing plain make > > -boot := arch/riscv/boot > > +boot := arch/riscv/boot > > ifeq ($(CONFIG_XIP_KERNEL),y) > > KBUILD_IMAGE := $(boot)/xipImage > > +else ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_ARCH_CANAAN),yy) > > +KBUILD_IMAGE := $(boot)/loader.bin > > +else ifeq ($(CONFIG_EFI_ZBOOT),y) > > +KBUILD_IMAGE := $(boot)/vmlinuz.efi > > +else ifeq ($(CONFIG_KERNEL_GZIP),y) > > +KBUILD_IMAGE := $(boot)/Image.gz > > +else ifeq ($(CONFIG_KERNEL_BZIP2),y) > > +KBUILD_IMAGE := $(boot)/Image.bz2 > > +else ifeq ($(CONFIG_KERNEL_LZ4),y) > > +KBUILD_IMAGE := $(boot)/Image.lz4 > > +else ifeq ($(CONFIG_KERNEL_LZMA),y) > > +KBUILD_IMAGE := $(boot)/Image.lzma > > +else ifeq ($(CONFIG_KERNEL_LZO),y) > > +KBUILD_IMAGE := $(boot)/Image.lzo > > +else ifeq ($(CONFIG_KERNEL_ZSTD),y) > > +KBUILD_IMAGE := $(boot)/Image.zst > > else > > -KBUILD_IMAGE := $(boot)/Image.gz > > +KBUILD_IMAGE := $(boot)/Image > > endif > > Really a nit/change if you want, but maybe doing something like > arch/s390/boot/Makefile does is easier to read: > > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > index 024482c68835..70f08e9999b4 100644 > --- a/arch/riscv/Makefile > +++ b/arch/riscv/Makefile > @@ -128,6 +128,14 @@ endif > # arch specific predefines for sparse > CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS) > > +suffix-$(CONFIG_KERNEL_GZIP) := .gz > +suffix-$(CONFIG_KERNEL_BZIP2) := .bz2 > +suffix-$(CONFIG_KERNEL_LZ4) := .lz4 > +suffix-$(CONFIG_KERNEL_LZMA) := .lzma > +suffix-$(CONFIG_KERNEL_LZO) := .lzo > +suffix-$(CONFIG_KERNEL_XZ) := .xz > +suffix-$(CONFIG_KERNEL_ZSTD) := .zst > + > # Default target when executing plain make > boot := arch/riscv/boot > ifeq ($(CONFIG_XIP_KERNEL),y) > @@ -136,20 +144,8 @@ else ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_ARCH_CANAAN),yy) > KBUILD_IMAGE := $(boot)/loader.bin > else ifeq ($(CONFIG_EFI_ZBOOT),y) > KBUILD_IMAGE := $(boot)/vmlinuz.efi > -else ifeq ($(CONFIG_KERNEL_GZIP),y) > -KBUILD_IMAGE := $(boot)/Image.gz > -else ifeq ($(CONFIG_KERNEL_BZIP2),y) > -KBUILD_IMAGE := $(boot)/Image.bz2 > -else ifeq ($(CONFIG_KERNEL_LZ4),y) > -KBUILD_IMAGE := $(boot)/Image.lz4 > -else ifeq ($(CONFIG_KERNEL_LZMA),y) > -KBUILD_IMAGE := $(boot)/Image.lzma > -else ifeq ($(CONFIG_KERNEL_LZO),y) > -KBUILD_IMAGE := $(boot)/Image.lzo > -else ifeq ($(CONFIG_KERNEL_ZSTD),y) > -KBUILD_IMAGE := $(boot)/Image.zst > else > -KBUILD_IMAGE := $(boot)/Image > +KBUILD_IMAGE := $(boot)/Image$(suffix-y) > endif Good idea. If you avoid the 'else ifeq' chain completely, you also could do like this: boot-image-$(CONFIG_KERNEL_GZIP) := Image.gz ... boot-image-$(CONFIG_KERNEL_ZSTD) := Image.zst boot-image-$(CONFIG_KERNEL_UNCOMPRESSED) := Image boot-image-$(CONFIG_RISCV_M_MODE) := loader.bin boot-image-$(CONFIG_ARCH_CANAAN) := loader.bin boot-image-$(CONFIG_EFI_ZBOOT) := vmlinuz.efi boot-image-$(CONFIG_XIP_KERNEL) := xipImage KBUILD_IMAGE := $(boot)/$(boot-image-y) Emil's current patch will work, of course. BTW, this patch will conflict with 3b938e231b660a278de2988ee77b832d665c5326 It lands in riscv subsystem.
Masahiro Yamada wrote: > On Thu, May 2, 2024 at 10:05 PM Björn Töpel <bjorn@kernel.org> wrote: > > > > Emil Renner Berthing <emil.renner.berthing@canonical.com> writes: > > > > > Previously the build process would always set KBUILD_IMAGE to the > > > uncompressed Image file (unless XIP_KERNEL or EFI_ZBOOT was enabled) and > > > unconditionally compress it into Image.gz. However there are already > > > build targets for Image.bz2, Image.lz4, Image.lzma, Image.lzo and > > > Image.zstd, so let's make use of those, make the compression method > > > configurable and set KBUILD_IMAGE accordingly so that targets like > > > 'make install' and 'make bindeb-pkg' will use the chosen image. > > > > > > Signed-off-by: Emil Renner Berthing <emil.renner.berthing@canonical.com> > > > --- > > > arch/riscv/Kconfig | 7 +++++++ > > > arch/riscv/Makefile | 43 ++++++++++++++++++++------------------ > > > arch/riscv/boot/install.sh | 9 +++++--- > > > 3 files changed, 36 insertions(+), 23 deletions(-) > > > > > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > > > index be09c8836d56..6c092d1ea7db 100644 > > > --- a/arch/riscv/Kconfig > > > +++ b/arch/riscv/Kconfig > > > @@ -138,6 +138,13 @@ config RISCV > > > select HAVE_GCC_PLUGINS > > > select HAVE_GENERIC_VDSO if MMU && 64BIT > > > select HAVE_IRQ_TIME_ACCOUNTING > > > + select HAVE_KERNEL_BZIP2 if !XIP_KERNEL && !EFI_ZBOOT > > > + select HAVE_KERNEL_GZIP if !XIP_KERNEL && !EFI_ZBOOT > > > + select HAVE_KERNEL_LZ4 if !XIP_KERNEL && !EFI_ZBOOT > > > + select HAVE_KERNEL_LZMA if !XIP_KERNEL && !EFI_ZBOOT > > > + select HAVE_KERNEL_LZO if !XIP_KERNEL && !EFI_ZBOOT > > > + select HAVE_KERNEL_UNCOMPRESSED if !XIP_KERNEL && !EFI_ZBOOT > > > + select HAVE_KERNEL_ZSTD if !XIP_KERNEL && !EFI_ZBOOT > > > select HAVE_KPROBES if !XIP_KERNEL > > > select HAVE_KPROBES_ON_FTRACE if !XIP_KERNEL > > > select HAVE_KRETPROBES if !XIP_KERNEL > > > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > > > index 5b3115a19852..29be676415d6 100644 > > > --- a/arch/riscv/Makefile > > > +++ b/arch/riscv/Makefile > > > @@ -129,11 +129,27 @@ endif > > > CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS) > > > > > > # Default target when executing plain make > > > -boot := arch/riscv/boot > > > +boot := arch/riscv/boot > > > ifeq ($(CONFIG_XIP_KERNEL),y) > > > KBUILD_IMAGE := $(boot)/xipImage > > > +else ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_ARCH_CANAAN),yy) > > > +KBUILD_IMAGE := $(boot)/loader.bin > > > +else ifeq ($(CONFIG_EFI_ZBOOT),y) > > > +KBUILD_IMAGE := $(boot)/vmlinuz.efi > > > +else ifeq ($(CONFIG_KERNEL_GZIP),y) > > > +KBUILD_IMAGE := $(boot)/Image.gz > > > +else ifeq ($(CONFIG_KERNEL_BZIP2),y) > > > +KBUILD_IMAGE := $(boot)/Image.bz2 > > > +else ifeq ($(CONFIG_KERNEL_LZ4),y) > > > +KBUILD_IMAGE := $(boot)/Image.lz4 > > > +else ifeq ($(CONFIG_KERNEL_LZMA),y) > > > +KBUILD_IMAGE := $(boot)/Image.lzma > > > +else ifeq ($(CONFIG_KERNEL_LZO),y) > > > +KBUILD_IMAGE := $(boot)/Image.lzo > > > +else ifeq ($(CONFIG_KERNEL_ZSTD),y) > > > +KBUILD_IMAGE := $(boot)/Image.zst > > > else > > > -KBUILD_IMAGE := $(boot)/Image.gz > > > +KBUILD_IMAGE := $(boot)/Image > > > endif > > > > Really a nit/change if you want, but maybe doing something like > > arch/s390/boot/Makefile does is easier to read: > > > > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > > index 024482c68835..70f08e9999b4 100644 > > --- a/arch/riscv/Makefile > > +++ b/arch/riscv/Makefile > > @@ -128,6 +128,14 @@ endif > > # arch specific predefines for sparse > > CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS) > > > > +suffix-$(CONFIG_KERNEL_GZIP) := .gz > > +suffix-$(CONFIG_KERNEL_BZIP2) := .bz2 > > +suffix-$(CONFIG_KERNEL_LZ4) := .lz4 > > +suffix-$(CONFIG_KERNEL_LZMA) := .lzma > > +suffix-$(CONFIG_KERNEL_LZO) := .lzo > > +suffix-$(CONFIG_KERNEL_XZ) := .xz > > +suffix-$(CONFIG_KERNEL_ZSTD) := .zst > > + > > # Default target when executing plain make > > boot := arch/riscv/boot > > ifeq ($(CONFIG_XIP_KERNEL),y) > > @@ -136,20 +144,8 @@ else ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_ARCH_CANAAN),yy) > > KBUILD_IMAGE := $(boot)/loader.bin > > else ifeq ($(CONFIG_EFI_ZBOOT),y) > > KBUILD_IMAGE := $(boot)/vmlinuz.efi > > -else ifeq ($(CONFIG_KERNEL_GZIP),y) > > -KBUILD_IMAGE := $(boot)/Image.gz > > -else ifeq ($(CONFIG_KERNEL_BZIP2),y) > > -KBUILD_IMAGE := $(boot)/Image.bz2 > > -else ifeq ($(CONFIG_KERNEL_LZ4),y) > > -KBUILD_IMAGE := $(boot)/Image.lz4 > > -else ifeq ($(CONFIG_KERNEL_LZMA),y) > > -KBUILD_IMAGE := $(boot)/Image.lzma > > -else ifeq ($(CONFIG_KERNEL_LZO),y) > > -KBUILD_IMAGE := $(boot)/Image.lzo > > -else ifeq ($(CONFIG_KERNEL_ZSTD),y) > > -KBUILD_IMAGE := $(boot)/Image.zst > > else > > -KBUILD_IMAGE := $(boot)/Image > > +KBUILD_IMAGE := $(boot)/Image$(suffix-y) > > endif > > > > > Good idea. > > > If you avoid the 'else ifeq' chain completely, > you also could do like this: > > > > boot-image-$(CONFIG_KERNEL_GZIP) := Image.gz > ... > boot-image-$(CONFIG_KERNEL_ZSTD) := Image.zst > boot-image-$(CONFIG_KERNEL_UNCOMPRESSED) := Image > boot-image-$(CONFIG_RISCV_M_MODE) := loader.bin > boot-image-$(CONFIG_ARCH_CANAAN) := loader.bin > boot-image-$(CONFIG_EFI_ZBOOT) := vmlinuz.efi > boot-image-$(CONFIG_XIP_KERNEL) := xipImage > > KBUILD_IMAGE := $(boot)/$(boot-image-y) Hi Masahiro and Björn. I like this approach. But I think it doesn't quite do the same when fx. CONFIG_RISCV_M_MODE=n but CONFIG_ARCH_CANAAN=y which I think is a valid configuration for the new Kendryte K230 support. In this case boot-image-y would be overwritten with the loader.bin value even for S-mode kernels. To keep the previous behaviour we'd need something like boot-image-$(CONFIG_RISCV_M_MODE *and* CONFIG_ARCH_CANAAN) := loader.bin Maybe just ifeq ($(CONFIG_RISCV_M_MODE),y) boot-image-$(CONFIG_ARCH_CANAAN) := loader.bin endif Do you guys have a better solution? /Emil > > > > Emil's current patch will work, of course. > > > > > BTW, this patch will conflict with > 3b938e231b660a278de2988ee77b832d665c5326 > It lands in riscv subsystem. Oh, you're right. I'll rebase on that for v2, thanks. /Emil
On Sat, May 4, 2024 at 10:54 PM Emil Renner Berthing <emil.renner.berthing@canonical.com> wrote: > > Masahiro Yamada wrote: > > On Thu, May 2, 2024 at 10:05 PM Björn Töpel <bjorn@kernel.org> wrote: > > > > > > Emil Renner Berthing <emil.renner.berthing@canonical.com> writes: > > > > > > > Previously the build process would always set KBUILD_IMAGE to the > > > > uncompressed Image file (unless XIP_KERNEL or EFI_ZBOOT was enabled) and > > > > unconditionally compress it into Image.gz. However there are already > > > > build targets for Image.bz2, Image.lz4, Image.lzma, Image.lzo and > > > > Image.zstd, so let's make use of those, make the compression method > > > > configurable and set KBUILD_IMAGE accordingly so that targets like > > > > 'make install' and 'make bindeb-pkg' will use the chosen image. > > > > > > > > Signed-off-by: Emil Renner Berthing <emil.renner.berthing@canonical.com> > > > > --- > > > > arch/riscv/Kconfig | 7 +++++++ > > > > arch/riscv/Makefile | 43 ++++++++++++++++++++------------------ > > > > arch/riscv/boot/install.sh | 9 +++++--- > > > > 3 files changed, 36 insertions(+), 23 deletions(-) > > > > > > > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > > > > index be09c8836d56..6c092d1ea7db 100644 > > > > --- a/arch/riscv/Kconfig > > > > +++ b/arch/riscv/Kconfig > > > > @@ -138,6 +138,13 @@ config RISCV > > > > select HAVE_GCC_PLUGINS > > > > select HAVE_GENERIC_VDSO if MMU && 64BIT > > > > select HAVE_IRQ_TIME_ACCOUNTING > > > > + select HAVE_KERNEL_BZIP2 if !XIP_KERNEL && !EFI_ZBOOT > > > > + select HAVE_KERNEL_GZIP if !XIP_KERNEL && !EFI_ZBOOT > > > > + select HAVE_KERNEL_LZ4 if !XIP_KERNEL && !EFI_ZBOOT > > > > + select HAVE_KERNEL_LZMA if !XIP_KERNEL && !EFI_ZBOOT > > > > + select HAVE_KERNEL_LZO if !XIP_KERNEL && !EFI_ZBOOT > > > > + select HAVE_KERNEL_UNCOMPRESSED if !XIP_KERNEL && !EFI_ZBOOT > > > > + select HAVE_KERNEL_ZSTD if !XIP_KERNEL && !EFI_ZBOOT > > > > select HAVE_KPROBES if !XIP_KERNEL > > > > select HAVE_KPROBES_ON_FTRACE if !XIP_KERNEL > > > > select HAVE_KRETPROBES if !XIP_KERNEL > > > > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > > > > index 5b3115a19852..29be676415d6 100644 > > > > --- a/arch/riscv/Makefile > > > > +++ b/arch/riscv/Makefile > > > > @@ -129,11 +129,27 @@ endif > > > > CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS) > > > > > > > > # Default target when executing plain make > > > > -boot := arch/riscv/boot > > > > +boot := arch/riscv/boot > > > > ifeq ($(CONFIG_XIP_KERNEL),y) > > > > KBUILD_IMAGE := $(boot)/xipImage > > > > +else ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_ARCH_CANAAN),yy) > > > > +KBUILD_IMAGE := $(boot)/loader.bin > > > > +else ifeq ($(CONFIG_EFI_ZBOOT),y) > > > > +KBUILD_IMAGE := $(boot)/vmlinuz.efi > > > > +else ifeq ($(CONFIG_KERNEL_GZIP),y) > > > > +KBUILD_IMAGE := $(boot)/Image.gz > > > > +else ifeq ($(CONFIG_KERNEL_BZIP2),y) > > > > +KBUILD_IMAGE := $(boot)/Image.bz2 > > > > +else ifeq ($(CONFIG_KERNEL_LZ4),y) > > > > +KBUILD_IMAGE := $(boot)/Image.lz4 > > > > +else ifeq ($(CONFIG_KERNEL_LZMA),y) > > > > +KBUILD_IMAGE := $(boot)/Image.lzma > > > > +else ifeq ($(CONFIG_KERNEL_LZO),y) > > > > +KBUILD_IMAGE := $(boot)/Image.lzo > > > > +else ifeq ($(CONFIG_KERNEL_ZSTD),y) > > > > +KBUILD_IMAGE := $(boot)/Image.zst > > > > else > > > > -KBUILD_IMAGE := $(boot)/Image.gz > > > > +KBUILD_IMAGE := $(boot)/Image > > > > endif > > > > > > Really a nit/change if you want, but maybe doing something like > > > arch/s390/boot/Makefile does is easier to read: > > > > > > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > > > index 024482c68835..70f08e9999b4 100644 > > > --- a/arch/riscv/Makefile > > > +++ b/arch/riscv/Makefile > > > @@ -128,6 +128,14 @@ endif > > > # arch specific predefines for sparse > > > CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS) > > > > > > +suffix-$(CONFIG_KERNEL_GZIP) := .gz > > > +suffix-$(CONFIG_KERNEL_BZIP2) := .bz2 > > > +suffix-$(CONFIG_KERNEL_LZ4) := .lz4 > > > +suffix-$(CONFIG_KERNEL_LZMA) := .lzma > > > +suffix-$(CONFIG_KERNEL_LZO) := .lzo > > > +suffix-$(CONFIG_KERNEL_XZ) := .xz > > > +suffix-$(CONFIG_KERNEL_ZSTD) := .zst > > > + > > > # Default target when executing plain make > > > boot := arch/riscv/boot > > > ifeq ($(CONFIG_XIP_KERNEL),y) > > > @@ -136,20 +144,8 @@ else ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_ARCH_CANAAN),yy) > > > KBUILD_IMAGE := $(boot)/loader.bin > > > else ifeq ($(CONFIG_EFI_ZBOOT),y) > > > KBUILD_IMAGE := $(boot)/vmlinuz.efi > > > -else ifeq ($(CONFIG_KERNEL_GZIP),y) > > > -KBUILD_IMAGE := $(boot)/Image.gz > > > -else ifeq ($(CONFIG_KERNEL_BZIP2),y) > > > -KBUILD_IMAGE := $(boot)/Image.bz2 > > > -else ifeq ($(CONFIG_KERNEL_LZ4),y) > > > -KBUILD_IMAGE := $(boot)/Image.lz4 > > > -else ifeq ($(CONFIG_KERNEL_LZMA),y) > > > -KBUILD_IMAGE := $(boot)/Image.lzma > > > -else ifeq ($(CONFIG_KERNEL_LZO),y) > > > -KBUILD_IMAGE := $(boot)/Image.lzo > > > -else ifeq ($(CONFIG_KERNEL_ZSTD),y) > > > -KBUILD_IMAGE := $(boot)/Image.zst > > > else > > > -KBUILD_IMAGE := $(boot)/Image > > > +KBUILD_IMAGE := $(boot)/Image$(suffix-y) > > > endif > > > > > > > > > > Good idea. > > > > > > If you avoid the 'else ifeq' chain completely, > > you also could do like this: > > > > > > > > boot-image-$(CONFIG_KERNEL_GZIP) := Image.gz > > ... > > boot-image-$(CONFIG_KERNEL_ZSTD) := Image.zst > > boot-image-$(CONFIG_KERNEL_UNCOMPRESSED) := Image > > boot-image-$(CONFIG_RISCV_M_MODE) := loader.bin > > boot-image-$(CONFIG_ARCH_CANAAN) := loader.bin > > boot-image-$(CONFIG_EFI_ZBOOT) := vmlinuz.efi > > boot-image-$(CONFIG_XIP_KERNEL) := xipImage > > > > KBUILD_IMAGE := $(boot)/$(boot-image-y) > > Hi Masahiro and Björn. > > I like this approach. But I think it doesn't quite do the same when fx. > CONFIG_RISCV_M_MODE=n but CONFIG_ARCH_CANAAN=y which I think is a valid > configuration for the new Kendryte K230 support. In this case boot-image-y > would be overwritten with the loader.bin value even for S-mode kernels. > > To keep the previous behaviour we'd need something like > > boot-image-$(CONFIG_RISCV_M_MODE *and* CONFIG_ARCH_CANAAN) := loader.bin > > Maybe just > > ifeq ($(CONFIG_RISCV_M_MODE),y) > boot-image-$(CONFIG_ARCH_CANAAN) := loader.bin > endif > > Do you guys have a better solution? Hi Emil, sorry I misunderstood AND and OR. ifdef CONFIG_RISCV_M_MODE boot-image-$(CONFIG_ARCH_CANAAN) := loader.bin endif is slightly shorter. boot-image-$(and $(CONFIG_RISCV_M_MODE),$(CONFIG_ARCH_CANAAN)) := loader.bin is also possible, but the line is a bit long. Otherwise, I do not have a better idea. I am fine with any form. I leave it to you and Palmer.
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index be09c8836d56..6c092d1ea7db 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -138,6 +138,13 @@ config RISCV select HAVE_GCC_PLUGINS select HAVE_GENERIC_VDSO if MMU && 64BIT select HAVE_IRQ_TIME_ACCOUNTING + select HAVE_KERNEL_BZIP2 if !XIP_KERNEL && !EFI_ZBOOT + select HAVE_KERNEL_GZIP if !XIP_KERNEL && !EFI_ZBOOT + select HAVE_KERNEL_LZ4 if !XIP_KERNEL && !EFI_ZBOOT + select HAVE_KERNEL_LZMA if !XIP_KERNEL && !EFI_ZBOOT + select HAVE_KERNEL_LZO if !XIP_KERNEL && !EFI_ZBOOT + select HAVE_KERNEL_UNCOMPRESSED if !XIP_KERNEL && !EFI_ZBOOT + select HAVE_KERNEL_ZSTD if !XIP_KERNEL && !EFI_ZBOOT select HAVE_KPROBES if !XIP_KERNEL select HAVE_KPROBES_ON_FTRACE if !XIP_KERNEL select HAVE_KRETPROBES if !XIP_KERNEL diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile index 5b3115a19852..29be676415d6 100644 --- a/arch/riscv/Makefile +++ b/arch/riscv/Makefile @@ -129,11 +129,27 @@ endif CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS) # Default target when executing plain make -boot := arch/riscv/boot +boot := arch/riscv/boot ifeq ($(CONFIG_XIP_KERNEL),y) KBUILD_IMAGE := $(boot)/xipImage +else ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_ARCH_CANAAN),yy) +KBUILD_IMAGE := $(boot)/loader.bin +else ifeq ($(CONFIG_EFI_ZBOOT),y) +KBUILD_IMAGE := $(boot)/vmlinuz.efi +else ifeq ($(CONFIG_KERNEL_GZIP),y) +KBUILD_IMAGE := $(boot)/Image.gz +else ifeq ($(CONFIG_KERNEL_BZIP2),y) +KBUILD_IMAGE := $(boot)/Image.bz2 +else ifeq ($(CONFIG_KERNEL_LZ4),y) +KBUILD_IMAGE := $(boot)/Image.lz4 +else ifeq ($(CONFIG_KERNEL_LZMA),y) +KBUILD_IMAGE := $(boot)/Image.lzma +else ifeq ($(CONFIG_KERNEL_LZO),y) +KBUILD_IMAGE := $(boot)/Image.lzo +else ifeq ($(CONFIG_KERNEL_ZSTD),y) +KBUILD_IMAGE := $(boot)/Image.zst else -KBUILD_IMAGE := $(boot)/Image.gz +KBUILD_IMAGE := $(boot)/Image endif libs-y += arch/riscv/lib/ @@ -153,32 +169,19 @@ endif vdso-install-y += arch/riscv/kernel/vdso/vdso.so.dbg vdso-install-$(CONFIG_COMPAT) += arch/riscv/kernel/compat_vdso/compat_vdso.so.dbg -ifneq ($(CONFIG_XIP_KERNEL),y) -ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_ARCH_CANAAN),yy) -KBUILD_IMAGE := $(boot)/loader.bin -else -ifeq ($(CONFIG_EFI_ZBOOT),) -KBUILD_IMAGE := $(boot)/Image.gz -else -KBUILD_IMAGE := $(boot)/vmlinuz.efi -endif -endif -endif -BOOT_TARGETS := Image Image.gz loader loader.bin xipImage vmlinuz.efi +BOOT_TARGETS := Image Image.gz Image.bz2 Image.lz4 Image.lzma Image.lzo Image.zst loader loader.bin xipImage vmlinuz.efi all: $(notdir $(KBUILD_IMAGE)) loader.bin: loader -Image.gz loader vmlinuz.efi: Image +Image.gz Image.bz2 Image.lz4 Image.lzma Image.lzo Image.zst loader xipImage vmlinuz.efi: Image + $(BOOT_TARGETS): vmlinux $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ @$(kecho) ' Kernel: $(boot)/$@ is ready' -Image.%: Image - $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ - -install: KBUILD_IMAGE := $(boot)/Image -zinstall: KBUILD_IMAGE := $(boot)/Image.gz +# the install target always installs KBUILD_IMAGE (which may be compressed) +# but keep the zinstall target for compatibility with older releases install zinstall: $(call cmd,install) diff --git a/arch/riscv/boot/install.sh b/arch/riscv/boot/install.sh index 4c63f3f0643d..a8df7591513a 100755 --- a/arch/riscv/boot/install.sh +++ b/arch/riscv/boot/install.sh @@ -17,15 +17,18 @@ # $3 - kernel map file # $4 - default install path (blank if root directory) -if [ "$(basename $2)" = "Image.gz" ]; then +case "${2##*/}" in # Compressed install +Image.*|vmlinuz.efi) echo "Installing compressed kernel" base=vmlinuz -else + ;; # Normal install +*) echo "Installing normal kernel" base=vmlinux -fi + ;; +esac if [ -f $4/$base-$1 ]; then mv $4/$base-$1 $4/$base-$1.old
Previously the build process would always set KBUILD_IMAGE to the uncompressed Image file (unless XIP_KERNEL or EFI_ZBOOT was enabled) and unconditionally compress it into Image.gz. However there are already build targets for Image.bz2, Image.lz4, Image.lzma, Image.lzo and Image.zstd, so let's make use of those, make the compression method configurable and set KBUILD_IMAGE accordingly so that targets like 'make install' and 'make bindeb-pkg' will use the chosen image. Signed-off-by: Emil Renner Berthing <emil.renner.berthing@canonical.com> --- arch/riscv/Kconfig | 7 +++++++ arch/riscv/Makefile | 43 ++++++++++++++++++++------------------ arch/riscv/boot/install.sh | 9 +++++--- 3 files changed, 36 insertions(+), 23 deletions(-)