web-dev-qa-db-ja.com

initrdでモジュールをロードする方法は?

メインシステムのスタートアッププロシージャの/etc/modulesと同様に、initrdステージでモジュール(たとえば、netconsole)を明示的にロードします。

まず、システムのinitrdに必要なモジュールが既に含まれていることを確認しました(付録を参照)。

/initrd.imgを調べました(これは圧縮されたcpioアーカイブであるため、簡単に調べるためにzcat /initrd.img > initrd.cpioを実行し、mcでその中に入りました)。スクリプトの中からmodprobeの呼び出しを探しましたが、/conf/modules(ここで/はinitrdのルートです)にリストされているモジュールは、/scripts/functionsからload_modules()関数(/initによって呼び出されます)によって自動的にロードされることがわかりました。

しかし、initrdの/conf/modulesを更新するUbuntuシステムの標準ツールは何でしょうか?

(ところで、Ubuntuのinitrdのコードの調査中に、/initスクリプトでnetconsoleの特別なサポートがあることに気付きました。 、その他のカスタムモジュールに関して。)

付録

上で言ったように、まず、システムのinitrdに必要なモジュール(つまり、netconsole)が既に含まれていることを確認しました。こうやって:

# zcat /initrd.img | cpio --extract --verbose --list  | fgrep netconsole
-rw-r--r--   1 root     root        25372 Aug 31 20:59 lib/modules/3.19.0-28-generic/kernel/drivers/net/netconsole.ko
109504 blocks
# 

また、必要なネットワークドライバーが既に含まれていることも確認しました。

# ls -ld /sys/class/net/eth0/device/driver
lrwxrwxrwx 1 root root 0 Sep 21 15:34 /sys/class/net/eth0/device/driver -> ../../../../bus/pci/drivers/sky2
# zcat /initrd.img | cpio --extract --verbose --list  | fgrep sky2
-rw-r--r--   1 root     root        92948 Aug 31 20:49 lib/modules/3.19.0-28-generic/kernel/drivers/net/ethernet/marvell/sky2.ko
109504 blocks
# 

Ubuntu 14.04でinitrdにモジュールを追加する方法を発見しました。モジュールの名前を/ etc/initramfs-tools/modulesに追加しました。これにより、モジュールがinitrdファイルに追加されました。/etc/initramfs-tools/modulesに変更を加えた後、initrdファイルを更新することを忘れないでください(update-initramfs -u)。

12
Matthew Wolf

Ubuntuは、initrdの作成を処理するためにinitramfs-tools(入門についてはman initramfs-toolsを参照)を使用します。

Initrdにモジュールnetconsoleを追加し、それを強制的にロードするには、/ etc/initramfs-tools/hooks(つまり/ etc/initramfs-tools/hooks/netconsole)に次の内容のファイルを作成します。

#!/ bin/sh 
 PREREQ = "" 
 prereqs()
 {
 echo "$ PREREQ" 
} 
 
 $ 1の
 prereqs)
 prereqs 
 exit 0 
 ;; 
 esac 
 
。 /usr/share/initramfs-tools/hook-functions

force_load netconsole 

実行可能にします。次に実行します:

update-initramfs -u

最新のカーネルのinitrdを更新します。

3
user448115