たとえば、カーネルが理解できないパラメータをカーネルに渡すとします。blabla
あるいは、eat=cake
カーネルがこれらの未知のパラメータをどのように処理するかについての伝統的なケースは、init
Linuxカーネルが初期ユーザーとして起動したときに未知のパラメータをに渡すことです。 space(initramfs)initramfsに渡されます/init
か?
答え1
~からカーネル文書:
カーネルはカーネルコマンドラインから引数を解析します
--
。引数が認識されず、aが含まれていない場合、.
引数はinitに渡されます。引数は=
initの環境に入り、他の引数はコマンドライン引数としてinitに渡されます。それ以降の内容はすべて--
initにパラメータとして渡されます。
これは/init
initramfs にも当てはまります。ソースコードでは、initramfs/init
と最終ルート/sbin/init
(または他の場所)の両方が次のように呼び出されます。run_init_process
同じ引数を使用します(実行ファイルへのパスである引数0を除く)。マニュアルで指示が見つかりませんが、カーネルインタフェースが安定しているため変更されません。
これは/linuxrc
initrdでは機能しません。この関数はパラメータなしで呼び出されますが、/init
同じ環境を使用します/sbin/init
。 procファイルシステムをマウントし、/proc/cmdline
カーネルコマンドライン引数を読み取るために読み取ることができます。