Documenting Kernel Configuration Files and Using the Miniconfig Format

I was recently compiling a customized 2.6.23 kernel, to get a better overview what I really selected I used the miniconfig format. It only contains the config options which a user would have to select from within menuconfig if he started from an allnoconfig setup.

Rob Landley has written miniconfig.sh, a script which takes a normal kernel config file and removes all redundant symbols which are indirectly selected. This has the advantage that the resulting config file is bloat free and gives a good overview of the selected features.

First do a make menuconfig select your config options as needed, copy the .config file to a temporary location and then run the miniconfig.sh script with the temporary file name as argument. This will generated a corresponding mini.config file. Make sure that you set the ARCH variable as appropriate. Below is an example:

make ARCH=i386 menuconfig
mv .config tempfile
ARCH=i386 miniconfig.sh tempfile
cat mini.config

To expand a mini.config back into a full .config file (to build a kernel by hand, or for further editing with menuconfig), you can go:

make ARCH=i386 allnoconfig KCONFIG_ALLCONFIG=mini.config

So far so good, I now had a reasonable small config file, but I still wasn’t sure what each config options actually does. Furthermore, I was too lazy to actually look up each symbol in the menuconfig help system, as a consequence I wrote an explain-config.sh script. It takes a kernel config file and documents each option with the help text as found in the various Kconfig files in the kernel source tree. So I finally had a short and documented config file which I could further fine tune.

Hope you find it useful.

Marc