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驅動了。