9.3.1. Installation of the kernel
        
        
          Building the kernel involves a few steps—configuration,
          compilation, and installation. Read the README file in the kernel source tree for
          alternative methods to the way this book configures the kernel.
        
        
          Prepare for compilation by running the following command:
        
        
make mrproper
        
          This ensures that the kernel tree is absolutely clean. The kernel
          team recommends that this command be issued prior to each kernel
          compilation. Do not rely on the source tree being clean after
          un-tarring.
        
        
          Configure the kernel via a menu-driven interface. Please note that
          the udev bootscript requires "rtc" and "tmpfs" to be enabled and
          built into the kernel, not as modules. BLFS has some information
          regarding particular kernel configuration requirements of packages
          outside of CLFS at 
          http://www.linuxfromscratch.org/blfs/view/svn/longindex.html#kernel-config-index:
        
        
          ![[Note]](../images/note.png) 
          
            Note
          
          
            Since we are building for an embedded system we need to make sure
            our key components are built into the kernel and not as modules.
            Our key components are console/video, disk, and network. With out
            these built in our system will not function properly. If your
            concerned about disk space, your kernel should be without
            modules.
          
         
        
    cp ${CLFS}/boot/config-3.0.80 .config
   
        
          Alternatively, make
          menuconfig may be more appropriate in some
          situations. See the README file for
          more information.
        
        
          If desired, skip kernel configuration by copying the kernel config
          file, .config, from the host system
          (assuming it is available) to the root directory of the unpacked
          kernel sources. However, we do not recommend this option. It is
          often better to explore all the configuration menus and create the
          kernel configuration from scratch.
        
        
          Compile the kernel image and modules:
        
        
make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- bzImage modules
        
          If using kernel modules, an /etc/modprobe.conf file may be needed.
          Information pertaining to modules and kernel configuration is
          located in the kernel documentation in the Documentation directory of the kernel sources
          tree. Also, modprobe.conf(5) may be
          of interest.
        
        
          Be very careful when reading other documentation relating to kernel
          modules because it usually applies to 2.4.x kernels only. As far as
          we know, kernel configuration issues specific to Hotplug and Udev
          are not documented. The problem is that Udev will create a device
          node only if Hotplug or a user-written script inserts the
          corresponding module into the kernel, and not all modules are
          detectable by Hotplug. Note that statements like the one below in
          the /etc/modprobe.conf file do not
          work with Udev:
        
        
alias char-major-XXX some-module
        
          Because of the complications with Udev and modules, we strongly
          recommend starting with a completely non-modular kernel
          configuration, especially if this is the first time using Udev.
        
        
          Install the modules, if the kernel configuration uses them:
        
        
make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- \
    INSTALL_MOD_PATH=${CLFS} modules_install
        
          After kernel compilation is complete, additional steps are required
          to complete the installation. Some files need to be copied to the
          ${CLFS}/boot directory.
        
        
          Issue the following command to install the kernel:
        
        
cp arch/x86/boot/bzImage ${CLFS}/boot/clfskernel-3.0.80
        
          System.map is a symbol file for the
          kernel. It maps the function entry points of every function in the
          kernel API, as well as the addresses of the kernel data structures
          for the running kernel. Issue the following command to install the
          map file:
        
        
cp System.map ${CLFS}/boot/System.map-3.0.80
        
          If we compiled our kernel with modules and we made sure
          depmod.pl is avaiable
          from BusyBox, we need to create the module dependency list by
          issuing the following command:
        
        
${CLFS}/cross-tools/bin/depmod.pl -F ${CLFS}/boot/System.map-3.0.80 \
    -b ${CLFS}/lib/modules/3.0.80
        
          The kernel configuration file .config
          produced by the make
          menuconfig step above contains all the
          configuration selections for the kernel that was just compiled. It
          is a good idea to keep this file for future reference:
        
        
cp .config ${CLFS}/boot/config-3.0.80
        
          ![[Warning]](../images/warning.png) 
          
            Warning
          
          
            Some kernel documentation recommends creating a symlink from
            /usr/src/linux pointing to the
            kernel source directory. This is specific to kernels prior to the
            2.6 series and must not be
            created on an CLFS system as it can cause problems for packages
            you may wish to build once your base CLFS system is complete.
          
         
        
          The bootloaders section contains more information on how to
          configure the kernel for specifc bootloaders. Please refer to this
          section for your specific needs.