How to Compile 2.6 kernel for RedHat 9 and 8.0 and Fedora Updates
Copyright (c) 2004 (GPU Free Documentation License)
Last Updated: Fri Jun 11 22:07:40 EDT 2004
The latest version of this document can be found at:
For configs ref:
Download the latest version of the kernel and any patches.
This documentation is done with linux-2.6.3, but look for
Also take a look at
This has some useful hints on some of the changes needed.
Download the latest version of module-init-tools
Install module-init-tools. This will replace depmod
[/sbin/depmod] and other tools.
tar -zxvf module-init-tools-3.0.tar.gz
Install modutils-2.4.21-23.src.rpm. You may get warnings
about user rusty and group rusty not existing. Also, yes,
you'll have to force the install. If you don't do these steps
for both Redhat 9 and Redhat 8, you'll have problems with the
rpm -i modutils-2.4.21-23.src.rpm
rpmbuild -bb /usr/src/redhat/SPECS/modutils.spec
rpm -Fi /usr/src/redhat/RPMS/i386/modutils-2.4.21-23.i386.rpm
Install and configure the kernel. Do NOT use the /usr/src/linux
area! Reference the README. I put my files in /home/src/kernel/
gunzip linux-2.6.3.tar.gz tar -xvf linux-2.6.3.tar cd
If you have patches install these now:
bzip2 -dc ../patch-2.6.xx.bz2 | patch -p1
Copy the appropriate /usr/src/linux-2.4/configs
to .config in whatever directory you are installing. In my
case it's /home/src/kernel/linux-2.6.3
cp /usr/src/linux-2.4/configs/kernel-2.4.20-i686.config \
If you don't have the source configs, you can download them
I've also included a file config2.6-chirico which was a 2.6
version for some of my systems. This isn't a bad reference if
you run into trouble.
Assuming you copied the appropriate kernel-2.4 config to
.config, run the following which will run through necessary
questions for the 2.6 kernel. Or, you might want to use the
config2.6-chirico...this has already been run through make
oldconfig on my system, and I've answered the necessary questions
for a general system.
See SPECIAL NOTES below if you've done this step multiple
This is very important. Make sure you're .config has the
following in it CONFIG_EXT3_FS=y You'll run into the following
error if you leave this =m instead of =y:
pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed
This is because Redhat 9.0 and 8.0 use the ext3 filesystem
for /boot ...
Edit the Makefile and add changes to the Extraversion as desired.
Patches will update these values as well.
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 3
EXTRAVERSION = -skim-ch6
If you come across errors here, what version of "depmod" is
being picked up in your path?
Also, if you get a module not found, say the following:
No module aic7xxx found for kernel 2.6.x
Then, in /lib/modules/2.6.x/kernel/drivers/scsi/aic7xxx/
cp aic7xxx.ko aic7xxx.o
insmod should look for aic7xxx.ko ;but , it looks for aic7xxx.o
If you still have trouble, make the following change in the
and go back to STEP 10.
You also may want to ref
/etc/rc.sysinit needs to be modified. Look for the following
action $"Mounting proc filesystem: " mount -n -t proc /proc /proc
and after this line enter the following:
action $"Mounting sysfs filesystem: " mount -t sysfs none /sys
Here's my /etc/rc.sysinit for reference:
Be very careful at this step. Backup the /etc/rc.sysinit file.
] also added
changes to /etc/fstab. I only had to do STEP 16 below.
Add the following to /etc/fstab for usb support.
/proc/bus/usb /proc/bus/usb usbdevfs defaults 0 0
STEP 17 (CHECKING EVERYTHING):
Check the following:
a. The new image file should be installed on boot and there
should be sym link to it. My latest kernel is 2.6.3-skim-ch6,
and I got the "-skim-ch6" from the values I put in the Makefile,
so I see the following:
vmlinuz -> vmlinuz-2.6.3-skim-ch6
System.map -> System.map-2.6.3-skim-ch6
/boot/grub/grub.conf Should have been automatically
updated from make.
In /boot/grub/grub.conf change "default=0" to boot
with the new kernel. Here's an example of my
# grub.conf generated by anaconda
# Note that you do not have to rerun grub after making
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to
# root (hd0,2)
# kernel /vmlinuz-version ro root=/dev/hda6
# initrd /initrd-version.img
title Red Hat Linux (2.6.3-skim-ch6)
kernel /vmlinuz-2.6.3-skim-ch6 ro root=LABEL=/
b. The directory /sys exists
c. You added the mount command for sys in /etc/rc.sysinit
d. CONFIG_EXT3_FS=y was used in the .config
e. Run /sbin/lsmod or cat /proc/modules to make
sure a 2.4 kernel module wasn't forgotten. Also
look at "$cat /proc/iomem"
STEP 18 (GETTING FEDORIA UPDATES: YUM):
Yum works with RPM based systems to update packages
automatically. Yum is an officially supported update
mechanism for Fedora, and Fedora mirrors are set up
as Yum repositories.
Before installing Yum, or any RPM package, you'll need
to do the following:
Next, install Yum
rpm -ivh yum-2.0.7-1.noarch.rpm
The "/etc/yum.conf" may need to be updated. Here is an
example file with the values for redhat 9 entered in
name=Fedora Project Stable RPMS for RHL 9
name=Fedora Project update RPMS for RHL 9
NOTE: If you're using Redhat 8, replace 9 with "8.0"
Next update your GPG-KEY
rpm --import http://www.fedora.us/FEDORA-GPG-KEY
The following will download a lot of "HEADER" files, but WILL NOT update
anything. Yes, I too thought my system was being updated with old files,
but IT IS NOT.
After this runs, which takes awhile. You can then update selected packages.
Here is an example of the "libpng10" package being updated.
yum -y update libpng10
Also, subsequent calls to "yum check-update" shows what needs to be updated.
To update every currently installed package
yum -y update
or to exclude packages like kernel and httpd:
yum --exclude kernel* --exclude httpd* -y update
STEP 19 (DEVELOP YOUR OWN 2.6 MODULES):
You're done with the 2.6 build. So learn how to develop
2.6 kernel modules. First, checkout the following article
Then, take a look at the following sample code, which shows how
to create /proc entries for communicating with the kernel and writing
out to any available tty device.
UPGRADING TO FEDORA (DISKLESS INSTALL)
It's possible to completely install Fedora by downloading the *.iso image, mount
it to a loopback device, copy the Linux kernel images to /boot, modify grub, reboot, then
have it find the *.iso image for the rest of the install.
Download the complete DVD package. It's 4 GB:
Once downloaded check the md5sum
Create a directory off of root for mounting the iso image.
The DVD image file can be mounted with the following command:
mount -o loop -t iso9660 /FC2-i386-DVD.iso /iso0
Copy /iso0/images/pxeboot to the /boot directory
cp -r /iso0/images/pxeboot /boot/.
Modify Grub to include the following:
title Fedora (INIT)
Special note: Look at the other grub entries "root (hd0,1)", perhaps
it's listed as "root (hd3,0)" or (hd2,0). This must be the same, so
change hd0 above to match the other entries.
Make note of where FC2-i386-DVD.iso resides by issuing the "df" command.
$ df .
You'll need this location after reboot. It's something like /dev/hda1 or /dev/hdb2
Reboot. When asked for the location of the "iso" file select FILE on the Fedora menu.
put in the /dev/hda1 location above. Note if it's in a subdirectory off of this
filesystem there is a text box to enter that as well.
The install should proceed on its own from here.
Sometimes you "make mrproper" and "make distclean" if
you have done multiple changes and need to start fresh.
KERNEL DRIVER DEVELOPMENT IN 2.6:
Excellent (series of articles):
Here's my sample program:
Good but dated for 2.4 kernel:
Further index of on-line links:
The OS used to develop Linux: