すべてのカーネルパラメータは実際にカーネルで使用されますか?

すべてのカーネルパラメータは実際にカーネルで使用されますか?

Linuxで「init = / bin / bash」を許可するのはなぜですか?

私はこの記事を読んで、答えはこの初期化プログラムを実行するカーネルであると言います。

その後、Linuxには通常、実際のルートファイルシステムにマウントし、ピボットルートをマウントするinitramfsが含まれていると考え始めました。それでは、このinit主張はどういう意味ですか? initramfsのパス?あるいは、私が推測したように、カーネルが読み取らずに実際のinitを実行するinit initramfsが読み込みます。

また、root=UUID=xxxx実際のルートファイルシステムを見つけるために実際にカーネルから読んでいるのか、それともinitramfsのinitで読んでいるのかについての議論もあります。

私が望むすべてのパラメータをカーネルパラメータとして渡すことができるようです。それでは、カーネルパラメータはすべて読み込まれますか、それとも少なくとも一部はユーザースペースプログラムにのみ意味がありますか?

ベストアンサー1

カーネルコマンドラインに渡された引数は、カーネルに意味がある必要はありません。カーネルパラメータ文書説明する

カーネルはカーネルコマンドラインの引数を「--」に解析します。引数が認識されず、「.」が含まれていない場合、引数はinitに渡されます。 "="を持つ引数はinit環境に移動し、他の引数はコマンドラインパラメータとしてinitに渡されます。 "--"以降の内容はすべてinitにパラメータとして渡されます。

initこれは適用されず、root実際にはカーネルパラメータであり、カーネルによって処理されます。に示すように、ユーザースペースで操作することもできます/proc/cmdline。 (たとえば、systemdはquiet出力を減らすためにカーネルパラメータを考慮します。)

initramfsを使用してカーネルを起動するとき、このパラメータroot使用されるカーネルによって直接呼び出され、init失敗時にのみ使用されます。次から処理を開始rdinitinitkernel_init、動作原理は次のとおりです。

  • rdinitアクセス可能な「ramdisk実行コマンド」(カーネルコマンドラインに指定された値または/init)がある場合、カーネルはコマンドの実行を試みます。
  • 失敗し、「実行コマンド」(カーネルコマンドラインに指定された値init)がある場合、カーネルはそれを実行しようとし、実行できない場合はパニック状態になります。
  • 最後の手段としてカーネルは、 、 、 と が/sbin/init実行/etc/init/bin/init/bin/shなければ実行を試みます。パニック

initramfsがあると、これはすべて起こり、ターゲットボリュームはカーネルによってマウントされません。どうしたの?後ろにカーネルが実行する最初のプログラムinit(通常/initinitramfs のスクリプト) は、カーネルではなくプログラムによって決定されます。ファイルシステムがマウントされている場合は、渡されていない引数を引き続きinit使用できます。/proc/cmdline/proc

おすすめ記事