添加设备驱动到initrd.img-PXE环境建设
硬件环境:DELL OPTIPLEX 780台式机
软件环境:红帽RHEL5.1
建设一个基于红帽RHEL5.1的教学环境,环境中需要一台PXE服务器(附带文件共享服务),由于机器硬件比较新,红帽RHEL5.1系统自带驱动不能识别INTEL GM45芯片组硬件,显卡、网卡只能手动安装驱动。
安装网卡驱动并不麻烦,下载INTEL e1000e-1.1.2源码安装包
yum groupinstall “Development Tools” -y
yum install kernel-devel -y
tar vxf e1000e-1.1.2.tar.gz
cd e1000e-1.1.2/src
make install
安装结束之后会新建一个/lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000e/e1000e.ko模块文件,这个文件可以直接复制到其它相同内核、相同网卡的机器上
insmod /lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000e/e1000e.ko modprobe e1000e echo “alias eth0 e1000e” >> /etc/modprobe.conf vim /etc/sysconfig/network-scripts/ifcfg-ethX >DEVICE=ethX >ONBOOT=yes >BOOTPROTO=none >IPADDR=192.168.0.X >NETMASK=255.255.255.0
/etc/sysconfig/network-scripts/ifcfg-ethX网卡配置文件最好把机器重启让它自动生成。
如果希望刚才这一切在PXE服务器实现自动装系统、自动装好网卡驱动,就比较麻烦一些了。
要处理的部分有两个:
第一:让anaconda安装程序识别网卡。客户端需要的安装文件通过NFS等等协议传输。
第二:安装完毕的操作系统自动安装好网卡驱动。
先谈第一部分,anaconda可以支持从网络获取安装文件,但前提是安装启动之后网卡是已经驱动好了的。
我们要做的就是将网卡驱动加入到initrd.img文件中,这个文件位于PXE服务器/tftpboot/目录(这里假定你已经设定好PXE服务器),initrd.img文件被称为内核模块文件,包含了大量驱动,安装时启动的内核需要网卡驱动时会读取模块及相关信息。安装结束之后,新的系统仍然不能驱动网卡,这个放在第二步处理。
先准备好网卡的驱动模块文件e1000e.ko,我们刚才看到的是编译安装而来的,也有可能驱动在一个rpm包的,你也可以将其解开。
mkdir /tmp/2.6.18-53.el5
cd /tmp/2.6.18-53.el5
rpm2cpio /mnt/cdrom/Server/kernel-XXXXXXXXXXXXXXX.rpm | cpio -ivd
解开initrd.img
mkdir /tmp/initrd
cd /tmp/initrd
gzip -dc /tftpboot/initrd.img | cpio -ivd
cd modules
gzip -dc modules.cgz | cpio -ivd
modules子目录中的modules.cgz是经过gzip压缩过的cpio包,将其解开。
解开之后的目录中有大量扩展名为ko的驱动模块文件,把我们想要支持的硬件驱动模块加进去,这样在安装过程中,anaconda程序会正常支持我们想要的硬件。当然过程并非只是复制一个ko驱动模块文件,还需要更新一个模块信息文件。
cd /tmp/initrd/modules
cp ~/e1000e.ko 2.6.18-53.el5/i686/
modinfo -F alias 2.6.18-53.el5/i686/e1000e | sed -e 's/^/alias /' -e 's/$/ e1000e/' >> modules.alias
(注意sed语句中置换目标中的空格。第三条命令中的两个模块名称请随着实际情况更改)
就像我们以前所做的,修改了源码包中的内容就势必再次打包恢复,这里我们需要把修改过的内容打包成一个initrd.img文件,PXE服务器会把它发给客户机使用。不过这里要注意打包时的压缩格式,modules.cgz文件用的是crc格式,而initrd.img文件用的是newc格式,命令参数不要弄错。
cd /tmp/initrd/modules
find 2.6.18-53.el5 | cpio -o -H crc | gzip -9 > modules.cgz
rm -rf 2.6.18-53.el5
cd ..
find . | cpio -o -H newc | gzip -9 > /tmp/initrd.img
将打包好的initrd.img文件复制到/tftpboot/目录,测试客户机能否在安装时使用网卡。测试时最好用kickstart文件,等下也会用得着。
不出意外的话,安装过程非常顺利,网卡正常工作了,安装文件从服务器中通过NFS或者HTTP、FTP之类的协议获得
客户端系统安装结束之后,你会发现网卡仍然不能工作,这里我们还需要处理第二部分要做的,让安装完的系统自动获得新驱动。
如果用kickstart的话,这一切实在太简单了。
编辑kickstart文件,在%post段中加几条命令
rm -rf /lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000e mkdir /lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000e cd /lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000e wget
http://192.168.0.100/e1000e.ko
e1000e.ko模块文件会从一个http或ftp服务器下载到客户机中。
整个建设过程忽略了很多麻烦的地方,如果是有多种内核多个版本操作系统的存在的话,自动处理并不好做。欢迎大家指正。