Linux在服务器市场上表现很好,多数厂商推出的服务器都支持Linux操作系统。但是由于Linux的版本众多而且服务器的硬件种类繁杂,所以在服务器上使用Linux的时候,会遇到某些SCSI设备(SCSI适配卡、Raid卡等)不被某些版本Linux所支持的情况。
如果用户使用的SCSI设备驱动已经包含在Linux源代码中(实际上Linux源代码包含了大多数主流设备驱动程序),就可以直接使用Linux源代码来驱动相应的SCSI设备。如果SCSI设备驱动不包含在Linux源代码中,则需要通过厂商提供的驱动程序来进行安装。
SCSI设备驱动已经包含在Linux源代码中,又可分为两种情况,即直接编译进内核和编译为动态模块。下面分不同情况讨论在Linux上安装SCSI驱动的具体方法。
编译进内核
在此类情况下,进入Linux源代码树,重新配置Kernel。在“SCSI support”中,对于相关项选择以“*”(build-in)方式编译,如下所示:
<*> SCSI support--- SCSI support type (disk, tape, CD-ROM)<*>
SCSI disk support(40) Maximum number of SCSI disks that can be loaded as modules<*>
SCSI tape support<*>
SCSI OnStream SC-x0 tape support<*>
SCSI CD-ROM support[*]
Enable vendor-specific extensions (for SCSI CDROM)(4) Maximum number of CDROM devices that can be loaded as modules<*>
SCSI generic support
此外,还要找到对应的SCSI设备型号的驱动,同样选择以“*”(build-in)方式编译。比如用户使用的是AIC79xx的适配器,就可以选上下面的选项:
<*> Adaptec AIC79xx support
选择完后,编译新的内核,然后使用新的内核来启动,最后查看SCSI设备有没有正常工作起来。
动态模块
在此类情况下,进入Linux源代码树,重新配置Kernel。在“SCSI support”中,对于相关项选择以“M”(modules)方式编译。选项同“编译进内核”中的情况,但是“Enable vendor-specific extensions (for SCSI CDROM)”一定要直接编译进内核。
此外,用户一定还要选上“Block devices”选项中的“RAM disk support”的子选项,否则新的Kernel将无法启动。内容如下:
<*> RAM disk support(8192)
Default RAM disk size[*]
Initial RAM disk (initrd) support
按这种方法编译完Kernel和Modules后,还要生成一个新的Ram Disk的镜像文件才能正常启动。对于Red Hat来说,这个文件通常命名为initrd.X.X.XX.img。X.X.XX对应于Kernel的版本号。具体执行过程如下:
# cp /boot/initrd-2.4.20-8.img
.# mkdir /mnt/ram# gunzip -c initrd-2.4.20-8.img > ./initrd# mount -o loop ./initrd /mnt/ram/# ls /mnt/ram/bin
dev
etc
lib
linuxrc
loopfs
proc
sbin
sysroot
可以看到ram的目录很像一个小型的Linux文件系统,用户可以自己将编译好的模块文件放到这里。这样在Kernel启动时,可以把用户定制的驱动模块加载到Ram Disk中。修改完毕后,用以下方法进行保存:
# umount /mnt/initrd# gzip /root/initrd# cp /tmp/initrd.gz /boot/initrd-2.4.20-8.img
这个“迷你”系统中包括了对应的SCSI驱动和加载驱动的程序。通过这个“迷你”系统,Linux就能成功地以模块方式动态加载SCSI驱动了。