Mr *_*nky 6 linux devices initramfs linux-kernel
我有一个完全自定义的、最小的、嵌入式 Linux(vanilla、3.3.8、i486、Vortex86dx)系统,它从 initramfs 映像启动。没有使用标准的分发脚本,只有一个用于初始化的 rcS 文件。
我有一个 IDE 闪存盘,在 /dev/hda1 和 /dev/hda2 中有两个分区。
由于这是一个固定系统的最小嵌入式发行版,它有一个包含 /dev/hda1 和 /dev/hda2 的静态 /dev 目录,并且没有 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
Run Code Online (Sandbox Code Playgroud)
我从 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
Run Code Online (Sandbox Code Playgroud)
我在目标上的启动后目录列表(从 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
Run Code Online (Sandbox Code Playgroud)
/dev/hda1 丢失。/dev/hda2 是同一个磁盘上的一个分区,但它仍然存在。奇怪的。
如果我运行 Busybox 实用程序“mdev -s”,它会在目标上恢复 /dev/hda1 并且正常工作。例如我可以安装它
有没有人见过这种行为?
内核是否从 /dev 中删除条目?
子系统在引导时udev
创建并安装tmpfs
文件系统。/dev
当检测到设备时,内容由内核填充。由于tmpfs
驻留在虚拟内存中,它不是持久的,因此您的更改在重新启动后不会保留。即使您/dev
已经有了,安装新的文件系统也会隐藏该目录,并且看起来您的所有设备特殊信息都已被删除。他们没有,但最终的结果是一样的:特价不是你所期望的。
我怀疑您会发现您的hda
和hdaX
条目已被替换为sda
和sdaX
条目。或者,检查/proc/devices
并/proc/partitions
获取udev
分配给驱动器的名称。
有时,像这样的快速而肮脏的解决方案fdisk -l /dev/[sh]d[a-z]
会有所帮助(如果每种类型的磁盘少于 26 个,效果会更好)。
顺便说一句,使用的命名方案udev
是标准化的,你的静态/dev
可能比遵循约定更糟糕。如果udev
认为是的话/dev/sda
,就这样吧。您可以避免日后潜在的怪异和误解。
归档时间: |
|
查看次数: |
976 次 |
最近记录: |