PS3 Linux カスタム kboot を作る

ハイレゾ対応版kbootを作ります。
前回外付け USB HDD からの起動で、インストールされている kboot (otheros.bld)
の違いで少々はまりました。
また Linux のブートローダーである kboot は常に 480i で起動します。
kboot.conf に書いておけば kboot から呼ばれたカーネルは任意の画面モード
で起動しますが、その選択画面である kboot: コマンドラインはいつも 480i です。

これ、PCモニタなど 480i で表示ができない環境を使っていると結構困ります。

・Linux インストールのためだけに TV が要る
・起動ドライブや起動するディストリビューションの選択ができない

なので自前の kboot を作ってみることにしました。

rpm のインストールが必要なので、今回は build 環境として Fedora Core 5 を
使います。

(1) ppu-gcc の install

kboot の build に必要なので ppu-gcc をインストールします。
PS3 の Cell 開発環境を入れてみる」で入れた spu-gcc と要領は同じです。

http://www.bsc.es/plantillaH.php?cat_id=252
まずこちらから ppu-gcc 一式をダウンロードします。
PowerPC(ppc) 上で動作する ppu 向けのバイナリパッケージを選択します。

ppu-binutils-3.3-72.ppc.rpm
ppu-gcc-3.3-72.ppc.rpm
ppu-gcc-c++-3.3-72.ppc.rpm
ppu-gdb-3.3-72.ppc.rpm

上記パッケージを必ずこの順番でインストールします。

 # rpm -ihv ppu-binutils-3.3-72.ppc.rpm
 # rpm -ihv ppu-gcc-3.3-72.ppc.rpm
 # rpm -ihv ppu-gcc-c++-3.3-72.ppc.rpm
 # rpm -ihv ppu-gdb-3.3-72.ppc.rpm

(2) kboot のソースの準備

kboot のソースはいつもの ADDON CD に含まれています。
FC5 のインストールに使ったやつです。
ftp://ftp.uk.linux.org/pub/linux/Sony-PS3/
CELL-Linux-CL_20061208-ADDON.iso

この中の \src から kboot-20061208.tar.bz2 を任意のフォルダにコピーします。

PS3 Linux は何度も再起動したりしてるので、最近は Windows PC から putty
経由でアクセスして作業しています。なのでファイルもいつも Windows で
落としてから samba で PS3 にコピーしています。
(PS3 Linux をサーバーにしてみる)

(3) kboot (otheros.bld) の build

展開して build してみます。

 # tar -jxvf kboot-20061208.tar.bz2
 # cd kboot-20061208
 # make

HDD があふれました・・。Linux 用に 10G しか割り当てておらず、
しかも FC5 をフルインストールしたので空きが足りなかったようです。
外付けの HDD ドライブ上にソースを移してもう一度 make します。

カーネルごとコンパイルなのでかなり時間がかかりますが、
今度は特に問題も無くコンパイルが通りました。

ぽちネット さんの こちら の記事によると、kboot-10/linux が
otheros.bld そのものだそうです。参考にさせていただきました。

kboot の root イメージは kboot-10/root に入っています。
kboot 時に実行されるスクリプト init は、kboot-10/scripts/kboot にありました。

(4) kboot のカスタマイズテスト

まず YDL 版 kboot のように、kboot: 上でも ps3videomode を使えるようにします。
そもそも kboot には ps3pf_util が含まれていて、kboot-10/ps3pf_utils-1.0.1
の中にはちゃんと ps3videomode もできています。

これを root にコピーするように手を加えます。
コピーしているのは Makefile の中です。

 # vi kboot-10/Makefile

  □1556行目、boot-game-os の後ろに ps3videomode も付け加えます。

      cp $(PS3PF_UTILS_DIR)/{find-other-os-flash,other-os-flash-util,boot-game-os} $(PWD)/root/sbin

         ↓

      cp $(PS3PF_UTILS_DIR)/{find-other-os-flash,other-os-flash-util,boot-game-os,ps3videomode} $(PWD)/root/sbin

  □512行目にも boot-game-os があるので、同じように ps3videomode を加えます。

    ”$$FILE” = “root/sbin/boot-game-os” -o \
    ”$$FILE” = “root/sbin/ps3videomode” -o \

root-meta/installed からから 0byte のファイル ps3pf_utils を消します。

 # rm kboot-10/root-meta/installed/ps3pf_utils

scripts/kboot に ps3videomode の呼び出しを追加してみます。
これで「PS3 Linux で kboot をハイレゾにする」に書いたように、
いちいち kboot.conf に ps3videomode の起動を書かなくてすみます。

 # vi kboot-10/scripts/kboot

  □87行目あたり、PATH の設定のあとに追加してみる

    ps3videomode -v 3

  (ここでの設定は 3 = 720p なので、TV 等 480i の方はこの行を追加しないで
  ください)

これでもう一度 make します。

 # make

できたら otheros.bld に変換します。(gzip してリネームするだけ)

 # cp kboot-10/linux .
 # gzip -9 linux
 # mv linux.gz otheros.bld

これで自分だけの kboot (otheros.bld) ができました。

(5) otheros.bld の install テスト

正規の手順で otheros.bld をインストールするのは結構面倒です。

USB メモリや SD カードなどに書き込んでから、一旦 GAME-OS に戻って
メニューから実行する必要があります。
しかもいちいちコントローラを USB の有線接続しなければなりません。

前回「PS3 の Debian で ps3ps_util を」で Linux (Debian) 上から
ブートローダの書き込みを試しましたが見事に失敗しました。
でもせっかくだからもう一度挑戦します。今度は FC5 上からやります。

先に /sbin/find-other-os-flash を実行して、必ず /dev/sdb と表示されることを
確認してください。

 # /sbin/find-other-os-flash

ここで何も表示されなければドライバがきちんと読み込まれていない可能性があります。

書き込みの実行はこんな感じです。

 # /sbin/other-os-flash-util -b -g /dev/sdb otheros.bld

うまくいったら reboot してみます。

(6) とりあえず成功

今回は Linux 上からのブートローダーの書き込みがうまくいきました。
kboot: が表示される直前に、きちんと 720p になっています。
またこれでこれでいちいち otheros.bld の書き込みのために
GAME-OS に戻る必要がなくなりました。

もちろん試す場合は自己責任でお願いします。

もし otheros.bld の書き込みに失敗した場合、起動できなくなった場合は
次の手順に従ってください。

1. 電源も切れず何もできなくなったら、本体裏の電源スイッチを切る
2. 30秒以上待ってから本体後ろの電源スイッチを入れる
3. 前面にあるドライブの前の電源ボタンを、7秒くらい押しっぱなしにして
   電源を入れる。(音がするので指を離すタイミングがわかる)

これで強制的に GAME-OS で起動します。このとき画面モードは 480i になります。

GAME-OS 上で正常に動作する方の otheros.bld を入れなおしてください。

今回作った otheros.bld のスペックはこんな感じです。

 ・動作は FC5 版 (ADDON CD版) と同じで、常に sda1 の kboot.conf を読み込む
  (YDL 版のように全ドライブの kboot.conf をマージしない)

 ・基本的に FC5 版 (ADDON CD版) と同じ。install-fc コマンドも入ってる。

 ・YDL 版の kexec のように ps3videomode が含まれているので、kboot:
  プロンプトやそこから shell に降りた状態で画面モードを切り替えられる。

 ・ついでに起動時に勝手に好きな画面モードにしてしまう。

これで 480i 表示できない環境でも、FC5、Debian、YDL 等を kboot で選択して
切り替え起動できるようになりました。
画面モード設定はもう少し融通が利くように改善したいところです。