PS3はどのようにしてLinuxカーネルを起動しているのだろうか。
PS3でLinuxが起動するまで
CDからLinuxをブートする仕組みを作るためには、PS3においてLinuxがどういった手順で起動していくのかを知る必要がある。
Linuxの起動というと、initの実行でrcスクリプトが起動されていく部分を解説している記事を目にすることがある。ここではそのinitの部分ではなくそれよりも前の段階、電源投入からinitが実行される直前までを解説していく。
GameOSのXMBメニューにて起動設定を[その他のシステム]に設定した後、PS3の電源を入れ直すとGameOSではなくLinuxの起動モードへと突入していく。この時の起動フローを図で示す。
PS3でLinuxが起動するまでのフロー |
起動設定が「その他のシステム」に設定された状態で電源を投入すると、PS3の起動システムはフラッシュメモリにインストールしたブートローダプログラムotheros.bldを実行する。このブートローダはkbootとも呼ばれる。
ブートローダの役割は主に2つあって、1つがHDDなどにインストールされているLinuxシステムを起動すること。もう1つがLinuxディストリビューションをインストールすることである。kbootの詳細については後ほど解説する。
なおインストールについてはディストリビューションによって異なり、インストール作業にkboot内のスクリプトを利用しないディストリビューションも存在する。例えばDebian GNU/Linuxなどがそれに当たる。
ブートローダはHDDにインストールされているLinuxカーネルとinitrd(後述)を読み込み、それらを実行する。
PS3のブートシステムで特別なのはこのブートローダの仕組みと起動までで、Linuxカーネルの起動とinitrdの実行から先は、PCにおけるLinuxシステムの起動シークェンスと差違はない。
今回はCDブートシステムの作成を目標としているが、そのためにはこのinitrdの部分が重要であり、initrdをどう作成するかが作業の中心となっていく。