PS3 Linux」カテゴリーアーカイブ

PS3 の HDD バックアップ方法の実験

PS3 に Linux を入れる場合、必要になるのが HDD のパーティションを切ることです。
このとき HDD 内のゲームデータが消えてしまわないようにバックアップを取る
ことができます。

60GB クラスのバックアップが可能な USB 機器といえば外付けのハードディスク
くらいしか思い浮かびません。で、一番身近にあって意外に大容量なのが iPod 等の
HDD 系音楽プレイヤーだったりします。

早速試してみました

● iPod (80GB)

 http://www.apple.com/jp/ipod/ipod.html

 USB 接続で認識できました。
 PS3 のバックアップユーティリティでバックアップ&リストアも成功。

 FAT32 の制約上 4GB を超えるファイルは作れないので、バックアップデータ
 が巨大になると分割格納されるようです。
 今回のバックアップ容量は約 5GB だったので、おそよ 4G で分割されていました。

 ここの GAME Watch の記事には
  http://www.watch.impress.co.jp/game/docs/20061121/ggl.htm
  >>ファイルシステムの制限として、FATは4GB、FAT32は32GBまでしかPS3上でも
  >>認識しない。

 とありますがそんなことはないようです。
 80GB かつ FAT32 の iPod はきちんと認識されました。

 単に Windows2000/XP/Vista 標準のフォーマッタでは、32GB 以上の FAT32
 パーティションを作れないだけのようです。
 http://support.microsoft.com/kb/184006/ja
 (16KB のクラスタサイズまでしか対応してないのかもしれません)

 市販のフォーマットユーティリティを使えば 32GB 以上でも FAT32 でフォーマット
 できるのだそうです。また Linux のコマンドでもフォーマットできるみたいです。

● gigabeat S30 (30GB)

 http://www.gigabeat.net/mobileav/audio/manual/s-series/index_j.htm

 接続したところ、PS3 側で「不明なUSB機器が接続されました」と表示されて
 しまいます。
 もともとマスストレージモードが無くて Windows につないだ場合でも
 WindowsCE の ActiveSync みたいな認識のされ方でした。
 やはり Windows 以外での接続はむりみたいです。残念。

● GIGABEAT (5GB)

 http://www.toshiba.co.jp/about/press/2002_06/pr_j1701.htm

 こっちの古い GIGABEAT は使えました。
 容量が小さいけど、収まる容量ならバックアップも OK でした。
 時間がかかったのでリストアは未確認です。

●外付け HDD (80GB)

 USB の外付けの 3.5 インチ HDD を、Linux 上のコマンドを使って FAT32 で
 フォーマットしてみます。容量は 80GB です。
 作業は PS3 の Fedora Core 5 上で行いました。

 HDD 上のパーティションはあらかじめ Windows 上で全部削除しておきました。

 ※以下 USB の HDD が /dev/sdf で認識されていると仮定します。
 ※フォーマットなので中のデータは消えますのでご注意ください。
 ※表示される細かい数値は HDD によって異なります。

 (1) パーティション作成

  # /sbin/fdisk /dev/sdf

   ■パーティションテーブルが空っぽなのを確認
   Command (m for help): p [Enter]

   ■パーティション作成
   Command (m for help): n [Enter]

   p [Enter]

   Partition number (1-4): 1 [Enter]

   First cylinder (1-9729, default 1): [Enter]

   Last cylinder or +size or +sizeM or +sizeK (1-9729,default 9729): [Enter]

   ■タイプ変更 (W95 FAT32 に変更)
   Command (m for help): t [Enter]

   Hex code (type L to list codes): b [Enter]

   ■確認
   Command (m for help): p [Enter]

     Device Boot Start End  Blocks  Id System
     /dev/sdf1  1   9729  78148161 b W95 FAT32

   ■書き込み&終了
   Command (m for help): w [Enter]

 (2) フォーマット

  # /sbin/mkfs.vfat /dev/sdf1

 (3) 完了

  # /sbin/boot-game-os

 GAME-OS に戻って確認してみます。

 しっかりと認識されているようです。「USB機器(A)」
 空き容量は「74 GB」と表示されました。

 実際に バックアップユーティリティ でバックアップしてみました。
 リストアできちんと復元できています。成功です。

 だけど、そもそも Linux を入れるためのバックアップ手段だったので、
 これからはじめようとしてる人には微妙に本末転倒な感じがします。

 結局 60GB まるまる HDD を使ってる場合、GAME のインストールデータとか消して
 32GB 未満に収まるように整理するのが現実的かもしれません・・。

●リストアの注意

もう PS3 に何回 Linux の install を行ったのかわからないくらいなのですが、
過去に一度だけ、バックアップユーティリティのリストアが失敗したことが
あります。

http://donya.jp/everg/7.1/4547479510686/
こんな感じの IDE USB 変換ケーブルを使って HDD を直結しているので、
もしかしたらリストア中にケーブルに触ってしまったのかもしれません。

リストア中に致命的なエラーで終了すると、そのあとに HDDの再フォーマット
が入ります。この強制フォーマットはなんと内蔵 HDD を丸ごと消してくれます。

つまり他のシステムのためのパーティション分割を無視して、全体を GAME に
割り当てる設定に戻ってしまいます。そのためリストアの失敗によって他の
システム用の Linux 領域も消えてしまうこともありえますので十分注意してください。

今回何度もリストア実験したのですが、この貴重な経験をすっかり忘れてました。
あぶない あぶない。

ちなみに以前エラーになったときは、パーティション分割直後だったので
ダメージはありませんでした。もう一度実行したらリストアも成功しました。

PS3 やっぱり Debian 再インストールメモ

Debian Live CD のインストーラが新しくなっているらしいので、
もう一度外付けの HDD に install しなおしてみました。(3度目!)
問題も直ってて良い感じです。

●想定しているインストール前の状態

・本体 HDD にはすでに Fedora Core 5 が入っています。
・USBのアダプタ経由で IDE HDD をつないでそこにインストールします。
・すでに Debian の Live CD (20070110版) が起動することを確認している

Debian Live CD の起動については
PS3 Linux Debianの Live CD が来た!」を参考にしてください。

前に Debian をインストールしたときにメモはこちら
PS3 Linux debian installメモ」です。

●インストール

(1) Debian Live CD (20070110) を挿入した状態で起動します。

kboot: というプロンプトが出たら「 install 」と入力します。

 kboot: install [Enter]

インストール中は画面モードがデフォルト(480i)になります。
TV 画面でもインストール可能です。

(2) 画面のメッセージに従ってインストール

インストーラは全部日本語で表示できるので簡単です。
最初の言語選択で「日本語」を選んでください。

インストーラは カーソルキーや [TAB] で選択します。
カーソルキーだけでは移動できない項目には [TAB] キーを使うので注意です。

 ★設定手順メモ
 ・インストーラの言語  日本語
 ・キーボード  日本(106キー)
 ・ホスト名入力
 ・ドメイン(無し、空欄)
 ・ミラー、日本
 ・アーカイブミラー、デフォルト(一番上)
 ・プロキシ無し、空欄
 ・パーテショナー
   ガイドのディスク全体を使うが簡単
   今回は外付け HDD にインストールするので sda ではなく sdf を選ぶ。
     sda = PS3 内蔵 HDD
     sdf = USB ポートにつないだ HDD

   「NewWorldブートパーティションは見つかりませんでした。~」
   が出たら「いいえ」

   「PowerPC PReP パーティションが見つかりませんでした。~」
   が出たら「いいえ」

 ・rootパスワード入力
 ・ユーザー名入力
 ・ユーザー用パスワード入力
 ・インストールカーネル選択 (1つしかないのでそれを選ぶ)
 ・インストールするソフトコレクションの選択
  今回はこれだけ選んだ (最初からデスクトップを入れてみる)
   * デスクトップ環境
   * ウェブサーバー
   * ファイルサーバー
   * 標準システム
 ・Samba のワークグループ Windowsに合わせる。任意
 ・WINS のための dhcp 設定書き換え はい
 ・X の解像度選択、どうせあとで変えるので適当
 ・インストール完了 再起動

手順を確実にするために、再起動ではなく一度ここで電源を切ります。

●起動の準備

(3) いちど電源切断する

 ・内蔵 HDD にも Linux (FC5等) が入っている場合はパーティションのラベルが
  競合するので初回の起動に失敗します。

 ・また、CD が入ったままだと CD 上の Live 版 Debian が起動してしまいます。

 なのでいったん電源を切って、外付けの USB HDD をはずしておきます。
 また CD も取り出したことを確認してから再び起動してください。

 もし内蔵 HDD にも特に Linux が入っていない場合や、内蔵 HDD そのものに
 Debian をインストールした場合は問題なく起動できますので
 (4)~(6) の手順はスキップしてください。

(4) いったん内蔵 HDD の FC5 を起動する

 外付け HDD を外して、さらに CD もとりだした状態で FC5 を通常起動します。

 ◎もし内蔵 HDD に FC5 等の Linux が入っていない場合はこの手順は
  必要ありませんので (7) に進んでください。

 ◎これは Dual Boot 環境にして、起動時に好きなディストリビューションを
  選択できるようにするための手順です。

   なぜ競合するかというと、内蔵 HDD の /dev/sda1 等にはすでに「/」という
   ラベルがついているのに、Debian をインストールしたパーティションにも
   同じ「/」ラベルがついてしまうからです。

   ※ちなみに YDL のインストーラは、HDD のラベルが競合しないように「/1」
    のように数値を追加してくれます。

   そのため /dev/sda1 の kboot.conf を読み込みつつ、root が /dev/sdf1
   という混乱がおきてしまいます。

 FC5 が起動したら、以後の作業のために root でログインしておきます。

(5) HDD のラベル書き換え

ここで外しておいた USB の HDD を取り付けてください。

認識には時間がかかるので 15 秒以上待ちます。
認識できたらコンソールにシステムのメッセージが出ます。

まず HDD のラベルを書き換えます。
以後 Debian の / が /dev/sdf1 にインストールされていると想定します。

 # /sbin/e2label /dev/sdf1 /2

YDL のインストーラに倣って、ラベルを「/2」に書き換えておきます。

(6) kboot.conf に Debian の起動設定を加える

次に Debian が起動できるように FC5 上で /etc/kboot.conf をこんな感じに
書き換えます。
(変数を使った kboot.conf のラベル設定は Debian Live CD を真似ました)

 # vi /etc/kboot.conf

default=fc5
timeout=30
root=LABEL=/

# fc5 (sda)
fc5=’/dev/sda1:/boot/vmlinux-2.6.16 initrd=/dev/sda1:/boot/initrd.img root=LABEL=/ ‘
fc5480i=”$fc5 video=ps3fb:mode:1″
fc5480if=”$fc5 video=ps3fb:mode:129″
fc5720p=”$fc5 video=ps3fb:mode:3″
fc5720pf=”$fc5 video=ps3fb:mode:131″
fc51080p=”$fc5 video=ps3fb:mode:5″

# debian (sdf)
debian=’/dev/sdf1:/boot/vmlinux initrd=/dev/sdf1:/boot/initrd.img root=LABEL=/2 ‘
debian480i=”$debian video=ps3fb:mode:1″
debian480if=”$debian video=ps3fb:mode:129″
debian720p=”$debian video=ps3fb:mode:3″
debian720pf=”$debian video=ps3fb:mode:131″
debian1080p=”$debian video=ps3fb:mode:5″

これで起動時に何もしなければ内蔵 HDD 上の Fedora Core 5 が起動します。
また、kboot: のコマンド行で次のコマンドを入力することによって好きな
画面モード& Debian の起動ができるようになります。

  fc5     Fedora Core 5 画面モード自動 (480i)
  fc5480i   480i オーバースキャン対応 TV 向け
  fc5480if  480i フルスクリーン
  fc5720p   720p オーバースキャン対応
  fc5720pf  720p フルスクリーン
  fc51080p  1080p

  debian   Debian 画面モード自動 (480i)
  debian480i
  debian480if
  debian720p
  debian720pf
  debian1080p

書き換えたら FC5 は終了して今度こそ Debian を起動します。

 # reboot

再起動後にまた kboot: 画面が現れたら、今度は「 debian 」と入力して下さい。
外付け HDD 側の Debian が起動します。

また、好きな画面モードを指定して「 debain1080p 」のように入力しても構いません。

※もし kboot.conf の書き換えに失敗して、fc5 とか debian と書いても起動し
 なくなったら

  kboot: の画面で直接カーネルを指定して起動できます。なので kboot.conf の
  記述にミスがあっても問題なく起動することができます。安心してください。

  例えば (ちょっと長いけど) こんな感じに書いて実行すれば、内蔵 HDD の
  FC5 が起動するはずです。

   kboot: /boot/vmlinux-2.6.16 initrd=/boot/initrd.img root=LABEL=/ [Enter]

●起動後の設定

(7) Debian 起動と X 設定

前回外付けドライブに install したときは、実は Fedora Core 5 の
パーティションのカーネルとイメージを流用していました。
そうしないと root に mount するドライブが /dev/sdd に割り当てられていて
起動時にエラーで止まってしまっていたからです。

今回の新しいインストーラではきちんと sdf 側のカーネル呼び出しで難なく起動
できました。

なお、せっかく起動したのですが、最初いきなり画面が出ずにエラーになります。

これは、インストール時に「デスクトップ環境」を入れたので gdm が起動
しようとしているのですが、xorg.conf の設定が済んでいないために
呼び出しているドライバが合わないからです。

しばらく待つとエラーが出てコンソールに戻りますが、CTRL + ALT + F1 を押して
直接コンソールに切り替えても良いです。

まず xorg の足りないファイルをインストールします。

 # apt-get update
 # apt-get install xserver-xorg-video-fbdev
 # apt-get install xserver-xorg-input-mouse
 # apt-get install xserver-xorg-input-kbd

次に xorg.conf を書き換えます。
Debian Live CD の X が 720p full 意外でもきちんと動いていたのでそれを
参考にします。

 # cd /etc/X11
 # mv xorg.conf xorg.conf-backup
 # cp xorg.conf-backup xorg.conf
 # vi xorg.conf

 ◎68行目あたり、Section “Device” の中を次のように変更します。

Identifier “Generic Video Card”
Driver “apm”
Option “UseFBDev” “true”

  ↓

Identifier “Generic Video Card”
Driver “fbdev”
Option “ShadowFB” “false”
Option “UseFBDev” “true”

  ・Driver の “apm” を “fbdev” に変更
  ・Option “ShadowFB” “false” を追加

 ◎86行目あたりの Section “Screen” の中に次の行を追加します。

DefaultFbBpp 32

これで X が起動できるようになります。
可能な人は Live CD の /etc/X11/xorg.conf をコピーしてきても OK です。

あらためて gdm を立ち上げます。

 # /etc/init.d/gdm restart

無事デスクトップ環境が使えるようになりました。

「 Option “ShadowFB” “false” 」が無いと、ps3videomode で fullscreen を
選択しないと同期が崩れたような画面になりきちんと表示されません。
これが原因だったんですね。
Fedora Core 6 でも同じような問題があるそうなので、もしかしてこれで直る
のかもしれません。
・「FC6の罠

(8) ps3pf_utils の install

 「PS3 の Debian で ps3ps_util を」では自前で作りましたが、
 何のことは無い、きちんとパッケージが用意されていました。(知らなかった)

 sources.list の先頭に書かれている http://ps3.keshi.org/debian のエントリを
 有効にします。

  # vi /etc/apt/sources.list

 「# deb http://ps3.keshi.org/debian ./」の行の先頭の # を削除する。

  # apt-get update
  # apt-get install ps3pf-utils

 これで ps3videomode や /sbin/boot-game-os が使えるようになります。

●まとめ

 起動時のドライブ認識も正常で、外付けドライブでもきちんと起動するように
 なって sdb もあるし、ps3pf-utils もあるし、さらに完成度が高まった感じが
 します。
 あとは Cell の SDK が欲しいところ。

 Live CD も簡単に作れるみたいなのでいろいろためせますね。
 USB メモリ起動とか。

PS3 Linux Debianの Live CD が来た!

Debian の Live CD が ほげめも さんのところから来ました!早速使ってみます。
これは CD-ROM から起動できる Linux です。
時間のかかる HDD インストール無しに起動できるので、
PS3 上で Linux の環境を簡単に体験することができます。
ほげめもDebian Live for PS3

●起動までの準備

(1) Live-CD の作成

 こちら から iso イメージをダウンロードします。
 今回は 20070110 の debian-live-ps3pf-20070110.iso を使いました。

 CD に iso イメージを焼きこめる環境が必要です。
 とりあえず WindowsPC などで iso イメージとして書き込みます。
 20070110 版の容量は 222M なので余裕で CD-R/RW に収まります。

 もしすでに FC5 等を install していて、ブートローダーの kboot が
 入っていれば、作業はこれでおわりです。

(2) kboot (otheros.bld) の install

 もし Linux インストールを行ったことが無くまだ kboot が入っていない場合は
 この作業が必要になります。

 「PS3 に Linux を入れるまでの手順」の (4)~(9) までの手順が必要です。

 今回は試していませんが、おそらく YDL の kboot (otheros.bld) でも大丈夫です。
 とりあえず起動するだけなら内蔵 HDD は使わないので、作成する Linux 用の
 パーティションは最小で大丈夫です。

 Linux 用パーティションを最小にする(GAME用領域を最大にする)には
  ・20GB モデル > 「PS3に10GBを割り当てる」 (約6.6GB)
  ・60GB モデル > 「他のシステムに10GBを割り当てる」 (約10.7GB)
 を選びます。
 (PS3 Linux FAQ を参考にさせていただきました)

●起動方法

作成した Live-CD を入れた状態で「他のシステム」を起動します。

具体的には GAME-OS で、本体設定の「優先起動システム」を「他のシステム」に
変更してから電源を入れなおします。

すでに Linux が入っている場合は普通の reboot で OK です。

画面が止まったように見えてもそのまま待っていてください。
そのうち勝手に起動します。簡単です。

このとき画面モードは次のようになります。

 ・HDMI 接続の場合> 480p
 ・HDMI じゃない場合> 480i

もし HD (ハイレゾ) で起動したい場合は次のようにしてください。

起動時に kboot: とプロンプトが出ている状態で次のコマンドを打ち込みます。
(一覧はこちら http://www.keshi.org/moin/moin.cgi/PS3/Debian/Live )

 live     (自動選択、デフォルト)
 yuv480i
 yuv480p
 yuv720p
 yuv1080i
 yuv1080p
 yuv576i
 yuv576p
 WXGA
 SXGA
 WUXGA

例えば D4 (720p) にするなら

 kboot: yuv720p [Enter]

ここで選択できる画面モードはオバースキャン前提なので、720p でも厳密に
1280×720 になりません。TV 画面に収まるように一回り小さくなります。

●日本語にする方法

デフォルトでは英語のデスクトップになります。
起動時の kboot: プロンプトで次のように指定して起動すると日本語になります。

デフォルト解像度の場合

 kboot: live locale=ja_JP.UTF-8 keyb=jp106

720pの場合(例)

 kboot: yuv720p locale=ja_JP.UTF-8 keyb=jp106

●終了の仕方

画面上のメニューから「Desktop」「Shut down」を選びます。
またはら「デスクトップ」「シャットダウン」です。

画面が止まって電源が切れないな、と思ったら何度か Enter を押してください。

●できること

この Live CD は最小構成なので、ブラウザ (Firefox ) のみのようです。
自分でカスタマイズした Live CD を作れるそうなので、日本語かつ
アプリケーションを追加した自分環境を作ることが可能でしょう。

●注意点

Live CD は CD-ROM から起動してお試しできる環境です。
HDD を必要としない代わりにディスクは RAMDISK なので、
電源を切ると消えてしまいます。

●まとめ

ubuntu のように、インストール無しに気軽に Linux を体験することができます。

が、アプリケーションが全く入っていないので、初心者が初めて Linux に触った
場合や、どんなことができるのか体験したい人には少々物足りないでしょう。

どちらかというと普段 FC5/YDL を使っていて Debian を試したい人、
または自分で Live CD を作成したい人にお勧めです。

この CD でそのまま HDD に Debian を PS3 に install することもできます。
インストールするには起動時の kboot: のプロンプトで install と入力します。
このときネットワーク接続が必要です。

やっぱり FC5 に比べると、ウィンドウ上でも軽快に使えるのがいいですね。
正直軽いです。
最初 Debian を入れたときは HDD ドライブの性能の違いかと思っていたのですが
別のドライブに入れた YDL も比較的軽くてそれなりに動作するし
同じ HDD に入れた FC5 デスクトップも速くならなかったので、
純粋に FC5 が重いだけかもしれません。

軽いといっても最新の PC のウィンドウに比べたら比較にならないのだけど、
FC5 が操作時に不可解な重さを感じることがあるのに対して、Debian はまだ
理解できる重さです。ぜひ試してみてください。

個人的には CELL 開発環境さえ動けば、あとは Debian を使いたいと思ってます。

PS3 Linux 起動時画面モードの謎に兆戦

カスタム kboot を作って簡単に書き込めることがわかったので、起動時の画面
モードをもっと何とかできないか調査しています。
カーネルのソースを見ていくと、

 drivers/video/ps3fb.c
  ps3fb_probe()

の中で最初の画面モードを設定していることがわかります。
モードは ps3fb_mode に入ります。この値の初期値は 0 ですが、

 ps3fb_init()

で ps3av_get_mode() を呼び出して画面モード値を取得しています。

もし起動時にカーネルオプション ( video=ps3fb:mode:3 とかのあれ) があれば、
その直後にオプションで指定された値で上書きします。

最初の kboot のブートローダー呼び出しではオプションは NULL でした。
なので ps3av_get_mode() の値が有効です。

この関数は

 arch/powerpc/platforms/ps3fp/ps3av.c

の中にあります。

ここでわかったのは、起動時にシステム側からモニタの設定らしき値を受け取って
いて、一応自動で画面モードを判定しているということ。

だとしたら GAME-OS 側で設定した条件にしたがって初回の画面モードを選ぶだけで
いいような気がします。
GAME-OS 側では「D端子/コンポーネント」の選択もあるし、さらに使用可能な
解像度も登録できます。この中で一番大きな解像度で表示されるのが理想です。

実際のコードを見ると、

・HDMI の場合
・HDMI じゃない場合 (AV MULTI)

の2種類の判定を行っています。

原則として HDMI の場合はデフォルトとして 480p を、それ以外の場合は
480i が選ばれるようです。(60/50Hz の区別もある)

得られる構造体パラメータを見ても、ヘッダのシンボルを見ても、どうも
「D端子/コンポーネント」の区別がつきません。デジタル と アナログ の
区別のみです。

使用可能な解像度の Bit 情報も受け取っていますが、値をダンプしてみても
実際にコードを書いて試してもうまくいきません。
HDMI じゃない場合 (AV MULTI の場合) はきちんと値が格納されていないようです。

もしかしたらこれは GAME-OS 側で設定した config の値ではなくて、
直接デバイスに問い合わせて得られるパラメータなのかもしれません。

もしそうなら、デジタルかつ新しい規格の HDMI ではモニタ側の情報がわかるけど、
D端子 や コンポーネントでは 区別できないのもなんとなく納得できます。

仕方ないのでとりあえず、画面モードの固定値を埋め込んでみます。

 kboot-20061208/kboot-10/linux-2.6.16/arch/powerpc/platforms/ps3fp/ps3av.c

の中の auto_videomode() の戻り値を好きな画面モードに書き換えた
otheros.bld を作ってシステムに登録すれば、最初の boot 画面からきちんと
ハイレゾで表示されることがわかりました。

具体的には auto_videomode() の一番最後の

 return (vid2table_id(vid) | dvi | rgb);

 return 3;
 
のように直接値にしてしまいます。これで最初から 3 = 720p になります。
固定値なので解像度ごとに otheros.bld を作らないといけないですね。

other-os-flash-util で書き込んでいるフラッシュメモリの空き領域を使って、
どこかに画面モード値を埋め込んでおけばいいのかもしれません。

otheros.bld (kboot) のコンパイル方法は前回の記事
PS3 Linux カスタム kboot を作る」の手順どおりです。

一度 make した後にまたカーネルだけ再コンパイルする場合は、

 kboot-10/root-meta/installed/linux

を先に消しておく必要があります。例えば今回は、こんなスクリプトを書いて
build &テストをしていました。

   rm kboot-10/root-meta/installed/linux
   make
   gzip -9c kboot-10/linux > otheros.bld

できた otheros.bld をシステムにインストールするには、さらに

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

を実行します。
(注意点は「PS3 Linux カスタム kboot を作る」を参照にしてください)

PS3 Linux で kboot をハイレゾにする
PS3 Linux カスタム kboot を作る

と来て、3度目の挑戦でようやく本当のハイレゾ kboot になりました。

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 で選択して
切り替え起動できるようになりました。
画面モード設定はもう少し融通が利くように改善したいところです。