如何在initrd中加载模块?

imz*_*hev 14 debugging initramfs modprobe drivers 15.04

我想netconsole在 initrd 阶段显式加载一个模块(比如,),类似于/etc/modules在主系统启动过程中。

首先,我检查了系统中的 initrd 是否已经包含所需的模块(参见附录)。

我已经查看过/initrd.img(这是一个压缩的 cpio 存档,所以为了快速查看它,我已经完成zcat /initrd.img > initrd.cpio并使用 进入了它mc)。我已经modprobe在脚本中寻找了任何调用,并且已经发现/conf/modules/这里是 initrd 的根)中列出的模块由load_modules()函数从/scripts/functions(由 调用/init)自动加载。

但是 Ubuntu 系统中更新/conf/modulesinitrd的标准工具是什么?

(顺便说一句,我对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
# 
Run Code Online (Sandbox Code Playgroud)

我还检查了它是否已经包含所需的网络驱动程序:

# 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
# 
Run Code Online (Sandbox Code Playgroud)

小智 15

我发现了如何在 Ubuntu 14.04 中向 initrd 添加模块我将模块的名称添加到 /etc/initramfs-tools/modules 。这将模块添加到 initrd 文件中。在对 /etc/initramfs-tools/modules 进行更改后,不要忘记更新 initrd 文件 (update-initramfs -u)。