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,才能使其在已安裝的系統上運作。

相關內容