我想防止在 mkinitramfs 期间将某些驱动程序放入 ramdisk。在 fedora 或 arch 中有一个配置文件,我可以在其中放入类似的东西omit_drivers+=driver-a driver-b
以避免某些模块。这样我就不需要在内核/驱动程序更新后重建 ramdisk 了。
我如何在 ubuntu 中实现这一点?我只找到通过 initramfs.conf 或 /etc/initramfs-tools/modules 添加额外模块的选项。但我如何将某些模块列入黑名单?
为了避免混淆:我不想将驱动程序列入黑名单,实际上我需要在启动后加载驱动程序。我只是不想将模块放入 ramdisk 中。
答案1
似乎没有与此等效的设置德拉库特选择initramfs 工具一种方法是使用自定义hook
脚本删除内核模块。
这是一个相当简单的例子,我从 initramfs 中删除了e1000.ko
和内核模块。e1000e.ko
- 确认模块最初存在于 initramfs 中。
root@ubuntu:~# lsinitramfs /boot/initrd.img-$(uname -r) | grep e1000
usr/lib/modules/5.15.0-48-generic/kernel/drivers/net/ethernet/intel/e1000
usr/lib/modules/5.15.0-48-generic/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
usr/lib/modules/5.15.0-48-generic/kernel/drivers/net/ethernet/intel/e1000e
usr/lib/modules/5.15.0-48-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
- 创建一个
hook
脚本来删除模块并重建 initramfs。
install -m 0755 /dev/null /etc/initramfs-tools/hooks/omit
cat <<'EOF' > /etc/initramfs-tools/hooks/omit
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
# Begin real processing below this line
OMIT_DRIVERS="e1000.ko e1000e.ko"
for i in ${OMIT_DRIVERS}; do
find ${DESTDIR} -name ${i} -delete
done
EOF
update-initramfs -c -k $(uname -r)
- 确认模块不包含在重建的 initramfs 中。
root@ubuntu:~# lsinitramfs /boot/initrd.img-$(uname -r) | grep e1000
usr/lib/modules/5.15.0-48-generic/kernel/drivers/net/ethernet/intel/e1000
usr/lib/modules/5.15.0-48-generic/kernel/drivers/net/ethernet/intel/e1000e
这hook
可以更加灵活。我的示例内容主要基于man -7 initramfs 工具。
有一个MODULES
选项initramfs配置文件这也可能有用。