博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openwrt配置内核驱动_如何将驱动封装到Linux ISO?
阅读量:5939 次
发布时间:2019-06-19

本文共 6178 字,大约阅读时间需要 20 分钟。

前面我们讲了很多在ThinkSystem系列服务器安装Centos6.5等非常规(老旧)操作系统的方式,重点就在于如何安装RAID卡驱动和网卡驱动,经常会有同仁或者用户觉得比较繁琐,那如何才能一劳永逸?

答案:定制Linux安装镜像,将驱动封装到ISO中

95ff94843a8263c3d1c726a1657c1868.png

一张图了解Linux启动过程

78af8709bbdb1d666c2fb24f79b2383d.png

其中Kernel步骤,也就是我们之前碰到驱动问题的关键点,我们可以通过系统内的kernel引导文件内容略知一二,以下截取部分作为说明:

Label linux    menu label ^Install or upgrage    menu default    kernel vmlinuz    append initrd=initrd.img

从上面的文字可以看出,先会加载kernel文件,然后再加载Ramdisk(initrd.img),由于kernel文件非常小,只还有系统启动基本的模块,并不包含大部分驱动文件,所以很多设备的驱动模块都会在initrd.img(Centos6.5等比较旧的系统中initrd.img可能不包含新的RAID卡和网卡驱动)中进行加载;

PS:initrd.img只会加载进内存(重启驱动后就丢失),所以本文后还有安装驱动到盘体的操作;

基本概念介绍就到此,那我们开始正文

-----感谢晋台分享

95ff94843a8263c3d1c726a1657c1868.png

本文内容:

Linux 内核文件initrd加入RAID驱动重新编译封装和光盘、U盘Kickstart自动安装方法

适用场景:

由于引导内核文件RAID驱动老旧在安装Linux系统时发现找不到硬盘,需更新RAID驱动到内核文件并用Kickstart方式封装ISO,实现系统自动完成安装。

1.RAID驱动文件为自编译 .ko和RPM方式,更新RAID驱动到内核并重新打包内核。

2.RAID驱动文件为官方标准DD方式,更新RAID驱动到内核并重新打包内核。

3.RAID驱动文件为官方标准DD方式,利用Kickstart方式通过网络路径加载RAID驱动。

注意事项:

拷贝光盘文件时最好是带目录一起,这样会把所有的隐藏文件一起复置过来,不然在引导过程中会有问题。

挂载iso到指定目录并拷贝到相应目录:

mount –o loop Redhat.iso  /media/cd cp –arf  /media/cd  /cd   

一、RAID驱动文件为自编译 .ko和RPM方式打包驱动

准备工作:

∙对内核重新编译和封装最好是相应版本的系统里操作,这里使用虚拟机方式完成。

∙准备新RAID驱动

∙本次验证为Redhat6.5,KS自行准备

1、内核文件加入新RAID驱动并重新封装

在mount iso 目录中取得内核文件initrd.img并解开、删除原内核文件如下图例:

47e64e0d96c8be0fbba919931df6cc62.png

在解开内核文件目录中查找RAID存放路径,如下图例:

ce687724272cc67a070cef3b7e2a60dd.png

如下图例:查看内核文件中运行RAID驱动模块的版本,发现比较老旧。同理拷贝的新RAID驱动也可以用此命令查看。

7de9ad5e58a0359a54e1a773f2258fed.png

驱动路径:

modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/megaraid/

如下图例:拷贝新RAID驱动文件到内核目录tmp/ 下和RAID驱动加载路径下

注:把RAID驱动文件放内核tmp/ 下是为了当内核加载起来时KS  %POS中可以指定到此处安装RAID驱动和网卡驱动,相当于把文件上传到了引导内核中。

cp /home/radi-lom/* tmp/cp tmp/megaraid_sas.ko ./modules/2.6.32-431.el6.x86_64/cd ./modules/2.6.32-431.el6.x86_64/kernel/drivers/scsi/

2ed4cd703d0f1c738408afc685433784.png

如下图例:备份并更新RAID驱动文件名为原驱动名

mkdir backmv megaraid_mbox.ko.gz back/mv megaraid_mm.ko.gz back/mv megaraid_sas.ko.gz back/

679ca4c9a250c5c3ccc65fdd906a7005.png

cd0f28db235c45bc4c319e1224659f5f.png

如下图例: (重要),进入内核目录,使上述操作生效

cd /work/initrd/chroot .depmod -aexit

95fcd062ecad61af5adf252f8e48398e.png

如下图例:更改内核目录下所有文件权限并重新打包内核文件。至此内核文件中加载RAID驱动和重新打包内核文件完成。

chmod 777 ./* -Rfind . |cpio -c -o |xz -9 --formate=lzma >/home/initrd.img

b1b06417a4ce2fd79d8ec2864f9fbb04.png

2、ISO传统方式和UEFI方式安装配置

注:系统安装一般可以选择UEFI或传统(Legacy Mode)方式两种,其在光盘里要分别修改。

2.1传统方式配置修改:

传统方式配置只修改isolinux/isolinux.cfg文件,在文件里加入KS路径

cat isolinux/isolinux.cfg在append initrd=initrd.img后增加:ks=cdrom:/isolinux/ks.cfg

5eb9153b01d7ec3cd926c60a27572ed1.png

2.2适用于U盘安装配置方式:

在append initrd=initrd.img后增加:method=hd:LABLE=Upan ks=hd:LABEL=Upan:/isolinux/ks.cfg

27ee66066c493705e63c0dc07b4ce415.png

2.3 UEFI方式配置:

UEFI方式配置只修改EFI/BOOT/BOOTX64.conf文件,在文件里加入KS路径

cat EFI/BOOT/BOOTX64.conf在kernel /images/pxeboot/vmlinuz 后添加:ks=cdrom:/ioslinux/ks.cfg

a99575fcc7aba38de024188e8fe4eb27.png

3.Kickstart配置:

注:加如下选项原因为,前面内核文件封装进去的RAID驱动只用于内核引导当前使用,这时系统是装上了,当你重启系统时,硬盘上的系统引导内核并没有更新RAID驱动,这时是无法正常引导到系统的(也就是识别不到RAID卡)

加入内容:

在内核引导当前创建后继要使用的目录并拷贝前面在内核里加入的RAID驱动和LOM网卡文件到指定目录。

%post –nochroot      mkdir /mnt/sysimage/raidlomcp /tmp/* /mnt/sysimage/raidlom/%end%postchmod 777 /raidlom/*rpm -Uvh /raidlom/kmod-megaraid_sas-07.702.06.00-1.x86_64.rpmrpm -Uvh /raidlom/i40e-2.0.23-1.x86_64.rpm%end

f1d63876ae29b3bdd974ff52fe4b002b.png

适用于U盘安装配置方式:

48ad883bdfe8dc58d472e2d412deb3ef.png

4.重新封装ISO

注:进入要重新封装的ISO目录,用新封装好的initrd.img覆盖原来的initrd.img,重做引导生树,重新封装ISO。

4.1 将重新封好的initrd.img拷贝到下面目录并覆盖

find ./ |grep initrdcp /home/initrd.img isolinux/  #注意按 "y" 同意覆盖cp /home/initrd.img images/pxeboot/  #注意按 "y" 同意覆盖

770b6f2892a2c5634a0643c1861b8919.png

4.2 重新生成引导树

如下图例操作

因前期我们在ISO改变内容,我们需重新生成repodata下引导树

ls repodatacp repodata/6221039e7e3dabf7d538c76571d8aaf42b6292b8f6fe6cf56b8fcf1c*****.xml /home/   #注*号为替代字符,文件名参考实际情况rm repodata/* -fcreaterepo -g /home/6221039e7e3dabf7d538c76571d8aaf42b6292b8f6fe6cf56b8fcf1c*****.xml ./

0e62188ebff16a0e46c06887a0fa789f.png

4.3 ISO重新封装:

注意:封装时-A,-V,-volset 后面””内容为识别盘符,请跟isolinux/isolinux.cfg配置内容一致如下图例

Cdrom方式:

6638549108c6b2d4bd60c14ce00e2172.png

U盘方式:

f6d6d8de0f44f22b71242e3130f72a80.png

封装命令如下:

mkisofs -U -A "cdrom" -V "cdrom" -volset "cdrom" -J -joliet-long -r -v -T -o /home/rh6.5test.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot .

ISO封装好后,如需要生成到U盘安装需执行isohybrid,如用ISO安装不需要此步骤。

Yum 安装syslinux* 包,因需要用到isohybrid

687d3bfd62d529446e2166c801acf508.png

二.RAID驱动文件为官方标准DD方式打包驱动

注:适用于RAID驱动已为官方编译标准DD方式

准备工作:

∙对内核重新编译和封装最好是相应版本的系统里操作,这里使用虚拟机方式完成。

∙准备新RAID驱动

∙本次验证为Centos7.2

1.把RAID DD文件重新进内核文件

Mount iso 到指定目录并拷贝内核文件到指定目录,如下图例操作

mount -o loop CYG_OS7.6-190702.iso /media/cp -r /media/*  /work/centos/cd workcp centos/isolinux/initrd.img ./mkdir initrdmv initrd.img initrdcd initrd  #后续操作很多都在此目录下进行,请各位注意目录与图片对应

70c16b17614f7d3e7fde889481b9718d.png

解开内核文件initrd.img

xz -dc initrd.img |cpio –id

24e830b5c2de13037ef265f5d533796e.png

删除原内核文件initrd.img

rm initrd.img -rf

cdb29aaf8521b9c20a24e3f278e8b2f8.png

查找当前目录内核raid驱动和查看版本,发现比较老旧,无法驱动新的RAID卡

find ./ |grep -i megmodinfo ./usr/lib/modules/3.10.0-514.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko

7b68c844d31a3d2ab48ea49a036bc8ab.png

查看我们准备的新RAID驱动版本是较新且是你所要的,如下图例:

提示:这个RAID驱动解开DD.iso可以得到。

4fffc3e26fa4e06ff633e71a137429a8.png

拷贝新的RAID驱动到指定目录并覆盖,如下图例:

cp /home/megaraid_sas.ko ./usr/lib/modules/3.10.0-514.el7.x86_64/kernel/drivers/scsi/megaraid/

584d17f0ba918c064cf29ca650bd35c9.png

用modinfo 再次确认你已替换成功

modinfo ./usr/lib/modules/3.10.0-514.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko

1438cd9191fe3c582d0a1f2be9b26f3f.png

加入dd驱动文件到解开内核指定目录,后续将会使用到,如下图例:

d2590a77457ac7565a54a14de146166a.png

前面我们对内核文件做了操作,需重新depmod –a后更改权限并重新打包内核文件,

如下图例:

至此内核文件重新封装完成。

chroot ./depmod -aexitchmod 777 ./* -Rfind . |cpio -c -o |xz -9 --format=lzma >initrd.img

2b7c6d753c42383e59fff418e2c62723.png

2. 更改配置文件调用RAID dd.iso文件

注:验证为用U盘安装方式,当采用官方标准DD方式RAID驱动加载,会在安装过程中自动完成后继RAID驱动的所有加载安装,不用像自己编译的驱动要后继手动加载。

传统方式安装更改isolinux/isolinux.cfg 配置文件调用RAID dd.iso文件

UEFI方式安装更改EFI/BOOT/grub.cfg 配置文件调用RAID dd.iso文件,如下图例:

dd=path:/tmp/dd.iso  #加入路径

d58a3a9574db78c374b9c6cf56040a86.png

3.重新封装ISO

注:进入要重新封装的ISO目录,用新封装好的initrd.img覆盖原来的initrd.img,重做引导生树,重新封装ISO。

3.1 将重新封好的initrd.img拷贝到下应目录并覆盖

find /work/centos/ |grep initrd.imgcp initrd.img /work/centos/imgages/pxeboot/ #注意按"y"确认替换cp initrd.img /work/centos/isolinux   #注意按"y"确认替换

434402140abd6e422c212976fc7c14fc.png

3.2 重新生成引导树

如下图例操作

因前期我们在ISO改变内容,我们需重新生成repodata下引导树

cp centos/repodata/613cfa892e8bf6**************-comps.xml ./rm /work/centos/repodata/* -rfcreate -g /work/613cfa892e8bf6**************-comps.xml /work/centos

9f3c09ae8676509847f628a86ad750fc.png

3.3 ISO重新封装

注意:封装时-A,-V,-volset 后面””内容为识别盘符,请跟isolinux/isolinux.cfg配置内容一致如下图例

封装命令如下:

mkisofs -U -A " CYG_CentOS " -V " CYG_CentOS " -volset " CYG_CentOS " -J -joliet-long -r -v -T -o /work/ CYG_CentOS-new1.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot .

b8ce9d0296bfe809fc3831fe50d78303.png

ISO封装好后,如需要生成到U盘安装需执行isohybrid,如用ISO安装不需要此步骤

Yum 安装syslinux* 包,因需要用到isohybrid

注意当ISO要写用U盘时写放方式为DD

8ed6d755ffe9f1a612238c0b062d66f3.png

三、RAID驱动文件为官方标准DD方式网路加载驱动

注:当你采用PXE DHCP服务器利用Kickstart方式网络安装系统且你也遇到要安装系统版本较低,系统引导内核里的RAID驱动无法驱动新RAID卡找不到硬盘时,只需在KS文件中加入指定RAID 驱动DD.iso存放处即可。

Kickstart配置文件修改如下图例:

driverdisk --source=http://192.168.0.1/dd.iso #增加该行命令

948878f8864ea6a723e784aad0623954.png

本文介绍到此,希望各位有兴趣的同仁可以一同探讨,共同进步。


若有疑问可直接在公众号中留言(留下您的邮箱),我们接到反馈,会及时回复,感谢您的阅读,如果您喜欢我们的文章,还请关注并帮忙宣传;

459d60655556d2ea440e638b470e8fea.png

转载地址:http://slltx.baihongyu.com/

你可能感兴趣的文章
独立软件开发商进军SaaS注意八个问题,互联网营销
查看>>
jdk内存的分配
查看>>
关于self.用法的一些总结
查看>>
UIView翻译 (参考)
查看>>
Android Display buffer_handle_t的定义
查看>>
SSH详解
查看>>
ASM概述
查看>>
【290】Python 函数
查看>>
godaddy域名转发(域名跳转)设置教程
查看>>
silverlight学习布局之:布局stackpanel
查看>>
理解并自定义HttpHandler
查看>>
小程序二次贝塞尔曲线,购物车商品曲线飞入效果
查看>>
微信小程序
查看>>
常用的正则表达式分享
查看>>
我的世界:一个村落(其一)
查看>>
SKChoosePopView 一个HUD风格的可定制化选项弹窗的快速解决方案
查看>>
(二十)java多线程之ScheduledThreadPoolExecutor
查看>>
【译】码农生涯十六条不要
查看>>
sublime快捷键
查看>>
认识jQuery及jQuery选择器
查看>>