搞定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来完成网卡的编译

CentOS下配置PXE+Kickstart无人值守安装(Howto install CentOS through PXE+KickStart)

环境:CentOS 5.1 最小安装。

理论

来源:http://coolerfeng.blog.51cto.com/133059/48801

什么是PXE
PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。

PXE协议的成功运行需要解决以下两个问题:
1. 既然是通过网络传输,那么计算机在启动时,它的IP地址由谁来配置;
2. 通过什么协议下载Linux内核和根文件系统

对于第一个问题,可以通过DHCP Server解决,由DHCP server来给PXE client分配一个IP地址,DHCP Server是用来给DHCP Client动态分配IP地址的协议,不过由于这里是给PXE Client分配IP地址,所以在配置DHCP Server时,需要增加相应的PXE特有配置。
至于第二个问题,在PXE client所在的ROM中,已经存在了TFTP Client。PXE Client使用TFTP Client,通过TFTP协议到TFTP Server上下载所需的文件。

这样,PXE协议运行的条件就具备了,下面我们就来看看PXE协议的工作过程。
Read More »