当前位置:操作系统 > Unix/Linux >>

SCSI设备在Linux上跑起来

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驱动了。
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,