私のカーネルコマンドラインは次のとおりです。
root=31:0 ro noinitrd console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=squashfs
最初のroot
エントリはメジャーとマイナーのデバイス番号でディスクを識別し、2番目のエントリは名前でディスクを識別します。rootfs
実際にオンになっていることは確認できますが、どのように/dev/mtdblock2
説明するのかわかりません31:0
。
答え1
同じオプションを複数回提供すると、さまざまなモジュールが異なる動作をします。この言葉を数回すると、複数のコンソールが得られることがわかりますconsole=
(私たちはフレームバッファとシリアルポートの両方にメインコンソールがあるシステムにこれを使用します)。
ただし、ルートパーティションは1つしか持つことができないため、root=
以前に見た値はほぼ確実に左から右に上書きされます。init/do_mounts.c
これは、関数がオプションのroot_dev_setup()
処理を担当し、パラメータキーを変数に格納するカーネルソースコードによって識別されます。root=
bootparam がroot=31:0
上書きされたか、root=/dev/mtdblock2
少なくとも 2.6.25 ソースツリーにチェックされています。
ちなみに、Cに精通している場合、name_to_dev_t()
値を解析する同じファイルの関数はroot=
非常に有益です!
表記法x:y
は、Unicesがデバイスを識別する方法である標準のUnixism「major:minor」です。伝統的に、基本ハードウェアドライバを識別する8桁の数字。未成年者デバイス自体を識別する8桁の数字。数字には、major
文字デバイスとブロックデバイスという2つの名前空間があります。と入力して両方を見ることができます。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
文字の場合)を識別します。左側の2つの列は、Jan
形式のメジャーとマイナーの数字ですmajor, minor
。
root=
major:minor表記を使用して、名前に関係なくすべてのブロックデバイスに名前を付けることができます。
デバイス番号の完全なリストはカーネルソースツリーの下にありますDocumentation/devices.txt
。 31:0は、システムの最初のROMカードである/ dev / rom0を参照しているようです。
答え2
root=LABEL=...
デバイス名の代わりにラベルを使用してファイルシステムをマウントするには、labels()を使用します。
http://www.ibm.com/developerworks/linux/library/l-boot-rootfs/index.html