Ati*_*liz 6 linux boot kernel root-filesystem
我的内核命令行如下所示:
root=31:0 ro noinitrd console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=squashfs
Run Code Online (Sandbox Code Playgroud)
我认为第一个root
条目通过其主要和次要设备号标识磁盘,第二个条目通过其名称标识它。我可以确认rootfs
确实是 on/dev/mtdblock2
但我不知道如何解释31:0
。
Ale*_*ios 12
当您多次提供相同选项时,不同模块的行为会有所不同。我知道你可以说console=
多次,你会得到多个控制台(我们将它用于在帧缓冲区和串行端口上都有主控制台的机器)。
但是,您只能有一个根分区,因此root=
几乎可以肯定会以从左到右的方式覆盖先前看到的值。内核源代码证实了这一点init/do_mounts.c
,函数root_dev_setup()
负责作用于root=
选项,它所做的只是将参数键存储在变量中。bootparamroot=31:0
被 覆盖root=/dev/mtdblock2
,或者至少在我刚刚检查的 2.6.25 源代码树中是这种情况。
顺便说一句,如果你会C,name_to_dev_t()
同文件中的函数负责解析 的值root=
,很有启发!
该x:y
符号是主要的标准 Unixism:次要,这是 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
Run Code Online (Sandbox Code Playgroud)
第一列标识驱动程序类型(b
用于块,c
用于字符)。左边的两列Jan
是major, minor
格式中的主要和次要数字。
您可以root=
使用主要:次要表示法给出任何与其名称无关的块设备。
设备编号的完整列表位于内核源代码树中的Documentation/devices.txt
. 31:0 似乎指的是 /dev/rom0,系统上的第一个 ROM 卡。