Currently, the kernel supports configuration via:

Of these, the first three are fundamentally interactive in nature. The fourth, make oldconfig, is ``less interactive,'' but still may involve some questions to be asked of the user.

I have written qconfig; it is a fundamentally non-interactive kernel configuration program, which gets its configuration settings from a file that the user creates.

It works as follows.

  1. Create a file named ``qconfig.in'' in your main kernel directory. For each non-default config variable setting, put a line in qconfig.in giving the definition of the variable in question; e.g.,
    Comments work as in /bin/sh. Note that the syntax
    # CONFIG_FOOBAR is not defined
    is not supported in this file (only in arch/$ARCH/defconfig). Also, qconfig will silently change an m answer to y or vice versa if necessary.
  2. Instead of typing ``make *config,'' type:
    make symlinks
  3. In addition to the files .config and include/linux/autoconf.h, qconfig will produce a file ``qconfig.out'' containing the script of what would have happened if one had typed ``make config'' and accepted all the default choices except those given in qconfig.in.

When I change kernel versions, I copy over the qconfig.in file, run qconfig, and diff the old and new qconfig.out files to see what has changed in the configuration. This step is traditionally performed by ``make oldconfig.'' Advantages of using qconfig instead are:

This program may also be useful for those who want to set up scripts for automatically configuring and compiling the kernel. I have placed the source to this program on the web at http://math.berkeley.edu/~vojta/qconfig.c.

Some additional notes: