カーネルはどのようにロードされますか?

カーネルはどのようにロードされますか?

私はLinuxブートプロセスを理解しようとしていますが、多くのドキュメントを読んだ後でもまだ理解できないことが1つあります。

デフォルトではBIOS - > Grub MBR - > Grub CONF - >カーネル...

grubconfは次のようになります

title CentOS (2.6.32-358.2.1.el6.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-358.2.1.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-358.2.1.el6.i686.img 

したがって、ドキュメントと私が読んだ投稿の私の理解に基づいて、カーネルはルートファイルシステムとしてinitramfsと共にロードされマウントされます。その後、initが実行され、システムを起動して実行するための一連のさまざまなタスクが実行されます。

私の質問は:カーネルはどのようにロードされますか?

私は、カーネルが/boot/vmlinuz-2.6.32-358.2.1.el6.i686私のデバイス(hd0,0)にあるので、アクセスできるように最初にファイルシステムをマウントする必要があるということです。

(私の考えでは)Grubがhd0,0パーティションをマウントしている場合は、まずinitramfsを使用してPivot_rootを実行し、次にカーネルパラメータで指定された実際のroot = fsを使用して別のPivot_rootを実行しますか?

これらすべてがどのように連携するかをよりよく理解するのに役立つすべての説明/リンクを歓迎します。

ベストアンサー1

Grubには独自のファイルシステムドライバがあります。 Linuxを使用しません。 Grubは、次のコマンドに従ってカーネルとinitrdをメモリにロードします。Linuxカーネルブートプロトコル。カーネルの一部はあらかじめ定義されたアドレスにロードされ、Grubはカーネルが残りの部分を見つけることができる場所を知るようにいくつかのパラメータを設定します。

カーネルが起動したら、独自のドライバを使用してルートパーティションをインストールします(現在のモジュールがないため、ドライバはモジュールにはなりません)。ルートパーティションは次のとおりです。initrdinitramfsまたは(initramfsまたはinitrdがない場合)、rootコマンドライン引数(rootまたは引数がない場合はコンパイルされたデフォルト)で示されるブロックデバイス。

おすすめ記事