web-dev-qa-db-ja.com

Linuxコマンドラインの複数のルートオプション

私のカーネルコマンドラインは次のようになります。

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

最初のrootエントリは、メジャーデバイス番号とマイナーデバイス番号でディスクを識別し、2番目のエントリは名前でディスクを識別していると思います。 rootfsが実際に/dev/mtdblock2にあることは確認できますが、31:0の解釈方法がわかりません。

6
Atilla Filiz

同じオプションを複数回指定すると、モジュールごとに動作が異なります。 _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_表記は、メジャー:マイナーの標準的なUnixismであり、Unicesがデバイスを識別する方法です。従来、メジャーはハードウェアのドライバーを識別する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)。 Janの左側の2つの列は、_major, minor_形式のメジャー番号とマイナー番号です。

Major:minor表記を使用して、名前に関係なく任意のブロックデバイスを_root=_に指定できます。

デバイス番号の完全なリストは、カーネルソースツリーの_Documentation/devices.txt_の下にあります。 31:0は、システムの最初のROMカードである/ dev/rom0を参照しているようです。

12
Alexios

ラベルを使用する(root=LABEL=...)デバイス名の代わりにラベルを使用してファイルシステムをマウントします。

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

1
laurent