内核是否会删除 initramfs 上 /dev 中的条目?

内核是否会删除 initramfs 上 /dev 中的条目?

我有一个完全定制的、最小的、嵌入式 Linux(vanilla、3.3.8、i486、Vortex86dx)系统,它从 initramfs 映像启动。不使用标准分发脚本,仅使用单个 rcS 文件进行初始化。

我有一个 IDE 闪存盘,有两个分区:/dev/hda1 和 /dev/hda2。

由于这是固定系统的最小嵌入式发行版,因此它有一个静态 /dev 目录,其中包含 /dev/hda1 和 /dev/hda2,并且没有 UDEV。

当 init 调用 rcS 时,/dev/hda1 条目不再存在。此时尚未运行其他脚本、用户应用程序或守护程序。 /dev/hda1出现已被内核删除(?)

如果我在开发过程中通过 NFS 根文件系统启动目标,则不会遇到同样的问题。

我使用 Buildroot 通过 device_table_dev.txt 文件创建 /dev 目录。例如

# IDE Devices
/dev/hda    b   640 0   0   3   0   0   0   -
/dev/hda    b   640 0   0   3   1   1   1   4

我检查了 Buildroot 输出/图像中的 rootfs.tar.gz。 /dev 目录包含 /dev/hda1:

brw-r-----  1 root root  3,   0 Jul  2 13:44 hda
brw-r-----  1 root root  3,   1 Jul  2 13:44 hda1
brw-r-----  1 root root  3,   2 Jul  2 13:44 hda2
brw-r-----  1 root root  3,   3 Jul  2 13:44 hda3
brw-r-----  1 root root  3,   4 Jul  2 13:44 hda4

我在目标上的启动后目录列表(在脚本顶部的 rcS 内完成)如下所示:

brw-r-----   1 root   root    3,   0 Jul  2 12:44 hda
brw-r-----   1 root   root    3,   2 Jul  2 12:44 hda2
brw-r-----   1 root   root    3,   3 Jul  2 12:44 hda3
brw-r-----   1 root   root    3,   4 Jul  2 12:44 hda4

/dev/hda1 丢失。 /dev/hda2 是同一磁盘上的一个分区,但它仍然存在。奇怪的。

如果我运行 Busybox 实用程序“mdev -s”,它会在目标上恢复 /dev/hda1 并且正常工作。例如我可以安装它

以前有人见过这种行为吗?

内核会删除 /dev 中的条目吗?

答案1

子系统在引导时udev创建并安装tmpfs文件系统。/dev当检测到设备时,内容由内核填充。由于tmpfs驻留在虚拟内存中,它不是持久的,因此您的更改在重新启动后不会保留。即使您已经有了/dev,安装新的文件系统也会隐藏该目录,并且看起来您的所有设备特殊信息都已被删除。他们没有,但最终的结果是一样的:特价不是你所期望的。

我怀疑您会发现您的hdahdaX条目已被替换为sdasdaX条目。或者,检查/proc/devices/proc/partitions获取udev分配给驱动器的名称。

有时,像这样的快速而肮脏的解决方案fdisk -l /dev/[sh]d[a-z]会有所帮助(如果每种类型的磁盘少于 26 个,效果会更好)。

顺便说一句,使用的命名方案udev是标准化的,你的静态/dev可能比遵循约定更糟糕。如果udev认为是的话/dev/sda,就这样吧。您可以避免日后潜在的怪异和误解。

相关内容