如何在 initramfs 中填充 /sys?

如何在 initramfs 中填充 /sys?

我正在尝试使用 debian 内核启动操作系统(linux 内核),因此我需要使用 initramfs (因为所有内容都是作为模块构建的)。但是启动到 initramfs 后,它似乎没有将 /sys/blocks 填充为:

# mdev -s

“无法”使用设备填充 dev (/dev/sd[az][0-9])。

那么我应该如何正确填充“/sys”?我正在使用 qemu 启动系统并使用原始图像作为“hd”。

注意:
* 这不是 debian (或任何其他发行版),我的 initramfs 是从头开始创建的
* 我正在使用 mdev
* /init 脚本如下所示:

mount -n -t proc none /proc
mount -n -t sysfs none /sys
mkdir /.root
mdev -s
mount -n -t $rootfstype $device /.root
umount /proc
umount /sys
exec switch_root /.root $init $@

编辑:我的问题不是填充 dev,如果需要的话可以手动完成,只需查看“/sys”并使用“mknod”即可。问题是“/sys”缺少设备“/sys/block/sd[az][0-9]”。

消息:https://bin.privacytools.io/?d50e11eea81d8158#1ga51UE+NI6nX49SbkdjGitXOyZpalWUu2I3BuEMx+o=
(当我从 qemu 诅咒中复制它时,我可能错过了一些东西)

答案1

要使用mdev,您需要CONFIG_UEVENT_HELPER=y在内核配置中添加一个命令,然后再执行以下命令mdev -s

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

来源:Gentoo 维基

默认的 Debian 10 内核没有CONFIG_UEVENT_HELPER设置,因此mdev无法使用。相反,它有,CONFIG_DEVTMPFS=y所以你可以这样做:

mount -n -t proc none /proc
mount -n -t sysfs none /sys
mount -n -t devtmpfs none /dev
mkdir /.root
# this would be a great place to run "fsck -C0 $device" if required by $rootfstype
mount -n -t $rootfstype $device /.root
umount /proc
umount /sys
umount /dev
exec switch_root /.root $init $@

...切换到真正的根文件系统完成后,您可以再次挂载devtmpfs文件系统:

mount -n -t devtmpfs none /dev

相关内容