如何在 ubuntu initramfs-tools 中实现“omit_drivers+=”效果?

如何在 ubuntu initramfs-tools 中实现“omit_drivers+=”效果?

我想防止在 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

  1. 确认模块最初存在于 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
  1. 创建一个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)
  1. 确认模块不包含在重建的 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配置文件这也可能有用。

相关内容