Wednesday, August 15, 2007

Firewire Modules not loading or not compatible with the kernel version

The Firewire modules are currently not available for all the kernel versions of Red Hat 4.0, and I really doubt if Oracle is going to make available the Firewire modules for them. For example, my installed kernel version is 2.6.9-42.0.0.0.1.EL, but there are no firewire modules available for this version of kernel and the only closest module available is oracle-firewire-modules-2.6.9-42.0.3.EL-1286-1.i686.rpm. v Obviously, the versions are not compatible and the modules wouldn't load, even if you install and when attempted you are likely to see:

# rpm -ivhi --force oracle-firewire-modules-2.6.9
-42.0.3.EL-1286-1.i686.rpm
Preparing... ########################################### [100%] 1:oracle-firewire-modules########################################### [100%]

# modprobe ohci1394 ; modprobe sbp2
FATAL: Module ohci1394 not found. FATAL: Module sbp2 not found. #

There are possibly two options to fix this.

Option 1: The first one is to load the kernel installed by the firewire module, if you are not very particular about the kernel version. Once the firewire modules are installed, the /etc/grub.conf is populated with the Firewire kernel and which looks some thing like this:

#cat /etc/grub.conf

# grub.conf generated by anaconda

#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,1)
# kernel /boot/vmlinuz-version ro root=/dev/sda2

# initrd /boot/initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title Enterprise (2.6.9-42.0.0.0.1.ELhugemem)
root (hd0,1)
kernel /boot/vmlinuz-2.6.9-42.0.0.0.1.ELhugemem ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.9-42.0.0.0.1.ELhugemem.img
title Enterprise-smp (2.6.9-42.0.0.0.1.ELsmp)
root (hd0,1)
kernel /boot/vmlinuz-2.6.9-42.0.0.0.1.ELsmp ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.9-42.0.0.0.1.ELsmp.img
title Enterprise-up (2.6.9-42.0.0.0.1.EL) root (hd0,1) kernel /boot/vmlinuz-2.6.9-42.0.0.0.1.EL ro root=LABEL=/ rhgb quiet initrd /boot/initrd- 2.6.9-42.0.0.0.1.EL.img
title Other
rootnoverify (hd0,0)
chainloader +1
=========================================================

The entries in orange color are the ones which have been populated by the Firewire modules/kernel. To load your OS using this kernel, you simply have to update the grub.conf to use that kernel to load by modifying the default=0 to default=2. That should all, when you boot next time using the Firewire modules/kernel, you should be able to load the sbp2, ohci1394 and ieee1394 modules without any problems.

Option 2:

  1. When you install oracle-firewire-modules-2.6.9-42.0.3.EL-1286-1.i686.rpm rpm it will install the modules under /lib/modules/2.6.9-42.0.3.EL/kernel/drivers/ieee1394, but your existing kernel would be as indicated by `uname -r`. In my case it was 2.6.9-42.0.0.0.1.EL.
  2. Make a directory ieee1394 under /lib/modules/2.6.9-42.0.0.0.1.EL/kernel/drivers
  3. copy the modules which have been installed under /lib/modules/2.6.9-42.0.3.EL/kernel/drivers/ieee1394 to /lib/modules/2.6.9- 42.0.0.0.1.EL/kernel/drivers/ieee1394.
  4. Then run the following commands:
#depmod -a ieee1394.ko;modprobe ieee1394
#depmod -a ohci1394.ko;modprobe ohci1394
#depmod -a pcilynx.ko;modprobe pcilynx
#depmod -a raw1394.ko;modprobe raw1394
==============================================

Update the etc/modprobe.conf. For example, the entry in the /etc/modprobe.conf file would be: options sbp2 exclusive_login=0

Now you should be able to load the Firewire modules without changing your kernel.

==================================================================
Checking the integrity of the downloaded firewire module:

$md5sum oracle-firewire-modules-2.6.9-42.0.3.EL-1286-1.i686.rpm
7fe3c83291ffab284f6f941b717dacb1 oracle-firewire-modules-2.6.9-42.0.3.EL-1286-1.i686.rpm

Verify the above code (7fe3c83291ffab284f6f941b717dacb1) with that
indicated in the source website.