在我们的技术支持工作中,经常遇到有些客户需要在我们的新款服务器上安装老版本Linux操作系统,而老版本Linux没有内置新硬件的驱动文件,不能直接安装。有些客户会通过虚拟机来安装老版本Linux。 然而有些客户因种种原因,Linux不能运行在虚拟机上,需要直接运行在物理服务器硬件上,这就带来了很多麻烦。本文我们就探讨,在这种情况下如何制作驱动,来安装系统。 安装Linux操作系统时,最大的困难往往在RAID卡驱动,这个RAID卡驱动是在安装Linux时需要加载的,没有它就不能识别出硬盘,Linux也将无法安装下去。在操作系统自动识别不到RAID卡时,需要事先找到对应的驱动,才能成功安装Linux。而硬件厂商往往不再提供老版本Linux的驱动,这时需要利用RAID卡厂商提供的source code(源代码)自己制作RAID卡驱动。  在戴尔官网PowerEdge R730服务器的驱动下载页面,PERC 9系列RAID卡除了Red Hat Enterprise Linux 7之外,只提供了6.5、6.6和6.7版本的下载。而这并不代表较早的版本都无法支持。 制作RAID卡驱动有很多种方法。一种是把驱动加入到内核里编译,这个方法也有局限性——制作驱动过程中一旦报错,不容易找到出错原因,大大增加了制作难度。而且如果需要升级内核,需要重新编译RAID卡驱动。  这里介绍另一种方法,可以使用DKMS工具方便的制作出RAID卡驱动。 DKMS (Dynamic Kernel Module Support) 是Dell的一个open source开源项目,主页在http://linux.dell.com/files/dkms/ DKMS目的是让依赖内核的模块源码独立出来,以便升级内核的时候可以容易地重新建立。Linux模块和内核是有依赖关系的,如果遇到内核版本的升级和变动,以前编译的驱动模块是无法继续使用的,需要手动再编译一遍。这就是Dell创建的DKMS项目的意义所在。DKMS可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。另DKMS也提供了强大的功能,可以利用驱动的源代码来编译出相应版本的驱动。正因为DKMS工具强大的功能,很多厂商都会发布DKMS版本驱动。 DKMS的使用流程可以看下图:  这里我们就以老版本RedHat Linux为例,用DKMS来制作PERC H730 RAID卡驱动。 首先在一台虚拟机上安装好需要安装的Linux系统,以及相关模块。 然后到LSI(现为Avago)网站下载到H730对应的MegaRAID SAS 9361-8i的Linux驱动。解压后,在dkms-1目录下有一个megaraid_sas-06.806.08.00-1.dkms.tar.gz文件。把该文件解压后,里面有dkms-2.0.21.1-1.noarch.rpmmegaraid_sas-06.806.08.00-1dkms.noarch.rpm这2个文件。 1.安装dkms: #rpm –ivh dkms-2.0.21.1-1.noarch.rpm 2.安装RAID卡驱动: # rpm -ivh megaraid_sas-06.806.08.00-1dkms.noarch.rpm 3.  DKMS会把驱动模块加入到目录树下,把驱动源代码copy到相应位置,并生成相应的驱动模块文件。也可以单独使用DKMS生成驱动模块文件。 # dkms build -m megaraid_sas -v 06.806.08.00 -k 2.6.32-220.el6.x86_64 -a x86_64 4. 最后可以使用DKMS生成Redhat下的驱动映像文件: # dkms mkdriverdisk -d redhat -m megaraid_sas -v 06.806.08.00 -k 2.6.32-220.el6.x86_64 -a x86_64 这样就使用DKMS工具很容易的制作出RAID卡驱动映像文件。 5. 另还可以使用DKMS创建出rpm安装包,对linux不熟悉的人,可以很方便的使用做好的网卡或其他的驱动或软件rpm包安装。 # dkms mkrpm -m megaraid_sas -v 06.806.08.00