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


13

メインシステムの起動手順netconsoleと同様に、initrdステージでモジュール(たとえば、)を明示的にロードします/etc/modules

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

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

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

(ところで、Ubuntuのinitrdのコードの研究中に、いくつかの特別なサポートがあることに気付きました netconsoleに、/initスクリプトに私のニーズに合わせて機能するかもしれませんが、とにかく、私の質問は他のカスタムモジュールに関してより一般的です)

付録

上記で述べたように、まず、システムの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
# 

3
将来の参照のために、ここにlsinitramfs含まれるコマンドinitramfs-toolsとほぼ同じことを行いzcat /initrd.img ..ます。
-timss

回答:


14

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


モジュール名はどのように定義しますか?今、ahci.koモジュールを追加する必要がありますか?それで、そのファイルには何を含めるべきですか?
サンダンdhammika 16

@sandundhammikaahci
ケンシャープ

3

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

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

#!/ bin / sh
PREREQ = ""
prereqs()
{
   echo "$ PREREQ"
}

ケース$ 1
前提条件)
   前提条件
   出口0
   ;;
エサック

。/ usr / share / initramfs-tools / hook-functions

force_loadネットコンソール

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

update-initramfs -u

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


1
しかし、モジュール名を追加するだけの簡単な方法はありません/conf/modulesか?それupdate-initramfs -uを使用するためにどこに置くべきですか?
imz-イヴァンザカリヤシェフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.