我正在尝试在 Ubuntu 18.04 下编译一个支持 BTRFS 的自定义内核。当我编译并安装 4.20.70-generic 时,一切正常,系统启动没有任何问题。顺便说一句,我不能使用任何更新的版本,因为我还需要一个自定义驱动程序(稍后),该驱动程序不会在 4.x 之后的任何版本上进行编译。
当我使用 4.17.4 的自定义内核配置文件(make oldconfig)编译相同的内核源代码并回答所有问题时,同一系统找不到 BTRFS 根卷。显示以下错误:
Begin: Running /scripts/init-premount ... done
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done
Begin: Running /scripts/local-premount ... Btrfs loaded, crc32c=crc32c-generic
Scanning for Btrfs filesystems
done.
Begin: Waiting for root file system ... Begin: Running /scripts/local-block ... done
done.
Gave up waiting for root file system device
ALERT! UUID=a7ff8aa1-5518-4cd3-992f-eab4ed909443 does not exist. Dropping to a shell!
两个内核的内核命令行都是相同的,UUID 有效,并且两个 .config 文件(make menuconfig -> make install)都包含相同的 BTRFS 模块:
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
linux /@/boot/vmlinuz-4.18.0-15-generic root=UUID=a7ff8aa1-5518-4cd3-992f-eab4ed909443 ro rootflags=subvol=@
linux /@/boot/vmlinuz-4.18.0-15-mykernel root=UUID=a7ff8aa1-5518-4cd3-992f-eab4ed909443 ro rootflags=subvol=@
所以编译内核的时候肯定还需要启用一些别的东西。我缺少什么?
答案1
经过反复试验,我终于弄清楚了,并交叉验证了这个问题。内核丢失:
CONFIG_FUSION:Fusion MPT 设备支持
顺便说一句,我在 VMware Fusion (MacOS) 下运行安装,在过去 10 年里,它一直不参与其中,但在构建您自己的内核时,需要执行上述操作。还需要 SCSI 支持。