我对Linux非常陌生,尤其是嵌入式Linux。
我正在一个嵌入式设备上进行一个已经开发的项目,其中根文件系统类型是SquashFS (压缩只读文件系统类型)。
当内核启动时,它如何知道如何查找和挂载根文件系统,特别是当它是SquashFS类型而不是普通的EXT4类型时?提前谢谢。
发布于 2020-05-29 09:54:05
有两种方法可以做到这一点:
root)传递给内核,并且内核必须拥有(内置)所有必需的模块来定位存储设备、标识和挂载启动init的文件系统。您可以指示内核它是哪个文件系统(使用rootfstype),但我不确定这是必需的;initramfs,它是一个小的文件系统映像,粘在内核上(或由引导加载程序引用),在执行switch_root操作后,在实际根文件系统中将控制权传递给实际根文件系统中的init进程之前,在用户地准备和挂载根文件系统;发布于 2020-05-29 11:03:11
有一个概念幻数,您可以参考。
在magic.h头文件中定义的幻数列表
例如,如果您检查磁盘:
sudo file -Ls /dev/mapper/vg-home
/dev/mapper/vg-home: Linux rev 1.0 ext4 filesystem data, UUID=fd8eb0e8-073d-4ae3-810a-87e8af0981d7 (needs journal recovery) (extents) (64bit) (large files) (huge files)file命令根据神奇的数字匹配类型。您可以通过十六进制工具看到这些值:
sudo hexdump /dev/mapper/vg-home -C | grep "53 ef"
00000430 1b da d0 5e 49 00 ff ff 53 ef 01 00 01 00 00 00这里0x53ef是ext4文件系统的神奇数字
适用于squashfs (幻数0x73717368)
sudo hexdump /dev/somedisk -C | head -n 1
0000000 73 71 73 68 00 00 14 7e 01 ea 27 0d 00 01 00 00 |sqsh...~..'.....|https://unix.stackexchange.com/questions/589694
复制相似问题