[PATCH] build: fix regression for kernels < 5.10

Felix Fietkau nbd at nbd.name
Tue Apr 13 14:09:24 BST 2021


On 2021-04-13 14:22, Sebastian Kemper wrote:
> This fixes a regression introduced with commit
> 5ed1e5140a80558ab47fd70410ae3242bed5becf ("build: build kernel image
> before building modules/packages").
> 
> Before this commit the make target would always include "modules",
> resulting in a MODPOST and a complete Module.symvers file. Since this
> commit a MODPOST of the kernel modules is not guaranteed for kernels <
> 5.10. This results in some broken SDKs in which external packages that
> depend on exported symbols from kernel modules fail to compile.
Why is it not enough to do this in the CompileModules step?

> Adding "modules" back to the calls to the CompileImage defines fixes the
> regression. For kernels > 5.10 this is not needed, but it doesn't cause
> any harm either.
Why is >5.10 not affected? Can we backport the fix? I'd like to avoid
adding extra unnecessary build step that slow down running make
target/install.

> Tested with kernels 5.4.x and 5.10.x.
> 
> Signed-off-by: Sebastian Kemper <sebastian_ml at gmx.net>
> ---
>  include/kernel-defaults.mk | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk
> index 4b0b136a03..1b3b4497a2 100644
> --- a/include/kernel-defaults.mk
> +++ b/include/kernel-defaults.mk
> @@ -147,12 +147,17 @@ define Kernel/CopyImage
>  	}
>  endef
> 
> +# Always add "modules" so a proper Module.symvers file is written that
> +# also contains symbols from the kernel modules. Without these symbols
> +# external packages that depend on exported symbols from kernel modules
> +# will fail to build.
>  define Kernel/CompileImage/Default
>  	rm -f $(TARGET_DIR)/init
> -	+$(KERNEL_MAKE) $(KERNEL_MAKEOPTS_IMAGE) $(if $(KERNELNAME),$(KERNELNAME),all)
> +	+$(KERNEL_MAKE) $(KERNEL_MAKEOPTS_IMAGE) $(if $(KERNELNAME),$(KERNELNAME),all) modules
>  	$(call Kernel/CopyImage)
>  endef
> 
> +# Here as well, always add "modules", see comment above.
>  ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
>  define Kernel/CompileImage/Initramfs
>  	$(call Kernel/Configure/Initramfs)
> @@ -173,7 +178,7 @@ endif
>  # ?	$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),)
>  	$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_ZSTD),$(STAGING_DIR_HOST)/bin/zstd -T0 -f -o $(KERNEL_BUILD_DIR)/initrd.cpio.zstd $(KERNEL_BUILD_DIR)/initrd.cpio)
>  endif
> -	+$(KERNEL_MAKE) $(KERNEL_MAKEOPTS_IMAGE) $(if $(KERNELNAME),$(KERNELNAME),all)
> +	+$(KERNEL_MAKE) $(KERNEL_MAKEOPTS_IMAGE) $(if $(KERNELNAME),$(KERNELNAME),all) modules
Why do this for initramfs as well?

- Felix



More information about the openwrt-devel mailing list