Linux 命令行中的多個 root 選項
我的核心命令行如下所示:
root=31:0 ro noinitrd console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=squashfs
我認為第一個
root
條目通過其主要和次要設備號標識磁碟,第二個條目通過其名稱標識它。我可以確認rootfs
確實打開了,/dev/mtdblock2
但我不知道如何解釋31:0
。
當您多次提供相同的選項時,不同的模組的行為會有所不同。我知道你可以說
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
標準 Unix 主義:次要,這是 Unices 辨識設備的方式。傳統上,major是標識硬體驅動程序的 8 位數字,minor是標識設備本身的 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 卡。