Installing Linux Kernel-2.4.18

Estimated build time:           1 minute
Estimated required disk space:  132 MB

Installation of the Linux Kernel

We won't be compiling a new kernel image yet. We'll do that after we have finished the installation of the basic system software in this chapter. But because certain software needs the kernel header files, we're going to unpack the kernel archive now and set it up so that we can compile the packages that need the kernel.

The kernel configuration file is created by running the following command:

make mrproper &&
make include/linux/version.h &&
make symlinks &&
mkdir $LFS/usr/include/asm &&
cp include/asm/* $LFS/usr/include/asm &&
cp -R include/linux $LFS/usr/include &&
touch $LFS/usr/include/linux/autoconf.h

Command explanations

make mrproper: This will ensure that the kernel tree is absolutely clean. We do this because the kernel team recommend that this is done prior to each kernel compilation, and that we shouldn't rely on the source tree being automatically clean after untarring.

make include/linux/version.h and make symlinks: This creates the include/linux/version.h, as well as the include/asm symlink.

mkdir $LFS/usr/include/asm and cp include/asm/* $LFS/usr/include/asm: This copies the platform-specific assembler kernel header files to $LFS/usr/include/asm

cp -R include/linux $LFS/usr/include: This command copies the cross-platform kernel header files to $LFS/usr/include

touch $LFS/usr/include/linux/autoconf.h: Some kernel header files include this autconf.h file, but outside the Linux source tree, that file has no meaning so we just create an empty one so we don't get compile errors whenever it happens to be a dependency of another kernel header file.

Why we copy the kernel headers and don't symlink them

In the past, it was common practice for people to symlink the /usr/include/linux and asm directories to /usr/src/linux/include/linux and asm respectively. This is a bad idea as this extract from a post by Linus Torvalds to the Linux Kernel Mailing List points out:

I would suggest that people who compile new kernels should: 

 - not have a single symbolic link in sight (except the one that the 
   kernel build itself sets up, namely the "linux/include/asm" symlink 
   that is only used for the internal kernel compile itself) 

And yes, this is what I do. My /usr/src/linux still has the old 2.2.13 
header files, even though I haven't run a 2.2.13 kernel in a _loong_ 
time. But those headers were what glibc was compiled against, so those 
headers are what matches the library object files. 

And this is actually what has been the suggested environment for at 
least the last five years. I don't know why the symlink business keeps 
on living on, like a bad zombie. Pretty much every distribution still 
has that broken symlink, and people still remember that the linux 
sources should go into "/usr/src/linux" even though that hasn't been 
true in a _loong_ time.

The relevant part here is where he states that the headers should be the ones which glibc was compiled against. These are the headers which should remain accessible and so by copying them, we ensure that we follow these guidelines. Also note that as long as you don't have those symlinks, it is perfectly fine to have the kernel sources in /usr/src/linux.

Contents of kernel-2.4.17

Support Files

the linux kernel and the linux kernel headers

Descriptions

linux kernel

The Linux kernel is at the core of every Linux system. It's what makes Linux tick. When a computer is turned on and boots a Linux system, the very first piece of Linux software that gets loaded is the kernel. The kernel initializes the system's hardware components such as serial ports, parallel ports, sound cards, network cards, IDE controllers, SCSI controllers and a lot more. In a nutshell the kernel makes the hardware available so that the software can run.

linux kernel headers

These are the files we copy to /usr/include/{linux,asm} in chapter 5. They should match those which glibc was compiled against and so should not be replaced when upgrading the kernel. They are essential for compiling many programs.

Dependencies

Linux-2.4.17 needs the following to be installed:


bash: sh
binutils: ar, as, ld, nm, objcopy
fileutils: cp, ln, mkdir, mv, rm, touch
findutils: find, xargs
gcc: cc1, collect2, cpp0, gcc
grep: grep
gzip: gzip
make: make
gawk: awk
modutils: depmod, genksyms
net-tools: dnsdomainname, hostname
sed: sed
sh-utils: basename, date, expr, pwd, stty, uname, whoami, yes
textutils: cat, md5sum, sort, tail