日別アーカイブ: 2007年1月10日

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