搞定PXE中的网卡驱动

硬件:
主板ASUS P5QL Pro

软件:
CentOS 5.4 64bit

公司最近进的一台机器用的是用的华硕p5ql pro的板子,要上centos系统,最开始没有注意到没有centos54居然不支持网卡驱动,等到PXE加载完,installation报找不到ks文件(我指定了ks的),我这才意识到,原来centos54并不支持这个网卡。。。

实在是不想刻碟,太麻烦,想起来原来赵小明老师跟我们讲过,这种情况,只要把网卡的驱动加载到启动用的initrd.img中就可以了,于是就开始看看怎么把驱动加载到启动文件当中。

首先,当然是要找一台机器把驱动编译好。
驱动可以在asus的官方网站可以下载到。
编译的机器,最好用没有升过级的内核,不然,不保证可以直接用。
编译好之后,可以得到一个名称为 atl1e.ko 的文件
这个,就是我们要用到的文件

接下来,才是重头戏,我们要把这个文件加入到initrd.img中。
开始之前,建议参考一下这篇文s档: http://www.ibm.com/developerworks/cn/linux/l-linux-netinst/index.html
如果你发现里面的那个脚本不能用,恭喜你,你碰到了跟我一样的问题了,我这篇文章的意义就在于此!

使用file命令,我们可以知道initrd.img这个文件是一个gzip文件,那么,我们就要用gzip进行解压

mv initrd.img initrd.img.gz
gunzip initrd.img.gz

再使用file命令,我们又可以得知,解压之后的文件,是一个cpio格式的文件,那么,我就可以用cpio来进行解压

cpio -ivmd < initrd.img

解压之后,我们会得到许多目录与文件,因为我们要修改的只是驱动部分,所以要用到的就只有modules目录。

进入这个目录,我们只能看到五个文件

module-info  modules.alias  modules.cgz  modules.dep  pci.ids

其中module-info是记录硬件设备信息的,在这个文件里面,我们要添加如下三行

atl1e
eth
"AR8121/AR8113 PCI-E Ethernet Adapter"

其实的atl1e是模块名称,eth是设备类型(eth代表以太网卡),第三行是模块的描述

然后就是第二个文件,modules.alias,在这个文件里面,我们只要添加一行

alias pci:v00001969d00001026sv*sd*bc*sc*i* atl1e

虽然只有一行,但是解释起来还是挺麻烦的。这里涉及到一些硬件相关的信息。
其1969是硬件厂商的信息,可以从http://www.pcidatabase.com/查到是Atheros Communications的产品,而1026是产品的编号,继续查询可以得知是AR8121/AR8113的芯片。
这些信息的得到,是比较麻烦的,当然,我用的是一张很老的debian的救援盘,然后用lspci -n得到这些数据的

其他的,sv,sd,sc,i等等我也搞不太清楚是什么意思,我反正照着r8169的抄。你可以看看这篇文章:http://www.examda.com/linux/fudao/20091227/094826740-3.html

接下来,我们跳过modules.cgz,讲讲modules.dep
这是一个描述模块之间的依赖关系的文件,因为在这块网卡的驱动中没有找到相关的依赖说明,所以我就没有修改此文件。

pci.ids这个文件,是modules目录里面,我们要修改的第二重要的文件
在这个文件里面,我们要添加网卡的对应关系,要添加如下两行:

1969  Atheros(R)
        1026  AR8121/AR8113 PCI-E Ethernet Adapter

记得这两行的写法有一个从属关系,1026是从属于1969的

最后,让我们来说说modules.cgz,通过file命令,我们又可以得知到,这是一个gzip文件,同样,我们要进行解压:

mv modules.cgz modules.cgz.gz
gunzipmodules.cgz.gz

新到的新的modules.cgz,又是一个cpio文件,我们又要用cpio来进行解压

cpio -ivmd < modules

之后,就会得到2.6.18-164.el5这么一个目录,把我们开始得到的atl1e.ko文件拷贝到其中的2.6.18-164.el5/x86_64/目录中(其中还有其他许多ko文件)。

所有的工作都做得差不多了,接下来就是要进行封装了。
首先是封装modules.cgz

find 2.6.18-164.el5/|cpio  -o -H crc > newmodules
gzip newmodules
rm -rf 2.6.18-164.el5 modules
mv newmodules.gz modules.cgz

这里要注意的是把旧的文件modules.cgz文件与解压生成的目录删除以减少体积

这里封装好之后,我们要封装整个intrid.img文件了。

rm -f initrd.img vmlinuz
find . | cpio -c -o > ../new
gzip ../new
mv ../new.gz initrd.img

同上面的一样,要把一些与intrid.img不相干的文件文件删除以减少体积。

这个时候所有的东西时都管弄完了,你再用这个新生成的initrd.img进行引导,就可以正确的识别你的网卡并从网络读取文件了。

最后要注意的是:
装好的系统并不能使用这块网卡,装好系统之后,还是要进行网卡的编译。
当然,你也可以学我的,在kickstart文件当中,用%post来完成网卡的编译

Realtek HD Audio device

今天同事的机器因为一个误操作删除了一个不应该删除的东西,把声卡给搞没了,后来要装的时候,却再也装不上了。
在硬件设备管理器中,总是会一个未知的PCI设备。

查了相关的资料,总算微软的tecknet上找到了答案:
http://social.technet.microsoft.com/forums/en-US/itproxpsp/thread/dd309773-6bb6-4311-8d9f-28d848bca4f8/
原来,那个同事删除的是是KB888111升级包的相关部分,只需要将这部分重装一次就可以了。但由于我们的机器都已经安装了SP3,这个包已经不能直接重装,只能通过这样子来了:

  1. 将用KB888111XPSP2.exe用winrar解压到指定目录,比如C:\KB888111XPSP2
  2. 打开设备管理器,并找到那个未知的PCI设备(有黄色叹号的)
  3. 右击未知的PCI设备,然后选择更新驱动的那个选项
  4. 将搜索驱动的路径设置为C:\KB888111XPSP2\commonfiles\
  5. 如果还是继续得到未知设置,可尝试重复第2-4个步骤,也可重新安装原来的驱动

果然,通过这几个步骤,他的声卡可以继续使用了。

点击下载:kb888111xpsp2