2
Linuxカーネルは、割り当てられたinitramfs / initrdにどのようにアクセスできますか?
電源ボタンを押してからマシン全体の起動プロセスを理解しようとしています。ブートローダーから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がカーネルのカーネルにコピー(コピー?)を読み込んで(linuxcommand)、キックして実行を開始していると推測しています。(2つの異なるステップ-どうやって、どうやって?) このinitrdオプションも表示されます。これは、で指定された実際のルートデバイスを起動するために必要なgzip圧縮されたinitramfsを指しますroot=。しかし、このinitramfsはカーネルにどのように提供されますか?カーネルが起動する前にすでにロードされているため、ロードできる場所にメモリアドレスが渡されることはなく、それ自体にアクセスすることもできません。一部のカーネルのドキュメントでは、このinitramfsファイルシステム「デバイス」にからアクセスできる/dev/ram0と記載されていますが、それがどのようにして最初からアクセス可能なデバイスファイルになるかわかりません。見えない水中で何かが起こっていると思います。 また、これがU-boot / Corebootを使用するなど、組み込みプラットフォームを含む他のブートローダーにどのように関係するかもわかりません。これはGrubと同じことをしていますか(同じ標準メモリアドレス?)、カーネル/ initrdのロードに関してこれらはGrubとどの程度比較されますか? 私の質問を明確にするために、私はさまざまなブートステージが存在する理由とどのような移行が行われるのかを理解していると思いますが、それらがどのように行われるか、および各ステージに対する正確な責任はわかりません。私はこれがすべての「標準」に欠けていると感じています。 これについていくつか説明をいただければ幸いです。