## 44.3. Basic Kernel Configuration

Generally a Unix kernel is made up of some core, which handles fundamental functionality like virtual memory, and a lot of modules for various devices. A kernel configuration file is used to build a kernel and, on some platforms, a set of loadable kernel modules.

A kernel configuration file has a list of kernel options and then a list of devices and device options. The kernel build process uses this file to determine exactly what to build; this way you can have a kernel that supports exactly the hardware you have in your machine but isn't using any extra resources to support hardware you don't have.

Some example device lines from various kernel configuration files:

>     #
>     # FreeBSD samples
>     #
>     maxusers        128
>     options         INCLUDE_CONFIG_FILE
>     options         INET                    #InterNETworking
>     device          isa
>     device          pci
>     device          ata0    at isa? port IO_WD1 irq 14
>     device          ata
>     device          atadisk                 # ATA disk drives
>     device          atapicd                 # ATAPI CDROM drives
>     device          atapifd                 # ATAPI floppy drives
>     device          atapist                 # ATAPI tape drives
>     options         ATA_STATIC_ID           #Static device numbering

>     #
>     # Linux samples
>     #
>     # Loadable module support
>     CONFIG_MODULES=y
>     CONFIG_MODVERSIONS=y
>     # CONFIG_KMOD is not set

>     # General setup
>     CONFIG_NET=y
>     CONFIG_PCI=y

>     # Block devices
>     CONFIG_BLK_DEV_FD=m
>     CONFIG_BLK_DEV_IDE=y
>     # CONFIG_BLK_DEV_HD_IDE is not set
>     CONFIG_BLK_DEV_IDEDISK=y
>     CONFIG_BLK_DEV_IDECD=m
>     CONFIG_BLK_DEV_IDETAPE=m
>     CONFIG_BLK_DEV_IDEFLOPPY=m
>     # CONFIG_BLK_DEV_IDESCSI is not set
>     CONFIG_BLK_DEV_IDEPCI=y
>     CONFIG_BLK_DEV_IDEDMA=y
>     CONFIG_IDEDMA_AUTO=y

The kernel build process involves setting up an appropriate configuration file for your platform and then using a tool (generally config(8); check the manpage) to create a kernel build setup from the configuration file. Then you simply run make within the kernel build setup and you have a new kernel. Once the new kernel is installed, you reboot the machine, and poof, you're running on a sleek new customized kernel.

To understand how to configure the kernel on your platform, consult the documentation for that platform. Note that many platforms have tools or even GUIs for helping you configure your kernel. For the free Unixes, search the Web. There are extensive HOWTOs available describing how to configure your kernel in excruciating detail.

Linux has a very detailed HOWTO for kernel configuration at http://www.tldp.org/HOWTO/Kernel-HOWTO.html. The short version is that the configuration file mentioned above is stored in the .config file at the top of the kernel source tree (usually /usr/src/linux). Generally you don't have to edit it directly; instead you'd use `make` `menuconfig` or `make` `xconfig`, again at the top of the kernel source tree, to use the fancy kernel configuration tools.

-- DJPH

Copyright © 2003 O'Reilly & Associates. All rights reserved.