如何将uboot 添加网卡驱动动程序添加到initrd.img中

分享给朋友:把视频贴到Blog或BBS&&通用代码: <input id="link4" type="text" class="form_input form_input_s" value="" />复 制flash地址: 复 制html代码: <input type="text" class="form_input form_input_s" id="link3" value="" />复 制分享视频到站外获取收益&&手机扫码分享视频二维码2小时内有效往initrd.img里添加网卡驱动【无声】下载至电脑扫码用手机看用或微信扫码在手机上继续观看二维码2小时内有效往initrd.img里添加网卡驱动【无声】扫码用手机继续看用或微信扫码在手机上继续观看二维码2小时内有效,扫码后可分享给好友没有优酷APP?立即下载请根据您的设备选择下载版本
药品服务许可证(京)-经营-
节目制作经营许可证京字670号
请使用者仔细阅读优酷、、
Copyright(C)2016 优酷
不良信息举报电话:君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
initrd&#46;img增加自定义驱动的方法
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口1. 什么是initrd.img,它有什么用?initrd.img是Linux启动过程中很重要的一个文件,如果你编译内核时将一部分功能编译为可加载模块。如果系统的一些设备的驱动编译为可加载模,那么启动时如果没有指定INITRD=/path_to_initrd.img,那么系统启动或者会失败,或者启动后会有设备无法使用(像网卡或者其它设备)。如果没指定initrd.img或者指定的initrd.img中并没有包含正确的驱动模块,则系统启动时会挂起,并报告"kernel panic: VFS: Unable to mount root fs on 08:06"的错误。
2. 拆解initrd.img很庆幸initrd.img可以进行拆解,或许这正是设计者高明所在。initrd.img不像通常的以.img为扩展名的ramdisk cramfs文件。它是经过用gzip -9进行压缩过的ramdisk文件。所以,如果直接用#mount initrd.img /temppath -o loop不能mount上,会报告你指定一个文件类型。 所以我拆解它的过程要先将其进行解压缩,然后再mount。
cd /lib/modules/kernel_versionmkinitrd /tmp/initrd-kernel_version.img kernel_versioncd /tmpmv initrd-kernel_version.img initrd-kernel_version.img.gz gunzip initrd-kernel_version.img.gzmkdir /mnt/tmpmount -o loop initrd-kernel_version.img /mnt/tmp &--mount成功后,/mnt/tmp目录中将能看到initrd-kernel_version.img中的所有文件及目录cp -a /mnt/tmp/* /tmp/initrd.new &--拷贝一份方便编辑umount /mnt/tmp cd /tmp/initrd.new 切换到/tmp/initrd.new目录后,你可以按需要进行编辑。比如更新一些设备驱动模块,或者对其中的一些启动过程中会执行的shell script进行修改。所有想要的修改完成后,进行打包生成新的initrd.img文件。方法如下:mkcramfs /tmp/initrd.new /tmp/newinitrdgzip -9 /tmp/newinitrd /tmp/newinitrd.gzmv /tmp/newinitrd.gz /tmp/initrd-kernel_version.img
3. 定制自已的initrd.img我修改initrd.img的起因还是归于用的那台Dell precision 470 及要用OSCAR4.1组建一个linux cluster(正在进行中,尚未完成)。OSCAR4.1包中所用的SystemImager3.2.2-1带的用于网络引导客户机的BOEL-kernel-2.4.25和initrd.img不支持Dell precision 470的Adaptec39320B HostRaid Control Card。此外,在上面装RedHat 9.0后进行内核重编译时,可能因为mkinitrd或者9.0内核版本的原因,生成的img文件无法使用。在此以我实际遇到的问题,主要讲讲更新initrd.img中的硬件驱动模块的方法,抛砖引玉。
模块跟kernel的版本相关,直接的用其它支持你硬件但kernel版本不同的模块进行替换通常不会成功,所以最好到kernel.org上下载所需要的kernel版本的源程序包。我解决我上面的问题的文法就是下载了Linux-2.4.25.tar.gz源程序,并解压到/usr/src目录,之后到网站下载到支持39320B HostRaid的适合linux-2.4版的驱动源程序,并解压替换2.4.25内核源程序中的驱动程序源代码。之后对内核进行重新编译(在本文不详述具体方法,网上有很多相关资料,或许有时间我会写一篇),用make menuconfig时最好直接选上随着原来kernel & initrd.img在一起的config文件。如果不出错,执行make modules_install后就生成了需要的模块(通常在目录/lib/modules/kernel-version)。之后我用新的/lib/modules/kernel-version/lib/下的modules目录及其文件替换掉旧的initrd.img中的modules目录(当然先得拆解之,方法见第2部分)。
备注:通过cpio -i & initrd-kernel_version.img同样可以实现。
参考文章:
阅读(...) 评论()博客访问: 20357
博文数量: 6
博客积分: 255
博客等级: 二等列兵
技术积分: 70
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
硬件环境:DELL OPTIPLEX 780台式机
软件环境:红帽RHEL5.1
建设一个基于红帽RHEL5.1的教学环境,环境中需要一台PXE服务器(附带文件共享服务),由于机器硬件比较新,红帽RHEL5.1系统自带驱动不能识别INTEL GM45芯片组硬件,显卡、网卡只能手动安装驱动。
安装网卡驱动并不麻烦,下载INTEL e.2源码安装包
yum groupinstall “Development Tools” -y
yum install kernel-devel -y
tar vxf e.2.tar.gz
cd e.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.komodprobe e1000e echo “alias eth0 e1000e” >> /etc/modprobe.confvim /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
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/e1000emkdir /lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000ecd /lib/modules/2.6.18-53.el5/kernel/drivers/net/e1000ewget
e1000e.ko模块文件会从一个http或ftp服务器下载到客户机中。
整个建设过程忽略了很多麻烦的地方,如果是有多种内核多个版本操作系统的存在的话,自动处理并不好做。欢迎大家指正。
参考文献:
感谢同事jarson Liu的帮助。
阅读(1215) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 win8pe添加网卡驱动 的文章

 

随机推荐