如何在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)函数自动加载的。

但是在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
# 

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

# 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 2016年

Answers:


14

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


您如何定义模块名称?现在我需要添加ahci.ko模块吗?那么该文件应包括什么?
sandun dhammika

@sandundhammikaahci
肯·夏普

3

Ubuntu使用initramfs-tools(请参阅man initramfs-tools中的介绍)来处理initrd的创建。

要在initrd中添加模块netconsole并强制加载,请在/ etc / initramfs-tools / hooks(即/ etc / initramfs-tools / hooks / netconsole)中创建一个文件,其内容为:

#!/ bin / sh
PREREQ =“”
prereqs()
{
   回声“ $ PREREQ”
}

案例$ 1
先决条件
   先决条件
   出口0
   ;;
埃萨克

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

force_load网络控制台

并使其可执行。然后运行:

update-initramfs -u

更新最新内核的initrd。


1
但是,不存在将模块名称附加到的简单方法/conf/modules吗?我应该把它放在哪里update-initramfs -u才能使用?
imz –伊万·扎哈拉雅舒夫(Ivan Zakharyaschev)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.