linux driver文件夹,Linux系统安装盘设备驱动制作及更新

1 前言

在安装Linux操作系统过程中,有时会遇到安装盘中自带设备驱动版本较老,不支持最新的RAID控制器(如MegaRAID SAS 9265-8i),导致系统安装时,找不到硬盘,系统无法继续安装。此时我们需要更新安装盘中带的驱动,或者使用使用驱动安装盘(一般为img文件)来更新驱动。

本文主要介绍如何制作Redhat Linux驱动安装盘和如何更新安装盘中的驱动,并介绍常见故障的处理办法。

2 驱动安装盘制作步骤

2.1 创建img文件

第一步首先创建img文件,这样我们就可以向里面加入我们的驱动文件。

1、使用dd,创建一个与驱动盘设备大小一致的文件

[root@localhost ~]# dd if=/dev/zero bs=1k count=$NEW_INITRD_SIZE of=/root/initrd_new.img

$NEW_INITRD_SIZE对于软驱来说,为1440。对于其他USB设备来说,要$NEW_INITRD_SIZE一定要与该设备容量大小一致,不然系统安装时,无法识别和读取USB里面的文件。

2、使用mkefs,将创建img文件格式化

#mke2fs /root/initrd_new.img

下面是操作实例:

[root@localhost ~]# mke2fs /root/initrd_new.img

mke2fs 1.39 (29-May-2006)

/root/initrd_new.img is not a block special device.

Proceed anyway? (y,n) y

2.2 驱动盘主要文件

驱动安装盘里的主要文件如下(最简单的方式是下载一个LSI提供的驱动img文件,参考这个文件里面内容即可):

modinfo:驱动版本描述

modules.cgz:安装Redhat Linux时所需要的驱动。我们自己的驱动就放在这个压缩包中。

modules.dep:我们的驱动依赖关系。

pcitable:我们的驱动所能处理的PCI设备。大多数的Redhat Linux将会读取这个文件,若该类型的PCI设备存在,就会自动加载我们的驱动。

disk-info:该安装盘的描述信息。

rhdd:安装盘的描述信息。

modules.alias:

上面文件除modules.cgz为压缩文件外,其他都为文本文件。最重要的文件有三个modules.cgz、modules.dep和pcitable,下面分别介绍三个文件。

2.2.1 modules.cgz

制作modules.cgz文件步骤如下:

1、创建临时目录,如MegaRAID_SAS

[root@localhost ~]# mkdir MegaRAID_SAS

2、在临时目录中创建驱动对应的内核版本号目录

[root@localhost ~]# mkdir 2.6.18-2.6.18-308.el5.PAE

[root@localhost ~]# mkdir 2.6.18-308.el5

[root@localhost ~]# mkdir 2.6.18-308.el5xen

3、在对应的内核版本号目录下,创建目录。

[root@localhost 2.6.18-308.el5]# mkdir i686 x86_64

[root@localhost 2.6.18-308.el5]# ls

i686 x86_64

4、将驱动文件拷贝到相应的CPU架构目录下

如32位系统的驱动模块拷贝到i686目录中。

*注:驱动文件的版本要与内核版本一致。可使用modinfo来检验。

5、将find ./* |cpio -H crc -ov |gzip -c9 >/root/modules.cgz上面的目录和文件打包成modules.cgz

2.2.2 modules.dep和pcitable

这两个文件内容和格式都非常简单。

1.modules.dep

是文本文件,列出模块依赖关系即可。

2、pcitable

[root@localhost temp]# cat pcitable

0x1000 0x0411 “megaraid_sas” “LSI|MegaRAID”

0x1028 0x0015 “megaraid_sas” “LSI|MegaRAID”

0x1000 0x0413 “megaraid_sas” “LSI|MegaRAID”

0x1000 0x0060 “megaraid_sas” “LSI|MegaRAID”

2.2.3 modinfo

按照下面格式写出模块信息即可。

[root@localhost temp]# cat modinfo

Version 0

megaraid_sas

scsi

“LSI Logic megaraid_sas Driver ver v00.00.06.12”

[root@localhost temp]#

2.3 将文件拷入img文件中

在2.2节中,我们介绍了驱动盘里的主要文件和制作步骤。现在需要将这些文件拷贝到img文件中。

将2.1节制作的img文件mount到一个目录中,然后就可以将文件拷贝进去了。

#mount new_initr.img -o loop temp/

img文件中的最终内容如下:

root@localhost temp]# ls

disk-info lost+found modinfo modules.cgz modules.dep pcitable rhdd

2.4将img文件dd到软盘中

1、插入USB软驱到单板上,使用dmesg命令看软盘的设备名(若系统只有一块硬盘,则软盘通常为/dev/sdb;系统有两块硬盘的话,软件设备名为/dev/sdc,以此类推)

2、将上面的镜像文件new_initr.img同步到软件上

dd if=/root/new_initr.img .dd of=

这样我们的驱动安装盘就大功告成了。

*注:软盘的容量只有1.38M,有时软盘显得太小。也可以使用U盘来制作驱动安装盘,原理和制作步骤和上面一样。

3 系统安装盘驱动更新

更新系统安装盘中的驱动,需要更改光盘ISO文件。更新驱动,需要修改两个地方:

(1)系统安装所用到的initrd.img文件

该文件一般在ISO文件isolinux/目录下,用作系统安装最小系统的启动。也是在这里识别到硬盘的。

(2)内核RPM包

RHEL ISO中,内核RPM包一般在Packages/目录下。如kernel-2.6.32-131.0.15.el6.i686.rpm。

3.1 安装initrd.img文件更新

如何修改内核initrd文件,请参考http://ilinuxkernel.com/?p=40 。在initrd文件中,我们需要将编译好最新设备驱动更新到文件modules.cgz中。制作和修改modules.cgz方法前面已有介绍。

以MegaRAID SAS控制器驱动为例,下载到的文件为megaraid_sas-v00.00.06.12-1-rhel50-u8-all.img。将img文件中的内容拷贝出来,做以下更新。

这里强调修改modules.cgz中的内容:

(1)找到设备驱动所在的位置,用最新编译好的驱动替换

注意:编译好的模块,内核版本号一定要和原有驱动内核版本号相同。如megaraid_sas。

(2)img文件中的pcitable、modules.alias数据全部添加到原有modules.cgz目录下对应文件。

3.2 内核RPM包更新

需要将kernel安装包中的驱动更新,或在安装完成后,重启机器前,更新驱动,并重新生成内核intird文件。

4 常见故障排除

前面制作好了驱动盘,安装时可能还会出现找不到硬盘设备。

还是找不到设备或硬盘的原因主要有两种:

(1)驱动盘的格式和文件不对,导致系统安装程序无法找到想要的驱动。

(2)modules.alias文件的数据未更新,导致找不到设备;

(3)驱动里面的pci table不全,导致无法找不到设备;

(4)自己(改动)的驱动使用的某些符号在内核中找不到。

判断是上面哪一种原因的方法是:安装界面在提示插入驱动盘后,我们就可以使用Ctrl + Alt + F2、Ctrl + Alt + F3、Ctrl + Alt + F4切换不同终端。这样我们就可以获取相关信息。其中一个终端会开启bash,另外一个终端显示内核日志信息(这是最重要的信息来源,比如可以查看我们驱动是否使用了内核不存在的符号);还有一个终端是显示系统安装脚本执行情况(从这里我们可以看到是否找到我们的驱动盘、我们的驱动是否成功加载)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值