2023-06-15 11:32:36

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH] kbuild: make modules_install copy modules.builtin(.modinfo)

Josh Triplett reports that initramfs-tools needs modules.builtin and
modules.builtin.modinfo to create a working initramfs for a non-modular
kernel.

If this is a general tooling issue not limited to Debian, I think it
makes sense to change modules_install.

This commit changes the targets as follows when CONFIG_MODULES=n.

In-tree builds:
make modules -> no-op
make modules_install -> install modules.builtin(.modinfo)

External module builds:
make modules -> show error message like before
make modules_install -> show error message like before

Link: https://lore.kernel.org/lkml/36a4014c73a52af27d930d3ca31d362b60f4461c.1686356364.git.josh@joshtriplett.org/
Reported-by: Josh Triplett <[email protected]>
Signed-off-by: Masahiro Yamada <[email protected]>
---

Makefile | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/Makefile b/Makefile
index cc3fe09c4dec..f18d59c81241 100644
--- a/Makefile
+++ b/Makefile
@@ -1545,6 +1545,8 @@ modules_sign_only := y
endif
endif

+endif # CONFIG_MODULES
+
modinst_pre :=
ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
modinst_pre := __modinst_pre
@@ -1555,18 +1557,18 @@ PHONY += __modinst_pre
__modinst_pre:
@rm -rf $(MODLIB)/kernel
@rm -f $(MODLIB)/source
- @mkdir -p $(MODLIB)/kernel
+ @mkdir -p $(MODLIB)
+ifdef CONFIG_MODULES
@ln -s $(abspath $(srctree)) $(MODLIB)/source
@if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
rm -f $(MODLIB)/build ; \
ln -s $(CURDIR) $(MODLIB)/build ; \
fi
@sed 's:^\(.*\)\.o$$:kernel/\1.ko:' modules.order > $(MODLIB)/modules.order
+endif
@cp -f modules.builtin $(MODLIB)/
@cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/

-endif # CONFIG_MODULES
-
###
# Cleaning is done on three levels.
# make clean Delete most generated files
@@ -1908,6 +1910,13 @@ help:
@echo ' clean - remove generated files in module directory only'
@echo ''

+__external_modules_error:
+ @echo >&2 '***'
+ @echo >&2 '*** The present kernel disabled CONFIG_MODULES.'
+ @echo >&2 '*** You cannot build or install external modules.'
+ @echo >&2 '***'
+ @false
+
endif # KBUILD_EXTMOD

# ---------------------------------------------------------------------------
@@ -1944,13 +1953,10 @@ else # CONFIG_MODULES
# Modules not configured
# ---------------------------------------------------------------------------

-modules modules_install:
- @echo >&2 '***'
- @echo >&2 '*** The present kernel configuration has modules disabled.'
- @echo >&2 '*** To use the module feature, please run "make menuconfig" etc.'
- @echo >&2 '*** to enable CONFIG_MODULES.'
- @echo >&2 '***'
- @exit 1
+PHONY += __external_modules_error
+
+modules modules_install: __external_modules_error
+ @:

KBUILD_MODULES :=

--
2.39.2



2023-06-19 12:50:46

by Nicolas Schier

[permalink] [raw]
Subject: Re: [PATCH] kbuild: make modules_install copy modules.builtin(.modinfo)

On Thu, Jun 15, 2023 at 08:17:43PM +0900 Masahiro Yamada wrote:
> Josh Triplett reports that initramfs-tools needs modules.builtin and
> modules.builtin.modinfo to create a working initramfs for a non-modular
> kernel.
>
> If this is a general tooling issue not limited to Debian, I think it
> makes sense to change modules_install.
>
> This commit changes the targets as follows when CONFIG_MODULES=n.
>
> In-tree builds:
> make modules -> no-op
> make modules_install -> install modules.builtin(.modinfo)
>
> External module builds:
> make modules -> show error message like before
> make modules_install -> show error message like before
>
> Link: https://lore.kernel.org/lkml/36a4014c73a52af27d930d3ca31d362b60f4461c.1686356364.git.josh@joshtriplett.org/
> Reported-by: Josh Triplett <[email protected]>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---

Reviewed-by: Nicolas Schier <[email protected]>
Tested-by: Nicolas Schier <[email protected]>

> Makefile | 26 ++++++++++++++++----------
> 1 file changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index cc3fe09c4dec..f18d59c81241 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1545,6 +1545,8 @@ modules_sign_only := y
> endif
> endif
>
> +endif # CONFIG_MODULES
> +
> modinst_pre :=
> ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
> modinst_pre := __modinst_pre
> @@ -1555,18 +1557,18 @@ PHONY += __modinst_pre
> __modinst_pre:
> @rm -rf $(MODLIB)/kernel
> @rm -f $(MODLIB)/source
> - @mkdir -p $(MODLIB)/kernel
> + @mkdir -p $(MODLIB)
> +ifdef CONFIG_MODULES
> @ln -s $(abspath $(srctree)) $(MODLIB)/source
> @if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
> rm -f $(MODLIB)/build ; \
> ln -s $(CURDIR) $(MODLIB)/build ; \
> fi
> @sed 's:^\(.*\)\.o$$:kernel/\1.ko:' modules.order > $(MODLIB)/modules.order
> +endif
> @cp -f modules.builtin $(MODLIB)/
> @cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
>
> -endif # CONFIG_MODULES
> -
> ###
> # Cleaning is done on three levels.
> # make clean Delete most generated files
> @@ -1908,6 +1910,13 @@ help:
> @echo ' clean - remove generated files in module directory only'
> @echo ''
>
> +__external_modules_error:
> + @echo >&2 '***'
> + @echo >&2 '*** The present kernel disabled CONFIG_MODULES.'
> + @echo >&2 '*** You cannot build or install external modules.'
> + @echo >&2 '***'
> + @false
> +
> endif # KBUILD_EXTMOD
>
> # ---------------------------------------------------------------------------
> @@ -1944,13 +1953,10 @@ else # CONFIG_MODULES
> # Modules not configured
> # ---------------------------------------------------------------------------
>
> -modules modules_install:
> - @echo >&2 '***'
> - @echo >&2 '*** The present kernel configuration has modules disabled.'
> - @echo >&2 '*** To use the module feature, please run "make menuconfig" etc.'
> - @echo >&2 '*** to enable CONFIG_MODULES.'
> - @echo >&2 '***'
> - @exit 1
> +PHONY += __external_modules_error
> +
> +modules modules_install: __external_modules_error
> + @:
>
> KBUILD_MODULES :=
>
> --
> 2.39.2

--
epost|xmpp: [email protected] irc://oftc.net/nsc
↳ gpg: 18ed 52db e34f 860e e9fb c82b 7d97 0932 55a0 ce7f
-- frykten for herren er opphav til kunnskap --

2023-06-22 19:40:43

by Josh Triplett

[permalink] [raw]
Subject: Re: [PATCH] kbuild: make modules_install copy modules.builtin(.modinfo)

On Thu, Jun 15, 2023 at 08:17:43PM +0900, Masahiro Yamada wrote:
> Josh Triplett reports that initramfs-tools needs modules.builtin and
> modules.builtin.modinfo to create a working initramfs for a non-modular
> kernel.
>
> If this is a general tooling issue not limited to Debian, I think it
> makes sense to change modules_install.
>
> This commit changes the targets as follows when CONFIG_MODULES=n.
>
> In-tree builds:
> make modules -> no-op
> make modules_install -> install modules.builtin(.modinfo)
>
> External module builds:
> make modules -> show error message like before
> make modules_install -> show error message like before
>
> Link: https://lore.kernel.org/lkml/36a4014c73a52af27d930d3ca31d362b60f4461c.1686356364.git.josh@joshtriplett.org/
> Reported-by: Josh Triplett <[email protected]>
> Signed-off-by: Masahiro Yamada <[email protected]>

Reviewed-by: Josh Triplett <[email protected]>
Tested-by: Josh Triplett <[email protected]>

I'll send a followup patch that makes the Debian packaging script use
`make modules_install` unconditionally.

2023-06-22 19:52:36

by Josh Triplett

[permalink] [raw]
Subject: [PATCH] kbuild: builddeb: always make modules_install, to install modules.builtin*

Even for a non-modular kernel, the kernel builds modules.builtin and
modules.builtin.modinfo, with information about the built-in modules.
Tools such as initramfs-tools need these files to build a working
initramfs on some systems, such as those requiring firmware.

Now that `make modules_install` works even in non-modular kernels and
installs these files, unconditionally invoke it when building a Debian
package.

Signed-off-by: Josh Triplett <[email protected]>
---

This patch depends on
https://lore.kernel.org/lkml/[email protected]/

scripts/package/builddeb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index 252faaa5561c..f500e3910158 100755
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
@@ -62,8 +62,8 @@ install_linux_image () {
${MAKE} -f ${srctree}/Makefile INSTALL_DTBS_PATH="${pdir}/usr/lib/linux-image-${KERNELRELEASE}" dtbs_install
fi

+ ${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" modules_install
if is_enabled CONFIG_MODULES; then
- ${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" modules_install
rm -f "${pdir}/lib/modules/${KERNELRELEASE}/build"
rm -f "${pdir}/lib/modules/${KERNELRELEASE}/source"
if [ "${SRCARCH}" = um ] ; then
--
2.40.1


2023-06-23 21:06:06

by Nicolas Schier

[permalink] [raw]
Subject: Re: [PATCH] kbuild: builddeb: always make modules_install, to install modules.builtin*

On Thu, Jun 22, 2023 at 12:19:53PM -0700 Josh Triplett wrote:
> Even for a non-modular kernel, the kernel builds modules.builtin and
> modules.builtin.modinfo, with information about the built-in modules.
> Tools such as initramfs-tools need these files to build a working
> initramfs on some systems, such as those requiring firmware.
>
> Now that `make modules_install` works even in non-modular kernels and
> installs these files, unconditionally invoke it when building a Debian
> package.
>
> Signed-off-by: Josh Triplett <[email protected]>
> ---

thanks!

Reviewed-by: Nicolas Schier <[email protected]>


> This patch depends on
> https://lore.kernel.org/lkml/[email protected]/
>
> scripts/package/builddeb | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/scripts/package/builddeb b/scripts/package/builddeb
> index 252faaa5561c..f500e3910158 100755
> --- a/scripts/package/builddeb
> +++ b/scripts/package/builddeb
> @@ -62,8 +62,8 @@ install_linux_image () {
> ${MAKE} -f ${srctree}/Makefile INSTALL_DTBS_PATH="${pdir}/usr/lib/linux-image-${KERNELRELEASE}" dtbs_install
> fi
>
> + ${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" modules_install
> if is_enabled CONFIG_MODULES; then
> - ${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" modules_install
> rm -f "${pdir}/lib/modules/${KERNELRELEASE}/build"
> rm -f "${pdir}/lib/modules/${KERNELRELEASE}/source"
> if [ "${SRCARCH}" = um ] ; then
> --
> 2.40.1

--
epost|xmpp: [email protected] irc://oftc.net/nsc
↳ gpg: 18ed 52db e34f 860e e9fb c82b 7d97 0932 55a0 ce7f
-- frykten for herren er opphav til kunnskap --


Attachments:
(No filename) (1.70 kB)
signature.asc (849.00 B)
Download all attachments

2023-06-25 19:19:02

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH] kbuild: builddeb: always make modules_install, to install modules.builtin*

On Fri, Jun 23, 2023 at 4:20 AM Josh Triplett <[email protected]> wrote:
>
> Even for a non-modular kernel, the kernel builds modules.builtin and
> modules.builtin.modinfo, with information about the built-in modules.
> Tools such as initramfs-tools need these files to build a working
> initramfs on some systems, such as those requiring firmware.
>
> Now that `make modules_install` works even in non-modular kernels and
> installs these files, unconditionally invoke it when building a Debian
> package.
>
> Signed-off-by: Josh Triplett <[email protected]>
> ---


Applied to linux-kbuild. Thanks.

What I meant in my previous reply was
to remove "if is_enabled CONFIG_MODULES; then"

Anyway, I did it by myself in a follow-up patch.

https://lore.kernel.org/linux-kbuild/[email protected]/T/#u





--
Best Regards
Masahiro Yamada