Linux 命令行中的多个 root 选项

Linux 命令行中的多个 root 选项

我的内核命令行如下所示:

root=31:0 ro noinitrd console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=squashfs

我认为第一个root条目通过其主要和次要设备号来标识磁盘,第二个条目通过其名称来标识它。我可以确认 确实rootfs已打开,/dev/mtdblock2但我不知道如何解释31:0

答案1

当您多次提供相同的选项时,不同的模块会有不同的行为。我知道您可以说console=多次,并且您会得到多个控制台(我们将其用于在帧缓冲区和串行端口上都有主控制台的机器)。

但是,您只能有一个根分区,因此root=几乎肯定会覆盖先前看到的值,几乎肯定会以从左到右的方式覆盖。这得到了内核源代码的证实,在 中init/do_mounts.c,函数root_dev_setup()负责对root=选项进行操作,它所做的就是将参数 key 存储在变量中。 bootparamroot=31:0被 覆盖root=/dev/mtdblock2,或者至少在我刚刚检查的 2.6.25 源代码树中是这样的。

顺便说一句,如果你精通 C,name_to_dev_t()同一个文件中的函数负责解析 的值root=,非常有启发性!

x:y表示法是标准 Unixism 的“major:minor”,这是 Unices 识别设备的方式。传统上,主要的是一个 8 位数字,标识硬件的驱动程序,并且次要的是一个识别设备本身的 8 位数字。数字有两个命名空间major:字符设备和块设备。您可以通过键入来查看这两个内容cat /proc/devices,并且可以通过说来查看当前活动的内容ls -la /dev。这是一个例子:

ls -la /dev/zero /dev/sda
brw-rw---- 1 root disk 8, 0 Jan 12 22:01 /dev/sda
crw-rw-rw- 1 root root 1, 5 Jan 12 22:01 /dev/zero

第一列标识驱动程序类型(b对于块、c对于字符)。左侧的两列Jan是格式中的主要数字和次要数字major, minor

您可以root=使用major:minor 表示法为任何块设备提供独立于其名称的名称。

设备号的完整列表位于内核源代码树中的 下Documentation/devices.txt。 31:0 似乎指的是 /dev/rom0,系统上的第一个 ROM 卡。

答案2

使用标签 ( root=LABEL=...) 以标签而不是设备名称挂载文件系统。

http://www.ibm.com/developerworks/linux/library/l-boot-rootfs/index.html

相关内容