%general-entities; ]> Linux-&linux-version; Linux <para>The Linux package contains the kernel and the header files.</para> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem><seg>All default options: 4.20 SBU</seg> <seg>All default options: 181 MB</seg></seglistitem> </segmentedlist> <segmentedlist> <segtitle>Linux installation depends on</segtitle> <seglistitem><seg>Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed</seg></seglistitem> </segmentedlist> </sect2> <sect2 role="installation"> <title>Installation of the kernel Building the kernel involves a few steps: configuration, compilation, and installation. If you don't like the way this book configures the kernel, view the README file in the kernel source tree for alternative methods. 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. You shouldn't rely on the source tree being clean after un-tarring. Also, assure that the kernel does not attempt to pass hotplugging events to userspace until userspace specifies that it is ready: sed -i 's@/sbin/hotplug@/bin/true@' kernel/kmod.c Configure the kernel via a menu-driven interface: make menuconfig make oldconfig may be more appropriate in some situations. See the README file for more information. If you wish, you may skip kernel configuration by simply copying the kernel config file, .config, from your host system (assuming it is available) to the unpacked linux-&linux-version; directory. However, we don't recommend this option. You're much better off exploring all the configuration menus and creating your own kernel configuration from scratch. For POSIX shared memory support, ensure that the kernel config option Virtual memory file system support is enabled. It resides within the File systems menu and is normally enabled by default. LFS bootscripts make the assumption that you either compile both Support for Host-side USB and USB device filesystem directly into the kernel, or don't compile them at all. Bootscripts will not work properly if it is a module (usbcore.ko). NPTL requires the kernel to be compiled with GCC 3.x, in this case &gcc-version;. Compiling with 2.95.x is known to cause failures in the glibc testsuite, so do not compile the kernel with gcc 2.95.x unless you know what you're getting yourself into. Compile the kernel image and modules: make If you intend to use kernel modules, you may need an /etc/modprobe.conf file. Information pertaining to modules and to kernel configuration in general may be found in the kernel documentation, which is found in the linux-&linux-version;/Documentation directory. The modprobe.conf man page may also be of interest to you. Be very suspicious while reading other documentation, because it usually applies to 2.4.x kernels only. As far as the editors know, kernel configuration issues specific to Hotplug and Udev are documented nowhere. 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 alias char-major-XXX some-module in /etc/modprobe.conf file don't work with Udev, and other aliases are often unnecessary with Hotplug. Because of all those compilcations with Hotplug, Udev and modules, we strongly recommend you to start with a completely non-modular kernel configuration, especially if this is the first time you use Udev. Install the modules, if your kernel configuration uses them: make modules_install If you have a lot of modules and very little space, you may want to consider stripping and compressing the modules. For most people such compression isn't worth the trouble, but if you're really pressed for space, then have a look at . Kernel compilation has finished but more steps are required to complete the installation. Some files need to be copied to the /boot directory. The path to the kernel image may vary depending on the platform you're using. Issue the following command to install the kernel: cp arch/i386/boot/bzImage /boot/lfskernel-&linux-version; System.map is a symbol file for the kernel. It maps the function entry points of every function in the kernel API (Application Programming Interface), 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 /boot/System.map-&linux-version; .config is the kernel configuration file that was produced by the make menuconfig step above. It contains all the config selections for the kernel that was just compiled. It's a good idea to keep this file for future reference: cp .config /boot/config-&linux-version; It is important to note that the files in the kernel source directory are not owned by root. Whenever you unpack a package as user root (like we did here inside chroot), the files end up having the user and group IDs of whatever they were on the packager's computer. This is usually not a problem for any other package you install because you remove the source tree after the installation. But the Linux source tree is often kept around for a long time, so there's a chance that whatever user ID the packager used will be assigned to somebody on your machine and then that person would have write access to the kernel source. If you are going to keep the kernel source tree around, you may want to run chown -R 0:0 on the linux-&linux-version; directory to ensure all files are owned by user root. Contents of Linux Installed files the kernel, the kernel headers, and the System.map Short descriptions The kernel kernel is the engine of your Linux system. When switching on your box, the kernel is the first part of your operating system that gets loaded. It detects and initializes all the components of your computer's hardware, then makes these components available as a tree of files to the software, and turns a single CPU into a multi-tasking machine capable of running scores of programs seemingly at the same time. The kernel headers kernel headers define the interface to the services that the kernel provides. The headers in your system's include directory should always be the ones against which Glibc was compiled and should therefore not be replaced when upgrading the kernel. System.map /boot/System.map is a list of addresses and symbols. It maps the entry points and addresses of all the functions and data structures in the kernel.