在对新购买的服务器进行Linux安装时,因为硬件更新的快,经常会出现无法找到硬盘的问题,导致无法完整的安装系统。这个时候,一是寻找Linux的新版本,二是寻找对应的驱动程序,从而完成安装。对于第一种方式,邮政系统属于企业应用范围,需要使用Linux的企业版,而企业版一般需要购买,要花一定成本和时间,因此无法(免费)及时的获取最新版本;硬件服务商一般会针对主要版本的Linux提供驱动程序,或者源码程序,供安装人员编译后使用。本文主要就驱动盘的制作和使用进行介绍。
在Linux安装时加载需要的驱动程序,是几乎所有的版本都提供的功能,针对红旗Linux,是和RedHat一致的方式,即在使用安装光盘引导后,在boot:处,输入linux dd,输入回车后,系统会提示你如何加载驱动。
在硬件厂商下载驱动文件时,会提供一份说明文件,详细解释如何在不同的Linux版本下加载驱动的方法,不过都先需要制作一个驱动软盘,可是现在软盘很难找到,而且服务器上也找不到软驱了,如何解决呢?有两种方案:光盘、U盘。驱动文件一般很小,只有1M左右,刻录到光盘上,显的很浪费,而U盘可以多次使用,方便灵活,下面简单介绍一下如何制作U盘驱动盘。
在说明文件中,介绍了如何制作软盘驱动盘,使用的命令是dd,dd命令的解释是:把指定的输入文件复制到指定的输出文件中,并且在复制的过程中进行格式转换。要制作U盘驱动盘,首先需求确定我们插入的U盘在系统中对应的文件,软盘一般对应/dev/fd0,U盘则是/dev/sda,但是无法确定一定是/dev/sda,需要使用fdisk –l命令,将系统中存在的磁盘都列出来,进行查看,找到U盘对应的文件,然后和软盘一样,使用dd命令进行复制和转换即可。
但是有时候这样制作的U盘,系统无法加载,可能的原因是分区类型不一致导致的,需要使用mkfs.ext3将U盘格式化称ext3分区类型,然后将驱动文件复制到该分区即可。详细过程如下:
1. 使用mount命令加载U盘分区,然后将使用dd命令复制到U盘上的文件复制到系统的一个临时目录中,使用umount命令卸载U盘;
2. 使用mkfs.ext3命令将U盘格式化成ext3分区;
3. 使用mount命令加载U盘分区,然后复制刚才的临时目录的文件到U盘分区,使用umount命令卸载U盘。
U盘驱动盘制作好后,在输入linux dd前,将U盘插在服务器上,然后系统会提示加载U盘(usb-storage),并且询问是否有驱动盘,确定后,如果系统能自动识别新驱动,就会自动加载,然后继续询问是否有其他驱动盘,如果无法自动识别,就会有如下提示界面:
让你使用“Manually choose”进行手工选择驱动,选择到对应的驱动后,使用U盘加载驱动就完成了。
这里使用的驱动文件都是厂商提供的整个介质文件,如果下载到的是源代码,编译后只能得到一个module.ko文件,如何把一个文件变成一个安装介质,我们需要对现有的驱动文件的安装介质进行了解,下面我们看看刚才复制到临时目录中的文件都有哪些,文件的功能是什么。
使用ls命令,可以看到共有6个文件,分别是modinfo、modules.cgz、modules.dep、modules.pcimap、pcitable、rhdd。下面分别进行说明:
1. modinfo该文件进行驱动程序的描述,格式如下:
Version 0 <module-name> <module-type> "<description>" |
除了注释行以外(以"#" 号开头),首行必须是"Version 0";
<module-name> 是硬件内核驱动的名称(不包含路径名也不包括扩展名)。
<module-type> 是硬件种类,目前仅支持网络设备和SCSI 设备,网络设备用eth 表示,SCSI/RAID类设备用scsi表示,前面必须插入tab 符或空格。
<description>是该驱动模块的简单说明,前面也必须插入tab 符或空格,同时必须用双引导将说明内容括起来。
2. modlues.dep该文件描述本模块和其他模块之间的关系,文件格式如下:
<target-module>: <depeding-module> |
<target-module> 是本驱动模块的名称,
<depending-module>是被依赖模块的名称。
3. pcitable该文件用于硬件设备的描述,使用能方便的进行设备识别,文件格式如下:
<Vender-ID> <Device-ID> "<driver-name>" "<description>" |
<Vender-ID>:硬件厂商代码
<Device-ID>:设备代码
<driver-name>:"硬件驱动名"
<description>:"硬件设备驱动描述"
这些描述信息用户可以使用命令lspci -n 列出,也可以直接查看文件/proc/bus/pci/devices。
4. rhdd该文件是设备驱动盘标示文件,文件名必须是rhdd,文件的内容是一行不以空格开始的内容,通过这个内容对该驱动盘进行标示。文件内容如下:
HP cciss drivers update disk |
5. modules.pcimap该文件是模块和PCI关系的描述文件,文件内容如下:
cciss 0x00000e11 0x0000b060 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000001 cciss 0x00000e11 0x0000b178 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000001 cciss 0x00000e11 0x00000046 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000001 |
每行的数据由PCI模块名、生产商ID、设备ID、次生产商ID、次设备ID、类型编号、类型掩码、驱动数据组成,系统的PCI和模块的关系可以在/lib/modules/KERNEL_VERSION/ modules.pcimap文件中方便的查看。
6. modules.cgz该文件是一个包含驱动模块的cpio压缩文件,可以先使用gunzip解压,然后使用cpio -idmv打开文档,形成的目录如下:
./2.6.9-42.7AXsmp ./2.6.9-42.7AXsmp/x86_64 ./2.6.9-42.7AXsmp/x86_64/megaide.ko ./2.6.9-42.7AXsmp/i686 ./2.6.9-42.7AXsmp/i686/megaide.ko ./2.6.9-42.7AXhugemem ./2.6.9-42.7AXhugemem/i686 ./2.6.9-42.7AXhugemem/i686/megaide.ko ./2.6.9-42.7AX ./2.6.9-42.7AX/x86_64 ./2.6.9-42.7AX/x86_64/megaide.ko ./2.6.9-42.7AX/i686 ./2.6.9-42.7AX/i686/megaide.ko |
每个核心对于一个目录,在每个核心下又分为32和64两种不同的平台,不同的平台存放着对应的驱动文件。所以在制作驱动盘的时候,把不同核心不同平台的.ko的文件,按照这种结构做成包就可以了。