Re: make install doesn't install proper files for some architectures

From: Masahiro Yamada
Date: Thu Feb 22 2024 - 22:32:34 EST


On Fri, Feb 23, 2024 at 2:07 AM <ns@xxxxxxxx> wrote:
>
> Greetings,
>
> The kernel's build system has an install target. Most of the time this
> works fine, but it is limited to only one file, which can make it busted
> for some arches.
>
> One example of a target where it is busted is a generic ppc32 kernel,
> where there are plenty of supported platforms, some of which can boot
> perfectly fine through Open Firmware & some which are from bad, bad
> times o' yore where you had to embed the DT straight into the kernel. &
> some more on top of that. When you run make install for ppc32, it only
> installs the uncompressed vmlinux. This is almost certainly not the
> correct decision for _any_ of the platforms in question, & it totally
> leaves out the properly wrapped images that many of these platforms
> absolutely need in order to boot (e.g. PS3 & Wii, which need an image
> with an embedded DT).
>
> This is not really great. By contrast, the all target built all the
> specific images that my config selected. I didn't have to read the
> arch's boot Makefile to figure out what files I have to build. Is there
> any target which does the same but for installing every image the all
> target produced? It'd be a much better experience than leaving the
> details of every arch & bizzare platform supported by it up to (most
> likely incomplete) scripts, when the Makefiles already have all that
> information properly written. I suppose it'd also come in handy if e.g.
> x86 had a saner image format [1] in the future or something of the sort.
>
> [1]:
> https://source.denx.de/u-boot/u-boot/-/blob/master/doc/usage/fit/x86-fit-boot.rst




If you see scripts/install.sh, the second parameter
to 'installkernel' is ${KBUILD_IMAGE}.



arch Makefile can set the best image to install,
but there is no such code in arch/powerpc/Makefile.

Presumably, 'make install' will install the default
'vmlinux' for powerpc.






$ git grep KBUILD_IMAGE -- arch/
arch/arm/Makefile:KBUILD_IMAGE := $(boot)/xipImage
arch/arm/Makefile:KBUILD_IMAGE := $(boot)/zImage
arch/arm/Makefile:all: $(notdir $(KBUILD_IMAGE))
arch/arm/Makefile:$(INSTALL_TARGETS): KBUILD_IMAGE =
$(boot)/$(patsubst %install,%Image,$@)
arch/arm64/Makefile:KBUILD_IMAGE := $(boot)/Image.gz
arch/arm64/Makefile:KBUILD_IMAGE := $(boot)/vmlinuz.efi
arch/arm64/Makefile:all: $(notdir $(KBUILD_IMAGE))
arch/arm64/Makefile:install: KBUILD_IMAGE := $(boot)/Image
arch/loongarch/Makefile:KBUILD_IMAGE := $(boot)/vmlinux.elf
arch/loongarch/Makefile:KBUILD_IMAGE := $(boot)/$(image-name-y).efi
arch/loongarch/Makefile:all: $(notdir $(KBUILD_IMAGE)) $(KBUILD_DTBS)
arch/loongarch/Makefile: $(Q)install -D -m 755 $(KBUILD_IMAGE)
$(INSTALL_PATH)/$(image-name-y)-$(KERNELRELEASE)
arch/m68k/Makefile:install: KBUILD_IMAGE := vmlinux.gz
arch/mips/boot/compressed/Makefile:$(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE
arch/nios2/Makefile:KBUILD_IMAGE := $(nios2-boot)/vmImage
arch/nios2/Makefile: echo '* vmImage - Kernel-only image for
U-Boot ($(KBUILD_IMAGE))'
arch/parisc/Makefile:KBUILD_IMAGE := $(boot)/bzImage
arch/parisc/Makefile:install: KBUILD_IMAGE := vmlinux
arch/parisc/Makefile:zinstall: KBUILD_IMAGE := vmlinuz
arch/riscv/Makefile:KBUILD_IMAGE := $(boot)/xipImage
arch/riscv/Makefile:KBUILD_IMAGE := $(boot)/Image.gz
arch/riscv/Makefile:KBUILD_IMAGE := $(boot)/loader.bin
arch/riscv/Makefile:KBUILD_IMAGE := $(boot)/Image.gz
arch/riscv/Makefile:KBUILD_IMAGE := $(boot)/vmlinuz.efi
arch/riscv/Makefile:all: $(notdir $(KBUILD_IMAGE))
arch/riscv/Makefile:install: KBUILD_IMAGE := $(boot)/Image
arch/riscv/Makefile:zinstall: KBUILD_IMAGE := $(boot)/Image.gz
arch/s390/Makefile:#KBUILD_IMAGE is necessary for packaging targets
like rpm-pkg, deb-pkg...
arch/s390/Makefile:KBUILD_IMAGE := $(boot)/bzImage
arch/sh/Makefile:KBUILD_IMAGE := $(boot)/$(defaultimage-y)
arch/sh/Makefile:all: $(notdir $(KBUILD_IMAGE))
arch/sparc/Makefile:KBUILD_IMAGE := $(boot)/zImage
arch/x86/Makefile:# KBUILD_IMAGE specify target image being built
arch/x86/Makefile:KBUILD_IMAGE := $(boot)/bzImage
arch/x86/Makefile: $(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE)




--
Best Regards
Masahiro Yamada