電源ボタンを押してからマシン全体の起動プロセスを理解しようとしています。ブートローダーからinitramfsステージに至るまで、これは私が他のいくつかの小さなビットの中でまったく理解していない部分があります。
最近のUbuntuのデフォルトインストールから取得した、エントリのこのGrub構成を考えると、次のようになります。
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 96fb7310-5adb-4f66-bf59-04acd08d76a3
echo 'Loading Linux x.y.z ...'
linux /vmlinuz-x.y.z root=/dev/mapper/some-device-name ro nomodeset
echo 'Loading initial ramdisk ...'
initrd /initrd.img-x.y.z
システム状態とメモリの観点から、これは実際に何をしますか?Grubのタスクは「カーネルをロードして実行する」ことであり、デバイス(またはネットワーク)上のファイルにアクセスしてそれらにアクセスするための独自のモジュールセットがあることを理解しています。ここinsmod
の例では、set root
そしてsearch
-これは単にGrubの観点からであり、カーネルと共有されていませんよね?
また、Grubがカーネルのカーネルにコピー(コピー?)を読み込んで(linux
command)、キックして実行を開始していると推測しています。(2つの異なるステップ-どうやって、どうやって?)
このinitrd
オプションも表示されます。これは、で指定された実際のルートデバイスを起動するために必要なgzip圧縮されたinitramfsを指しますroot=
。しかし、このinitramfsはカーネルにどのように提供されますか?カーネルが起動する前にすでにロードされているため、ロードできる場所にメモリアドレスが渡されることはなく、それ自体にアクセスすることもできません。一部のカーネルのドキュメントでは、このinitramfsファイルシステム「デバイス」にからアクセスできる/dev/ram0
と記載されていますが、それがどのようにして最初からアクセス可能なデバイスファイルになるかわかりません。見えない水中で何かが起こっていると思います。
また、これがU-boot / Corebootを使用するなど、組み込みプラットフォームを含む他のブートローダーにどのように関係するかもわかりません。これはGrubと同じことをしていますか(同じ標準メモリアドレス?)、カーネル/ initrdのロードに関してこれらはGrubとどの程度比較されますか?
私の質問を明確にするために、私はさまざまなブートステージが存在する理由とどのような移行が行われるのかを理解していると思いますが、それらがどのように行われるか、および各ステージに対する正確な責任はわかりません。私はこれがすべての「標準」に欠けていると感じています。
これについていくつか説明をいただければ幸いです。
boot
シーケンスの最後にある暗黙のコマンドに注意してください。私はそれがGrubで何をするか正確にはわかりませんが、Grubコマンドラインを使用してこれらのコマンドを手動で入力する場合、あなたはそうする必要があります、boot
またはそれは永遠にgrub>
(または少なくとも、退屈してコンピューターの電源を切るまで) )。上記のコマンドは「単に」環境をセットアップします。