Centos 7.6 ISO の起動時に、更新されたドライバーを含む更新された initrd.img ファイルをロードしようとしましたが、ドライバーを置き換えたにもかかわらず、古いドライバーがまだロードされているようです。
実行された手順:
ISO から抽出された initrd イメージ:
- マウントされた CentOS 7.6 ISO
- isolinux/initrd.img から initrd.img を一時フォルダ (/tmp/image) にコピーしました
- /tmp/image/initrdに新しいフォルダを作成しました
- 実行してinitrd.imgフォルダを抽出します。
xz -dc < ../initrd.img | cpio -idmv
e1000e.ko.kz ドライバ ファイルを作成しました
- Intel Web サイトから最新の e1000e NIC ドライバーをダウンロードします。 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 イメージにロードしたバージョン 3.6.0 ではなく、最初に initrd.img にあった古いバージョンのドライバー (e1000e バージョン 3.2.6) を提供します。
ドライバーを間違って作成しているのか、ドライバーを間違ってロードしているのか、initrd.img を間違って作成しているのか、あるいは他の何かなのか、何が間違っているのかよくわかりません。
ここ数日間、これを機能させようと努力してきたので、どんな助けでもありがたいです。これは私の最初の投稿なので、何か間違っていることがあれば、またはこの問題をデバッグするために追加情報が必要な場合はお知らせください。
乾杯
答え1
ちょうどこのことに気付きました。ドライバーは LiveOS/squashfs.img の rootfs.img にもあります。そのため、initrd モジュールは rootfs.img でオーバーレイされます。これはインストール プロセス中に発生しますが、インストールされたシステムが起動すると、ドライバーはインストールされた RPM (この場合はカーネル) から提供されるため、initrd はもはや何の関係もありません。インストールされたシステムで動作させるには、その RPM を更新するか、更新されたドライバーを含む別の RPM を追加する必要があります。