Archives

09 January 2007 の記事

Debian でも ps3videomode や boot-game-os が無いとやっぱり不便なので
作っておきます。
ソースは ADDON CD CELL-Linux-CL_20061208-ADDON.iso に含まれています。
ftp://ftp.uk.linux.org/pub/linux/Sony-PS3/

(1) ADDON CD の \src の中身をコピーしておく

 ps3pf_util とカーネルのソースが必要

(2) ソース展開

 とりあえず手作業で

 $ rpm -i ps3pf_utils-1.0.9-3.src.rpm
 $ tar -jxvf /usr/src/rpm/SOURCES/ps3pf_utils-1.0.9.tar.bz2
 $ tar -jxvf ../linux-20061208.tar.bz2

(3) Makefile 修正

  Makefile の CFLAGS に -I../linux-20061208/include を追加

 $ cd ps3pf_utils-1.0.9
 $ vi Makefile

こうなる
CFLAGS = -O2 -Wall -W -Wstrict-prototypes -I../linux-20061208/include


(4) build と install

 $ make
 $ su
 # make install

これで FC5 環境同様に

/usr/bin/ps3videomode
/sbin/boot-game-os

が使えるようになります。

また、一緒にインストールされる other-os-flash-util を使うと、
フラッシュメモリの設定を表示したり書き換えができるようになります。

 # /sbin/other-os-flash-util -s `/sbin/find-other-os-flash`

version: 0x00000001
offset1: 0x00000002
offset2: 0x00000004
boot loader format: 0x00000001 : gziped
boot loader size : 0 : whole of area
boot flag: 0x00000001 : boot linux
num_params: 3
param_data0: 00 00 00 00 38 6d 43 74 00 00 ff ff ff ff ff ff
rtc_diff : 946684788
video_mode : 0x00 : NTSC
controller : 0x00 : O button means yes
param_data1: 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff
Static IP : 0.0.0.0
Network Mask : 0.0.0.0
Default Gateway : 0.0.0.0
param_data2: 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff
DNS Server 1 : 0.0.0.0
DNS Server 2 : 0.0.0.0

FC5 環境では /dev/sdb がフラッシュデバイスです。
容量は 4Mbyte でした。
このコマンドでブートローダーの書き込みもできるようです。
が、ためしに書き込んでみたら起動しなくなりました・・。
電源長押しの強制復帰+他のOSインストーラの再実行で一応元に戻りました。


PS3 Linux を外付け HDD から起動するまとめ」 で
kboot の kboot.conf の読み込み挙動が把握できなかった点について原因が
わかりました。install した otheros.bld によって、kboot の動作が異なって
いるのが原因でした。

・FC5 版 (ADDON CD) の otheros.bld
  /dev/sda のみ参照

・YDL 版 otheros.bld
  各ドライブの /etc/kboot.conf を集めてマージ

kboot起動時に /init を読むと __read_fstab() の動作が異なっていることが
わかります。

とりあえず sda の kboot.conf 固定にしたいので、sdf の kboot.conf は削除
しておくことにします。

kboot のソースは ADDON CD に含まれているようです。


Debian(Etch)、Fedora Core 5、Yellow Dog Linux と、3種類ほど
外付けドライブにインストールしてみました。
で、はまった点とか書いてみます。

内蔵HDD (sda) へのインストールだと特に問題がなくても、外付け HDD に
install すると不具合が出ることがあります。


●外付けドライブにインストールはできるが起動できない

OSインストールはできるけど、起動時に root を mount できずに boot が
途中で止まってしまうことがあります。
これは root になるべきドライブが認識される前に mount しようとするのが
原因のようです。FC5 では問題が起こらないので、これをお手本にして initrd
の init スクリプトに手を加えるとなんとかなります。
(http://www.devdrv.co.jp/linux/cpio-initrd-format.htm を参考にしました)

・/boot の initrd*.img をコピー (ファイル名は環境依存)

 # cp /boot/initrd*.img .
 # mkdir image
 # cd image
 # zcat ../initrd*.img | cpio -i -c

・init の修正

 mkblkdevs と mkblkdevs の間にドライバ読み込みと認識待ちの sleep を追加。
 追加する内容は FC5 の init を参考にする。
 さらにこの中で読み込んでいる module を lib フォルダに入れておく。

・新しい initrd の作成

 # find . | cpio --quiet -c -o | gzip -c > ../initrd-new.img


kboot.conf の指定で新しい initrd-new.img を読み込むように手直しします。

initrd.img の修正が手間な場合は、実は FC5 の initrd.img をそのまま使っても
たいていうまくいきます。FC5 の initrd.img は ADDON CD の \target に入って
いるので、これを HDD にコピーして使えます。


●kboot.conf がどこから読み込まれるか

基本的に内蔵 HDD sda でラベル '/' がついたパーティションがあるとそこから
読み込まれます。なので、外付け HDD にインストールした場合でもそのカーネル
呼び出しの設定を sda 側の /etc/kboot.conf に追加する必要があります。

この辺の挙動はまだ完全に把握していないのですが、ごくまれに違うドライブの
kboot.conf も読み込まれていることがあります。
ADDON CD の HowToEnableYourDistro.html に書いてある通りにも必ずしもなら
ないことがあるし。もしかしたら認識順も影響するのかもしれません。

メモリカードとか使って kboot.conf の読み込み位置を固定した方がいいのかも
しれません。


PS3 の HD 画面を PC モニタに映すために、
・PS3 を PCモニタに無理やりつなぐまで
・PS3を繋いだPCモニタ画面
・PS3 Linuxの画面を広く使う
こちらで紹介した「YPbPr to RGBHV VGA Box」を使っています。
モニタは UXGA 1600x1200 の EIZO FlexScan L887 です。
(モニタとの相性も結構あると思います)

いままで 1080p (D5) がだめで 720p (D4) を使ってましたが、Linux だとぎりぎり
1080p で描画できることがわかりました。

それぞれのモードでの画面はこんな感じです。

○ D4 720p オーバースキャン 1124x644 (ps3videomode -v 3)


○ D4 720p フルスクリーン 1280x720 (ps3videomode -v 131)


○ D5 1080p オーバースキャン 1688x964 (ps3videomode -v 5)


× D5 1080p フルスクリーン 1920x1080 (ps3videomode -v 133)


D5 1080p のフルスクリーンだと同期が崩れてかなりノイズが入ります。

なぜか同じ 1080p でも PS3 Linux のモード 5 (オーバースキャン 1688x964) だと
同期が取れてきちんと表示できます。
VGAケーブルは L887 付属のものをそのまま使用しています。

残念ながらゲーム画面 (GAME-OS) は常にフルスクリーン相当なので全くだめでした。

ちなみにモニタの解像度は 1600x1200 なのでそもそも 1920pixel も出ません。
オーバースキャンでも 1688pixel あってさらに画面中央部に収まっているので、
実際は画面が若干縮小されています。
つまりモニタの画素とは 1対1 ではなくてアスペクト比も違っています。

だけどこれだけ画面の広さに差があるので使いやすくなりました。


今はこんな感じで繋いでますが、

[PS3] - コンポーネント - [YPbPr to RGBHV VGA Box] - VGA - [L887]

これだと 480i (D1) の表示ができないので、Linux Install の ためだけ にとうとう
VABOX2 も入手してしまいました。ゲームだけやってる分にはいらないんだけど・・

[PS3] - コンポジット - [VABOX2] - VGA - [L887]