Kernel/Configuration

This article describes the manual configuration and setup of the Linux kernel. For an automatic method see the genkernel article.

Set symlink
The symlink /usr/src/linux should always point to the kernel sources that is currently being used. This can be done in one of three ways:


 * 1. Installing the kernel sources with active symlink USE flag
 * This will make the /usr/src/linux point to your newly installed kernel sources. If necessary, it can still be modified later with the following two methods:


 * 2. Setting the symlink with eselect:




 * This outputs the available kernel sources. The asterisk indicates the chosen sources. To change the kernel sources, e.g. to the second entry, do:




 * 3. Setting the symlink manually:



Configuration tools
The kernel offers several tools to configure itself:


 * make config
 * Text based configuration. The options are prompted one after another. All options need to be answered, and out-of-order access to former options is not possible.


 * make menuconfig
 * Graphical menu (only text input). You can navigate through the menu and change the options you want.


 * make nconfig
 * Graphical menu based on ncurses. Requires to be installed.


 * make xconfig
 * Graphical menu using Qt4. Requires to be installed.


 * make gconfig
 * Graphical menu using GTK+. Requires, and  to be installed.

There are also several scripts to create miscellaneous default configurations. See:

Existing configuration
If an existing configuration should be used to configure a kernel, there are several ways to obtain one.

From the currently running kernel
When the kernel configuration option CONFIG_IKCONFIG (General Setup -> Kernel .config support) is enabled, the configuration of the currently running one can be accessed through the virtual file /proc/config.gz.

From a previously built Kernel
To re-use the config file from a previously built kernel, there are various ways to access it.

Build directory
If the directory of an old kernel hasn't been deleted/cleaned yet, the configuration is still available in the file .config.

Saved genkernel configurations
When using genkernel for building the kernel and having set SAVE_CONFIG="yes" in its configuration, the config will be saved in the /etc/kernels directory.

Configuration
This article describes the configuration using make menuconfig, but the procedure is similar for the other menus. Change the working directory to /usr/src/linux.

When using an already existing configuration, make sure to update the configuration first to the current kernel's configuration options. This will ask for configuration options introduced since the previous configuration's kernel.

Now start the configuration.

Usage
In the shown menu the blue bar indicates your position. With the arrow keys and  you can change the position. The arrow keys and  traverse the menu bar in the bottom and define, what happens, when you hit the  key. Select switches to a sub menu - the menu entries ending with ---> -, while Exit exits a sub menu. Alternative you can hit the key twice.

Menu entries, which start with brackets, are drivers or features which can be activated:


 * [ ], [*]
 * Options in square brackets can be activated or deactivated. The asterisk marks the menu entry as activated. You change the value with the key or press  (Yes) to activate or  (No) to deactivate the entry.
 * Is the option is activated, the chosen driver will be built into the kernel and will always be available at boot time.


 * < >, , <*>
 * Options in angle brackets can be activated or deactivated, but also activated as module (indicated by a M). You change the value as before and press key for activate as module.
 * The differentiation between a driver as module and a driver build into the kernel is, that the module is not loaded at boot time, so speeds up the boot. As needed you are loading the module yourself or let a tool like udev do it (as needed also at boot time). Simpler in the usability is a driver build into the kernel.


 * {M}, {*}
 * Options in curly brackets can be activated or activated as module but not be deactivated, because another driver needs this activated in either way.


 * -M-, -*-
 * Options between hyphens are activated in the shown way by another driver. There is no choice.

Furthermore some menu entries have a tag at the end:


 * (NEW)
 * This driver is new in the kernel and is maybe not stable enough.


 * (EXPERIMENTAL)
 * This driver is experimental and most likely not stable enough.


 * (DEPRECATED)
 * This driver is deprecated and not needed for most systems.


 * (OBSOLETE)
 * This driver is obsolete and should not be activated.

Most options have a description, which get by pressing the key or choose in the menu bar Help.

Driver selection
See the hardware detection article and the articles in the Hardware category.

Search modules
Within menuconfig, you can use to search modules by keyboards.

Build
After configuring the kernel you have to compile the kernel:

If you have a processor with multiple cores, you can let all the cores do the work. For this add the parameter -j(NUMBER_CORES +1). For a dual core processor:

Setup
If activated drivers as modules, you have to install them:

The modules will be copied to a sub directory of /lib/modules.

To install the actual kernel:

This command executes /sbin/installkernel, which is part of the package. It copies the kernel and the additional files in Debian's naming syntax to /boot and creates there the symlinks vmlinuz, System.map and config</tt>, which point to the new kernel etc. The symlinks pointing to the older kernel sources will be renamed to .old</tt> suffix, as well as the old kernel if it has the same version as newly-installed one. These symlinks are handy, because they point always to the newest kernel without changing the file path (e.g. you can use them in the bootloader configuration).

Bootloader
Change your bootloader configuration to pick up at boot the new kernel.

Finally restart your system with the new kernel.