-
06-07-2019 - |
質問
カーネルがブートローダーから取得する必要があるものはありますか? このようなカーネルからのブートメッセージを見ました。
"Fetching vars from bootloader... OK"
では、渡される変数は 正確に 何ですか? また、変数はブートローダーからどのように渡されますか?スタック経由ですか?
解決
カーネルは、テキストベースのいわゆるコマンドラインオプションを受け入れます。これは非常に便利です。カーネルを再コンパイルしなくても多くのことができるからです。引数の引き渡しに関しては、アーキテクチャに依存します。 ARMでは、メモリ内の場所へのポインタ、またはメモリ内の固定された場所を介して行われます。
ARM での方法を次に示します。 通常、カーネルは最初からマシンを起動することはできません。 BIOSからの場合もありますが、ゼロからではありません。初期化が必要です。これはブートローダーの仕事です。
他のヒント
Linuxカーネルがブートローダーから受け入れるパラメータがいくつかありますが、今覚えているのは vga
パラメータです。例:
kernel /vmlinuz-2.6.30 root=/dev/disk/by-uuid/3999cb7d-8e1e-4daf-9cce-3f49a02b00f2 ro vga=0x318
Linuxカーネルについて知っておくべき10のブート時パラメーター。一般的なパラメーターの一部を説明しています。
Linuxカーネルの場合、ブートローダーがカーネルに通知しなければならないことがいくつかあります。カーネルコマンドライン(既に述べた他のいくつかの人々)のようなものが含まれています。メモリ内の initrd が読み込まれ、initrdが使用されている場合はそのサイズ(カーネルはそれ自体を読み込むことができません。多くの場合、initrdを使用する場合、ストレージデバイスにアクセスするために必要なモジュールはinitrd内にあり、ストレージにアクセスする前の非常に複雑な設定)、およびいくつかのさまざまなオッズと終了。
Documentation / x86 / boot.txt (2.6.30のバージョンへのリンク)従来のx86アーキテクチャ(32ビットと64ビットの両方)の詳細については、これらの変数がカーネルセットアップコードに渡される方法を含めて。
ブートローダーは、スタックを使用して引数をカーネルに渡しません。少なくともLinuxの場合、カーネルが解析方法を知っているため、ブートローダーが埋めるかなり複雑なメモリ構造があります。これは、ブートローダーがカーネルをコマンドラインに向ける方法です。 Documentaion / x86 / boot.txt 詳細情報。
Linuxはブートローダーから変数を受け取り、特定のオプションを使用できるようにします。できることの1つは、ログインする必要がないようにすることです(回復モード)。他にもいくつかのオプションがあります。主に、何かに問題がある場合、またはパスワードを変更する場合に修正を行うことができます。これは、別のオプションを使用することを選択した場合、Ubuntu Live-CDがLinuxをブートする方法です。
通常、コマンドラインパラメーターと呼ばれるパラメーターは、ブートローダーからカーネルモジュールに渡されます。ブートローダーはBIOS割り込みの多くを使用して検出します。
memory
HDD
Processor
Keyboard
Screen
Mouse
ETC...
およびすべてのハーウェアの詳細は、ブート時に検出されます。つまり、リアルモードで、このパラメーターをカーネルに渡します。