安装qlogic的hpt37x的sata驱动

2005-07-11

install rocketraid 1520 on redhat enterprise linux as 3 update 5

如果使用默认的驱动,SATA硬盘会被认成hde,hdg等。更新驱动之后,会认成sda,sdb等等 :)

1. 获取驱动程序的源码
从网站下载驱动的源码。
http://www.highpoint-tech.com/BIOS%20+%…source-v2.0.tgz
最新版本的驱动增加了对2.6.x内核和x86_64的支持。
网站上针对redhat linux的驱动包只针对到redhat 9,对于redhat as 3来说,内河版本不对,也没有研究是不是有用。
反正从源码编译得了。

2. 安装内核源码
为了编译驱动,需要安装内核源码。rpm安装得了。

3. 编译驱动
# make KERNELDIR=/usr/src/linux-2.4.21-32.EL
gcc -DDRIVER_VERSION=”2.0″ -DLIST_H_INCLUDED -DMODVERSIONS -DMODULE -DLINUX -D_LINUX_ -D__KERNEL__=1 -DCONFIG_PCI -DNO_CROSS_CTRL=1 -DSUPPORT_ARRAY -DSUPPORT_OLD_ARRAY -Wall -O2 -Wstrict-prototypes -fomit-frame-pointer -I. -I/usr/src/linux-2.4.21-32.EL/include -I/usr/src/linux-2.4.21-32.EL/drivers/scsi -c hpt.c -o hpt.o
ld -r hpt.o raid.o -o hpt37x2.o

4. 测试驱动
# insmod hpt37x2.o
Warning: loading hpt37x2.o will taint the kernel: non-GPL license – Proprietary
See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Module hpt37x2 loaded, with warnings
这里这个警告不用理会它。

# lsmod
hpt37x2 80984 0 (unused)
……
scsi_mod 106664 4 [hpt37x2 sg aic7xxx sd_mod]

# fdisk -l

Disk /dev/sda: 9127 MB, 9127034880 bytes
255 heads, 63 sectors/track, 1109 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1020 8193118+ fd Linux raid autodetect
/dev/sda2 1021 1109 714892+ fd Linux raid autodetect

Disk /dev/sdb: 9127 MB, 9127034880 bytes
255 heads, 63 sectors/track, 1109 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 * 1 1020 8193118+ fd Linux raid autodetect
/dev/sdb2 1021 1109 714892+ fd Linux raid autodetect

Disk /dev/sdc: 81.9 GB, 81964301824 bytes
255 heads, 63 sectors/track, 9964 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 6226 50010313+ fd Linux raid autodetect
/dev/sdc2 6227 9964 30025485 fd Linux raid autodetect

Disk /dev/sdd: 81.9 GB, 81964301824 bytes
255 heads, 63 sectors/track, 9964 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdd1 1 6226 50010313+ fd Linux raid autodetect
/dev/sdd2 6227 9964 30025485 fd Linux raid autodetect

注:sda sdb是我的两个scsi硬盘。sdc sdd就是两个sata的硬盘了。

5. 修改grub,让系统引导的时候不加载默认的模块。
# vi /boot/grub/grub.conf
#boot=/dev/sda
default=0
timeout=10
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Enterprise Linux AS (2.4.21-32.EL)
root (hd0,0)
# kernel /boot/vmlinuz-2.4.21-32.EL ro root=/dev/md0
kernel /boot/vmlinuz-2.4.21-32.EL hde=noprobe hdf=noprobe hdg=noprobe hdh=noprobe ro root=/dev/md0
initrd /boot/initrd-2.4.21-32.EL.img

6. 修改系统让它每次都能够自动加载新的驱动模块
首先看看grub.conf,看看系统是从那个镜像文件引导的。就是initrd /boot/initrd-2.4.21-32.EL.img后面的initrd-2.4.21-32.EL.img了。
然后我们来修改这个东西。
# cd
复制这个镜像文件
# cp /boot/initrd-2.4.21-32.EL.img .
解开这个玩意
# gzip -dc initrd-2.4.21-32.EL.img > initrd.old
建一个临时的目录
# mkdir initrd
mount上这个东西
# mount -o loop initrd.old initrd
将编译好的驱动模块复制进来
# cp /path/to/hpt37x2.o ./initrd/lib
编辑 ./initrd/linuxrc 这个文件,在适当的地方插入加载模块的语句

echo “Load aic7xxx module”
insmod /lib/aid7xxx.o
insmod /lib/hpt37x2.o initrd-2.4.21-32.EL.img.new
OK了,然后将这个.new文件拷贝到/boot目录,将原来的改名之后,将这个改名成initrd-2.4.21-32.EL.img。
重新启动看看

7. 理论上应该OK了。如果没有其他scsi设备得话。那么将看到sata硬盘被分配了 /dev/sda …,如果还有其他的scsi设备,那么就会接着后面分配了。
下面就是分区,mount的事情了。不多少了。

附:
经过测试,我发现一下一些问题。

如果不加载最新的那个hpt37x2的驱动,那么这两个硬盘被当作ide设备,是可以用SMART查看他们的信息的,比如硬盘温度等等。但是这个时候,做的softraid的同步速度只有2M左右。

如果加载了hpt37x2.o,那么被当成scsi设备,softraid的同步速最高能达到15M,可是就没法查看SMART信息了。

分类:技术 | 标签: |

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注