CentOS 7.6 - Initrd.img 未加载更新的驱动程序

CentOS 7.6 - Initrd.img 未加载更新的驱动程序

我一直在尝试在启动 Centos 7.6 ISO 时加载更新的 initrd.img 文件和更新的驱动程序,但是即使我更换了驱动程序,它似乎仍然加载旧驱动程序。

采取的步骤:

从 ISO 中提取 initrd 映像:

  1. 安装CentOS 7.6 ISO
  2. 将 initrd.img 从 isolinux/initrd.img 复制到临时文件夹 (/tmp/image)
  3. 在 /tmp/image/initrd 创建一个新文件夹
  4. 通过运行提取 initrd.img 文件夹
xz -dc < ../initrd.img | cpio -idmv

创建了 e1000e.ko.kz 驱动程序文件

  1. 从 Intel 网站下载最新的 e1000e 网卡驱动程序: e1000e下载链接
  2. 提取 tar 文件
    tar xvf e1000e-3.6.0.tar.gz
    
  3. 制作源代码,确保安装了 gcc 和 kernel-devel 库

    cd e1000e-3.6.0/src
    make install
    

    注意:该驱动程序是在 CentOS 7.6 ISO 创建的 Linux 环境上编译的。

  4. 将创建的 e1000e.ko 文件复制到临时文件夹(/tmp/image)

  5. 压缩为.kz格式

    xz -k e1000e.ko
    

    替换旧驱动程序并重新打包 initrd.img 映像

  6. 复制压缩驱动文件以替换现有驱动

    cp e1000e.ko.kz /tmp/image/initrd/files/lib/modules/3.10.0.957.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000e
    
  7. 重新打包 initrd.img
    cd /tmp/image/initrd
    find . 2>/dev/null | cpio -c -o | xz -9 --check=crc32 > ../initrd.img
    
  8. 将生成的 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,才能使其在已安装的系统上运行。

相关内容