Date: Thu, 11 Feb 1999 07:14:47 -0800 (PST)
From: Greg Herlein <gherlein@herlein.com>
To: redhat-devel-list@redhat.com
Subject: Modules and New Kernels
Someone posted a question here yesterday about a problem with
modules not working correctly after he upgraded his kernel. I am
"modernizing" a document that was sent to me about the same
question recently, so I thought I would post it here as a
resource.
I have written Riley Williams (rhw@bigfoot.com) who maintains the
Modules Mini-HOWTO and he has indicated that he has little time
to update the document, and says to go for it if I see the need.
I plan to roll the document below into the Mini-HOWTO here soon,
and try to update it for the new 2.2.X kernels. Anyone want to
participate with me?
Here is the basic Red Hat Module Upgrade Howto:
----------------------------------------------------------------
Installing/updating a new kernel on Red Hat Linux
-------------------------------------------------
(attributed to Gene Czarcinski, edited 2/99 by Greg Herlein -
needs lot more modernization and fixes to make it current)
The following is based on kernel => 2.0.35 (or 2.1.125 for rawhide) and
initscripts => 3.67 (or 3.78 for rawhide). It also includes some info
from RedHat HOWTOs for kernel upgrade procedures (these seem to change early
and often).
The following info is NOT intended for the novice but may be helpful
anyway.
The "binary" (i386) packages involved are:
- kernel
- kernel-modules
- kernel-pcmcia-cs
- iBCS
- kernel-headers
- kernel-source
- initscripts
You may also need/want to install the kernel<<...>.src.rpm [see below]
1. If you do not need pcmcia or iBCS support, ignore these packages. You
can do a rpm -e to delete them if they are installed but not needed.
2. You can copy the kernel, kernel-modules, and (optionally) the
kernel-pcmcia-cs packages to a temporary directory. Do the commands:
cd /<<the temp dir>/
rpm -ivh *.i386.rpm
in the temporary directory. This will INSTALL the new kernel and modules
while leaving the OLD kernel in place. DO NOT (repeat), DO NOT install a
kernel with -Uvh since any slip and you will have NO system to boot.
3. At some time you will want to update (rpm -Uvh ...) the kernel-headers
and kernel-source but you may want to wait until you make sure the
new kernel works (at least that is what I do).
4. Check to make sure the installed initscripts package is correct for
the new kernel. Look at the CHANGES file in the kernel source
directory to see what version is required for the kernel you want to
run. If you have an old version, then update it.
5. If you have any scsi devices and want to boot off of one (check
/etc/conf.modules), you will need to generate an initial ramdisk.
This is to get the SCSI driver into a place where it can be read
before it mounts the SCSI drive (makes sense, doesn't it?). I do this
anyway if there is anything in /etc/conf.modules. Issue the command
mkinitrd of the form:
/sbin/mkinitrd /boot/initrd-<<version>.img <<version>
where <<version> is the version of your kernel/kernel-modules rpms such
as 2.0.35-2. If you build SCSI support into your kernel then you do
not need to do this.
6. Modify (edit) you /etc/lilo.conf file to add an entry of the form:
image=/boot/vmlinuz-2.0.35-2
label=test
root=/dev/hda2
initrd=/boot/initrd-2.0.35-2
read-only
and then run /sbin/lilo. Take particular note that you specify the
initrd-<xxx> correctly.
7. Reboot the system and select test at the lilo prompt. When you are
satisfied that the new kernel is OK, you can "move" the lilo.conf entry
to the top (so it is the default) and change the labels of the kernels
to something like:
test -> linux
linux -> old
8. If you need to modify the kernel, upgrade/install kernel-source and
rebuild the kernel to your liking. Assuming that you have installed 2.0.35-2
and then do your own kernel, install the indicated files in more or less
the following form (supply your own version idents:
cp -vp /usr/src/linux/arch/i386/boot/zImage /boot/vmlinuz-2.0.35-2a
mv /lib/modules/2.0.35 /lib/modules/2.0.35-2a
cp -vp /usr/src/linux/System.map /boot/System.map-2.0.35-2a
cp -vp /boot/module-info-2.0.35-2 /boot/module-info-2.0.35-2a
/sbin/mkinitrd /boot/initrd-2.0.35-2a.img 2.0.35-2a
NOTE: /lib/modules/2.0.35 was created by "make modules_install".
Now, modify you /etc/lilo.conf file, run /sbin/lilo, and reboot to
begin testing.
9. More than likely, the new system WILL NOT WORK PROPERLY ... no
modules! The "current" versions of initscripts (3.65 on 5.1 and 3.78
on rawhide) requires the file /lib/modules/<<version>/.rhkmvtag to exist
and to contain exactly the same information as in /proc/version for the
booted kernel. RedHat's i386.rpm packages install the appropriate file but
if you create your own kernel, there will be no such file. If you use
the kernel-<<version>.src.rpm, then this will not be a problem since it is
created by the (non-installed) program rhkmvtag.c.
If you can boot at all, you can create the appropriate file by running:
cat /proc/version >/lib/modules/<<version>/.rhkmvtag
Then reboot and everything "should" be OK. Note that Red hat uses
this tag file to create a symbolic link at boot time that links the
"preferred" modules directory to the modules dirirectory whose name
matches the currently running kernel. For example, it creates the
link: /lib/modules/2.0.35 -> /lib/modules/preferred.
/etc/rc.d/rc.sysinit removes this link and rebuilds it on every boot.
Alternately, you can modify /etc/rc.d/rc.sysinit so that it will find
the correct directory and files. WARNING: you must edit this again
later if you repeat these steps for another kernel version, or you
will once again not find your modules. I personally do not recommend
this approach. If you want to do something similar but less risky,
edit /etc/rc.d/rc.sysinit to not remove the link to /lib/modules/preferred
on boot, and make that link by hand. Again, you will need to change
that link every time you upgrade your kernel or you will not find the
right modules.
10. If you are running the OSS sound driver, be sure to rename/delete
the /lib/modules/preferred/misc/sound.o file.
11. Here is a kernel building script that was posted awhile ago by
James Keller (jmkeller@radix.net) that doesmuch of what is needed on a
kernel rebuild all in one script.
########################################################################
#!/bin/sh
cd /usr/src/linux
rm -rf /lib/modules/2.2.1
make dep
make clean
make modules
make modules_install
make bzImage
depmod -a 2.2.1
cp -a /usr/src/linux/arch/i386/boot/bzImage /boot/custom-2.2.1
cp /usr/src/linux/System.map /boot/System.map-2.2.1
cat /proc/version > /lib/modules/2.2.1/.rhkmvtag
lilo
########################################################################
WARNING! This script assumes that /etc/lilo.conf is set up to boot
custom compiled kernels from /boot/custom-<version number>; you will
need to edit these entries by hand before running this script, or
re-run lilo after you make the edit.
----------------------------------------------------------------------
Hope this helps someone!
Greg
/**************************************************************
Greg Herlein gherlein@herlein.com
Herlein Engineering www.herlein.com
Software Development - Communications - Networking - Linux/Unix
***************************************************************/
--
To unsubscribe:
mail -s unsubscribe redhat-devel-list-request@redhat.com < /dev/null