我一直在嘗試在啟動 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,才能使其在已安裝的系統上運作。