Thread (13 messages) 13 messages, 4 authors, 2018-09-03

Re: due to kconfig changes kernel config file is no longer sufficient for configuring the kernel

From: Masahiro Yamada <hidden>
Date: 2018-09-03 10:07:08
Also in: linux-kbuild, linux-sh, linux-um, lkml, sparclinux

Hi,


2018-08-21 6:33 GMT+09:00 Michal Suchánek [off-list ref]:
Hello,

On Tue, 21 Aug 2018 03:15:12 +0900
Masahiro Yamada [off-list ref] wrote:
quoted
2018-08-07 3:07 GMT+09:00 Michal Suchánek [off-list ref]:
quoted
On Mon, 30 Jul 2018 17:02:42 +0900
Masahiro Yamada [off-list ref] wrote:
quoted
2018-06-28 18:16 GMT+09:00 Michal Suchánek [off-list ref]:
quoted
On Wed, 27 Jun 2018 23:07:21 +0900
Masahiro Yamada [off-list ref] wrote:
quoted
quoted
quoted

quoted
quoted
out-of-tree modules are built with exactly the same
configuration as used for the kernel.
It is not true. And that is the problem. You need the config file
and dump of the environment passed to the make command at
configuration time to get the exact same configuration. The
environment is not saved anywhere, though.

Why dump of the environment?


If you are building external modules natively
your distribution provides /lib/modules/$(uname -r)/build,
which contains files enough for building external modules.

You can pass the directory path to M=... parameter.  That's it.
No, that's not it. Since passing ARCH=i386 is the de-facto standard
to configure a 32bit kernel and the result of passing that was not
saved you need to pass it to make as well.

If you pass ARCH= for the configuration phase,
you need to pass the same ARCH= in the build phase.




What I can suggest for you is:


$ make ARCH=i386 defconfig
$ make ARCH=i386

   OR

$ make i386_defconfig
$ make
Maybe you missed that but I do not want to build the defconfig. I want
to build a *particular* config which has been saved in a file
beforehand.
quoted
quoted
And you need to patch a number of
3rd party build scripts that build a kernel module as part of a
bigger project.

You do not need to patch a number of scripts.

Just one liner fix.
Add 'export ARCH=i386' in the top level script.
And that does not work because there is no toplevel script. rpm has
three toplevel scripts - prep, build and install.

OK, I understood real problem cases.

I wrote patches to support non-interactive .config updates.

For package building like rpm, deb, etc.
the target ARCH is determined when creating a source package.
If so, it would not hurt to hard-code to record ARCH in the spec file.

Building out-of-tree module is another toplevel script.

As I said before, the .config is not reconfigured
when building out-of-tree modules.

Out-of-tree modules are built with the .config
that has been used to build vmlinux
regardless of whether you pass ARCH=i386, ARCH=x86_64, or nothing.

If rpmbuild is given target option like 'rpmbuild --target i386 ...",
it think it makes sense to propagate it to ARCH=.

And it does not suffice to 'export ARCH=i386'. What if it was a 64bit
config? How do I tell?

With more and more options left out of the config that depend on
compiler features, environment variables, phase of the moon or whatnot
you can't even tell what kind of kernel the user is running by looking
at the config.

I added non-interactive .config update.

Please try it.




-- 
Best Regards
Masahiro Yamada
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help