主流Linux操作系统如何适配服务器硬件&将驱动集成到老版本系统安装镜像ISO文件中?

内容简介:

        今天跟大家分享点稍微高级点的内容,

       第一种情况,当服务器硬件平台或某个部件的发布时间晚于操作系统发布的时间,这就会导致老操作系统中没有新发布的硬件平台或配件的驱动,可能就导致操作系统无法正常安装,或安装以后系统无法识别某些硬件配件,比如主板芯片、cpu、内存、网卡、硬盘、raid卡等导致各种各样问题的出现,最关键的问题是没有raid卡或者usb的驱动会直接影响系统安装,没有raid卡驱动,可以使用dd手动加载驱动,没有usb驱动,键盘鼠标都用不了了,又何谈手动加载驱动呢,到这我想大部分人会选择放弃了,有小伙伴以前或许遇到过像win7系统要安装到新电脑,发现没有usb2.0驱动,或者直接识别不了cpu,不支持安装等问题。

       第二种情况,部分用户购买了新的硬件平台,但是之前一直使用的老版本的操作系统,而且成为了习惯,对老版本系统产生了依赖关系,不想再增加学习成本,又或者老版本系统上运行的应用由于年代久远,缺少维护,无法迁移到新的操作系统运行,因此老版本系统跟新硬件平台的兼容性就成了问题,操作系统厂家也不会回过头再对老系统适配新硬件,这就是今天要讲的内容价值所在。

环境说明:

操作系统:centos为例

场景:

适配服务器raid卡,以博科broadcom厂商的raid卡9560-8i为例

一、软件工具准备

1.1 驱动下载

驱动下载链接
注 :驱动版本请根据操作系统版本进行选择,本文以最新驱动为例。

https://docs.broadcom.com/docs and downloads/raid controllers/raid
controllers common files/MR_LINUX_DRIVER_7.20 07.720.04.00 1.tgz

本次下载的是最新版Linux 驱动 MR_LINUX_DRIVER_7.20 07.720.04.00 1.tgz 。

841e8e7af2484a0696250e1a5ce9b15c.png 

1.2 操作系统

本文档以CentOS 7.6为操作系统为例

操作系统安装,选择带 GUI的服务器 全包安装 。

64ab4385c9fa49e78e55df3b9821a8e7.png 安装的时候创建 mockbuild用户。

 aac5a3e9347a472f9044699656a55520.png

 二、将raid卡驱动集成到操作系统ISO镜像

2.1 准备制作操作系统文件 

2.1.1 上传需要适配的操作系统镜像ISO文件

将操作系统镜像文件 CentOS-7-x86_64-DVD-1810.iso上 传到工作目录

b0080a36152d4b2d8243fb3a8c8dc1dd.png 2.1.2 挂载刚上传的镜像文件

1) 创建 挂载 目录 

mkdir -p /mnt/iso

 ae9b835ad6ed458d8c7ad7de956aaf16.png

2) 挂载镜像

mount CentOS-7-x86_64-DVD-1810-Hygon-v8.iso /mnt/iso/

ff63e21802c24b39a1e33e3958fb2a3e.png

2.1.3 未适配的镜像文件内容 

1 )创建镜像制作目录

mkdir -p /root/iso_rebuild

ae2b7f49dc2f4c04a91232d19d8d2b3a.png

2 )进入镜像制作目录 

cd /root/iso_rebuild

64600592588046feae74b54803a26198.png

3)拷贝原始镜像内核

rsync -a /mnt/iso/ .

cc6940f982874c3ebcdc85076a8897b9.png 2.2 准备raid卡驱动

2.2.1 上传驱动文件

 将驱动文件 MR_LINUX_DRIVER_7.20-07.720.04.00-1.tgz上 传到工作目录

12e7d428032245e5aa508f0086631c99.png

2.2.2 解压刚上传的驱动文件包 

1 )创建官方驱动文件解压目录

mkdir -p /root/driver

7ef18031c0d44059a115078719bcfa84.png

2)解压官方驱动文件包 

tar xf MR_LINUX_DRIVER_7.20-07.720.04.00-1.tgz -C /root/driver/

e99a86b8a1fd49898e47a09a8e05efc3.png3 )进入解压官方驱动文件包解压目录

cd /root/driver/

8350f2e15a644212bfd505138d822d73.png

4)创建 megaraid_sas_components.tgz解压目录 

mkdir -p megaraid_sas_components

9f6fb2fa6a7a4350a2b4e46da8e1a123.png

5 )解压 megaraid_sas_components.tgz 

tar xf megaraid_sas_components.tgz -C megaraid_sas_components

e64e3a0221244dbba3d85fdb8e4fc930.png

2.2.3 查看megaraid_sas_components 

1 )进入 megaraid_sas_components目录

cd megaraid_sas_components/

5afe9145a2614691bde0f4201d930145.png

2) 查看 megaraid_sas_components 

ls

f3e7728c91e74642945c391d43d6f612.png

3) 查看 kmod_srpm 

ls kmod_srpm/

37eab55d9b484e68a72d210e0b6172c6.png

这是本次制作驱动rpm所需的驱动源代码。 

4 )查看 rhel7_oel7_centos7 

tree rhel7_oel7_centos7/

7d40bd3bdb754e0a9aa9524d56f0ac52.png 这个是raid卡厂家官方制作好的驱动iso和 rpm文件,分别对应 rhel7.7、 rhel7.8和 rhel7.9。

2.3 编译生成megaraid_sas.ko.xz


2.3.1 创建生成目录

mkdir get_megaraid_sas.ko.xz

a98e20b846774d29b9971cf690b1f22c.png2.3.2 拷贝驱动源码到生成目录

cp /root/driver/megaraid_sas_components/megaraid_sas-07.720.04.00-src.tar.gz get_megaraid_sas.ko.xz/

44586e3468a845058afa8789b883864b.png

2.3.3 进入生成目录并解压源代码 

cd get_megaraid_sas.ko.xz/

afb10fcbb0b64850b0bf4888582cb938.png

tar xf megaraid_sas-07.720.04.00-src.tar.gz

b1e8e61da72347f39c10ccfb5b602d62.png

2.3.4 进入驱动源代码目录 

cd megaraid_sas-07.720.04.00/

e049a9bc8cd943408cbb2b0d6a4c76db.png2.3.5 编译

./compile.sh

360c623b24fb409286b2d925d1b03389.png2.3.6 压缩ko驱动文件

xz -z megaraid_sas.ko

12389e93c3a7447495cc5a3e9a3f13c9.png

2.3.7 移到上级目录 

mv megaraid_sas.ko.xz ../

80d6fa6670164c95b73b53c2e62ec5da.png将压缩后的驱动文件megaraid_sas.ko.xz移到上级目录备用 。

2.4 生成新镜像initrd.img 

2.4.1 创建生成目录

mkdir get_initrd.img

7431c9b5bd4448f0b99d1b826308c89e.png

2.4.2 进入生成目录 

cd get_initrd.img/

d9e1d0237e194c6f8c82f4457707bc60.png2.4.3 拷贝原始initrd.img

cp /mnt/iso/isolinux/initrd.img .

8ee0ddfae18145788084d938cb5bc338.png

2.4.4 重命名initrd.img 

mv initrd.img initrd.img.xz

f05fc668c3f64c63a3f3b467c7fe8272.png

2.4.5 解压initrd.img.xz 

xz -d initrd.img.xz

961e856003134769a2d6f230edaf54d9.png

2.4.6 提取initrd.img 

cpio -i < initrd.img

226bd7c58496462489c898124e5b0122.png

2.4.7 删除原来initrd.img 

rm initrd.img

72a5f3e89eba4406a333f98043c26f45.png2.4.8 替换megaraid_sas.ko.xz

cp /root/get_megaraid_sas.ko.xz/megaraid_sas.ko.xz usr/lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/scsi/megaraid/megaraid_sas.ko.xz

ac679204ad7342ccafd14b7eaaaae7b3.png

2.4.9 重建模块依赖映射 

depmod -vab .

834a45212c0545cb8ba2ce3badf2c046.png2.4.10 查看新建的模块依赖映射

ll -ht lib/modules/3.10.0-957.el7.x86_64/

ac2b3406c27746388ef153c756e82eb8.png2.4.11 重新打包initrd.img

find . | cpio -c -o | xz -9 --format=lzma > ../initrd.img

d970fbfc624b406eae62bb8927b20136.png

 2.4.12 将生成的initrd.img移到当前目录

mv ../initrd.img .

df12685f9c054a09a5dac0e4ed4744e4.png

将新生成的initrd.img文件移到制作目录备用。 

2.5 替换原始镜像里的initrd.img文件

2.5.1 进入镜像制作目录

cd /root/iso_rebuild/

f7818fd6d23444e3b1c9a0051439e00d.png

 2.5.2 替换isolinux/initrd.img

cp /root/get_initrd.img/initrd.img isolinux/initrd.img

30c0ac4b50fc4d0aba72443386d88beb.png

2.5.3 替换images/pxeboot/initrd.img 

cp /root/get_initrd.img/initrd.img images/pxeboot/initrd.img 

9f87ce7584b74fe9a89425307abe9b69.png

 2.6 编译驱动rpm包

2.6.1 准备kmod-megaraid_sas-07.720.04.00-1.src.rpm 

cp /root/driver/megaraid_sas_components/kmod_srpm/kmod-megaraid_sas-07.720.04.00-1.src.rpm /home/mockbuild/

a240a3b00c1342afae0788cc26e0ece2.png2.6.2 切换到mockbuild用户

su - mockbuild

1e17c9216ac9425c8b2764e1d5eb6bc6.png2.6.3 安装源码

rpm -ivh kmod-megaraid_sas-07.720.04.00-1.src.rpm

ab2d847100f448ab93fd3691d8f45956.png

2.6.4 进入SPEC目录 

cd rpmbuild/SPECS/

040879061fbf4680bfd76c753242a444.png

2.6.5 编译源码 

rpmbuild -bb megaraid_sas.spec

a7cc50f1eee04ea49631e0a1deba28d5.png2.6.6 查看生成的rpm包

tree ../RPMS/

d851075022af497cb680ae4fe333acc7.png2.7 替换ISO镜像里的驱动rpm

2.7.1 进入镜像制作目录 

cd iso_rebuild/

d75da35c92684e55b418ebedc7780215.png

2.7.2 拷入驱动rpm 

cp /home/mockbuild/rpmbuild/RPMS/x86_64/kmod-megaraid_sas-07.720.04.00-1.x86_64.rpm Packages/

e60f37ddb90c40a5a69ef20cbad166b6.png

2.7.3 修改-comps.xml 

1 )生成 comps.xml 

cd repodata/ rm -rf *.gz rm -rf *.bz2 rm -rf repomd.xml* rm -rf TRANS.TBL mv *-comps.xml comps.xml cd ..

fa455746d3504395a05f4900a695dfd5.png

2) 查找 group id Core

vim repodata/comps.xml

911b3e4e207240f8b08d857e518f37e1.png

3) 在 group id Core的 <packagelist>下添加 kmod-megaraid_sas 

b58a279b02cb491cb74ce6a99be4c263.png

2.7.4 重建repodata 

createrepo -g repodata/comps.xml ./

d0f05e24062d4affa2b1ffeb33cf0a58.png2.8 重新打包成ISO镜像

2.8.1 获取镜像LABEL

vim isolinux/isolinux.cfg

520a52a1504841e4a47fb06852889d9c.png

其中LABEL为 CentOS\x207\x20x86_64 打包镜像时 \x20替换为空格 。 

2.8.2 重新打包成 ISO 镜像 

mkisofs -quiet -input-charset utf-8 -V "CentOS 7 x86_64" -b isolinux/isolinux.bin -c boot.cat -
20
no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -R -J -T -v -joliet-long -o /root/CentOS-7-x86_64-DVD-1810-Hygon-v8-9560.iso -r ./

61cfe2df4da146f7b92610da1e54b3f9.png

3c1726695e5546ab9c25ac5b174e77a9.png 2.9 ISO镜像转为hybrid格式

isohybrid -u CentOS-7-x86_64-DVD-1810-Hygon-v8-9560.iso
2.10 为ISO镜像添加md5值 implantisomd5 CentOS-

ad3b0a4bc36b40ada7e497ef0978a4a0.png

2.10 为ISO镜像添加md5值 

implantisomd5 CentOS-7-x86_64-DVD-1810-Hygon-v8-9560.iso

77d1d167041f447ca56251a6ea57b253.png2.11 验证测试

1) 安装时能够正确识别驱动器

0c23fd8515f6482d9ec37bb36358e6eb.png2) 安装后驱动版本 为更新后的版本

modinfo megaraid-sas

01beb9c8acf7429d861226957f385411.png

 

  • 10
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术瘾君子1573

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值