我一直在尝试在启动 Centos 7.6 ISO 时加载更新的 initrd.img 文件和更新的驱动程序,但是即使我更换了驱动程序,它似乎仍然加载旧驱动程序。
采取的步骤:
从 ISO 中提取 initrd 映像:
- 安装CentOS 7.6 ISO
- 将 initrd.img 从 isolinux/initrd.img 复制到临时文件夹 (/tmp/image)
- 在 /tmp/image/initrd 创建一个新文件夹
- 通过运行提取 initrd.img 文件夹
xz -dc < ../initrd.img | cpio -idmv
创建了 e1000e.ko.kz 驱动程序文件
- 从 Intel 网站下载最新的 e1000e 网卡驱动程序: e1000e下载链接
- 提取 tar 文件
tar xvf e1000e-3.6.0.tar.gz
制作源代码,确保安装了 gcc 和 kernel-devel 库
cd e1000e-3.6.0/src make install
注意:该驱动程序是在 CentOS 7.6 ISO 创建的 Linux 环境上编译的。
将创建的 e1000e.ko 文件复制到临时文件夹(/tmp/image)
压缩为.kz格式
xz -k e1000e.ko
替换旧驱动程序并重新打包 initrd.img 映像
复制压缩驱动文件以替换现有驱动
cp e1000e.ko.kz /tmp/image/initrd/files/lib/modules/3.10.0.957.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000e
- 重新打包 initrd.img
cd /tmp/image/initrd find . 2>/dev/null | cpio -c -o | xz -9 --check=crc32 > ../initrd.img
- 将生成的 initrd.img 复制回 ISO 中的 isolinux/initrd.img 和 images/pxe/initrd.img
预期成绩
更新 initrd.img 中的驱动程序并将其复制到 ISO 中后,我希望在 ISO 安装引导过程完成后加载新驱动程序(e1000e 版本 3.6.0)。
实际结果
我可以从 ISO 启动并从中安装 Centos 7,但是在安装 Centos 后,运行以下命令:
modinfo e1000e
提供最初位于 initrd.img 上的旧版本驱动程序(e1000e 版本 3.2.6),而不是我加载到 initrd.img 映像上的版本 3.6.0。
我不太确定我做错了什么,是否错误地创建了驱动程序,错误地加载了驱动程序,错误地创建了 initrd.img 或者其他什么。
任何帮助将不胜感激,因为过去几天我一直在努力让它工作。这是我的第一篇文章,因此如果我做错了什么或者是否需要任何其他信息来调试此问题,请告诉我。
干杯
答案1
刚刚想通了这一点。驱动程序也位于 LiveOS/squashfs.img rootfs.img 中。因此 initrd 模块会被 rootfs.img 覆盖。这是在安装过程中发生的,但是一旦安装的系统启动,驱动程序就来自已安装的 RPM(在本例中可能是内核),因此 initrd 不再与它有任何关系。您需要更新该 RPM 或添加带有更新驱动程序的单独 RPM,才能使其在已安装的系统上运行。