Difference between config, menuconfig and defconfig

Valdis.Kletnieks at vt.edu Valdis.Kletnieks at vt.edu
Mon Sep 19 13:13:50 EDT 2016


On Mon, 19 Sep 2016 10:58:35 -0400, Aruna Hewapathirane said:

> make menuconfig:
> An ncurses-based pseudo-graphical menu (only text input). Navigate through
> the menu to modify the
> desired options. Within menuconfig, use the / key to search modules by name.

Actually, / searches (in a case-insensitive manner, so feel free to
type in lower case) for CONFIG_WHATEVER variables, not modules.

The distinction is important for 2 reasons:

1) Sometimes, the config variable that controls building a module
isn't the uppercase version of the module name.  It's rare, but does
happen.  For example, a Fedora 4.3.0 kernel has 2,739 =m entries in its
.config.  Of those:

[/lib/modules/4.3.0-0.rc0.git14.1.fc24.x86_64] for i in `grep =m /boot/config-4.3.0-0.rc0.git14.1.fc24.x86_64 |  sed -e 's/^CONFIG_//' -e 's/=m$//' | tr 'A-Z' 'a-z'`; do find . -name ${i}.ko.xz; done | wc -l
531
Only 531 are the lowercase of the config name.

[/lib/modules/4.3.0-0.rc0.git14.1.fc24.x86_64] for i in `grep =m /boot/config-4.3.0-0.rc0.git14.1.fc24.x86_64 |  sed -e 's/^CONFIG_//' -e 's/=m$//' | tr '_A-Z' '-a-z'`; do find . -name ${i}.ko.xz; done | wc
593
And some more have underscores changed to dashes (CONFIG_FOO_BAR -> foo-bar.ko)

And the *majority* of them play games of one form or another:

obj-$(CONFIG_BATTERY_OLPC)      += olpc_battery.o
obj-$(CONFIG_BLK_DEV_LOOP)     += loop.o
obj-$(CONFIG_LOOPBACK_TARGET)        += tcm_loop.o
obj-$(CONFIG_NVME_TARGET_LOOP)           += nvme-loop.o

and so on...

2) It's also good for finding yes/no variables that don't control
building a module. For example:

CONFIG_ALLOW_DEV_COREDUMP=y

> make defconfig:
> Generates a new config with default from the ARCH supplied defconfig file.
> Use this option to get back the
> default configuration file that came with the sources.

Actually, that *won't* get you back "the config that came with the sources".
If you look in a release source tarball from kernel.org, there *isn't* a
.config in there, you need to create one somehow (copying a distro .config
and then running 'make localmodconfig' is a popular choice).

And there's no guarantee that 'make defconfig' will re-create whatever
your distro shipped - in fact, it probably *won't* do so, because distros
rarely, if ever, ship a kernel that's built with a Linus-approved defconfig.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 484 bytes
Desc: not available
Url : http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20160919/a77703ff/attachment.bin 


More information about the Kernelnewbies mailing list