mkiinitrd(CentOS 5.5)を使用してinitrdを作成すると、initrdに追加されたカーネルモジュールがプロセスで変更されます。たとえば、initrd には /lib/modules/2.6.18-194.32.1.el5/kernel/drivers/ata/sata_via.ko と /lib/sata_via.ko 用の異なるバイナリがあります。
mkinitrdにカーネルモジュールが含まれているとどうなりますか?依存関係に接続されていますか?それともモジュールを変更するのはなぜですか?
答え1
/lib/sata_vio.ko
initrdには1つありますか?ファイルシステムの1つ(たとえば/
「root」)は、現在このドライバを必要とするSATAドライブにありますか(または元々ありましたか?)。その項目が/etc/modules
またはに表示されますか/etc/mkinitrd/modules
?
私のUbuntuシステムでは、このモジュールはinitrdイメージ内の同じ場所にあります<extracted initrd>/lib/modules/<uname -r>/drivers/ata/sata_vio.ko
。
何とfile
?何とstrings | grep '\<ver'
?たぶん、他のドライバや別のカーネルバージョンから来たかもしれません。
明らかに、またはls -l
を使用して大きいことをdu
確認し、両方のファイルで実行してシンボルに違いがあるかどうかを確認できます(例:使用)。/lib/sata_vio.ko
nm -D
diff
全体のプロセスはに文書化する必要がありますman mkinitrd
。特に、システムがどのスクリプトを実行しているか、/usr/share/initrd-tools/scripts
または/etc/mkinitrd/scripts
?
答え2
initrd(またはinitramfs)は、ブートローダが起動時にロードできる小さなRAMベースのファイルシステムの内容です。これには、モジュールをロードするための最小限のツールと、必要なハードウェア(ハードディスクやファイルシステムなど)にアクセスするために必要なモジュールが含まれています。その中に含まれている最小初期化(最初のプロセス)は実際/に切り替わります。 initrd イメージは必要なファイルの gzip(1)ed cpio(1) アーカイブであり、リンクやその他の操作は実行されません。