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

PS3 の Debian で ps3ps_util を

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 kboot の挙動の違いについて

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 に含まれているようです。

PS3 Linux を外付け HDD から起動するまとめ

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 の読み込み位置を固定した方がいいのかも
しれません。

YPbPr to RGBHV VGA Box で 1080p

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PS3 Linux 外付け HDD から YDL を起動する

YDL (Yellow Dog Linux) 動きました。外付けの USB HDD からの起動です。
PS3 の内蔵 HDD にはすでに Fedora Core 5 が入っているので、
これを消さないように YDL と共存させています。
どちらを起動するのかは boot 時に選択することができます。

ちなみに使っている外付け USB HDD は
http://donya.jp/everg/7.1/4547479510686/
こんな感じの IDE + USB アダプタです。

●PC 上で作業

(0) 参考ページ

 http://cell.fixstars.com/ps3linux/index.php/Yellow_Dog_Linux_for_PS3

(1) YDL ダウンロード

 http://www.terrasoftsolutions.com/resources/ftp_mirrors.shtml
 この辺から DVD 用の iso イメージをダウンロードしてメディアに焼いておきます。
 yellowdog-5.0-phoenix-20061208-PS3.iso

 同時に iso と同じ場所にある otheros.bld もダウンロードします。

(2) ブートローダのインストール準備

 FC5 の場合 ( http://ch09144.kitaguni.tv/e327222.html )
 と同じ手順でブートローダをインストールします。

 http://www.playstation.com/ps3-openplatform/jp/manual.html
 ここから otheros.self をダウンロードして USB メモリの
 \PS3\otheros に入れます。

 同じフォルダに (1) でダウンロードした otheros.bld も入れます。
 ファイル名が同じですが、FC5 のときに ADDON CD から取り出した otheros.bld
 とは別物です。
 FC5 のインストールですでに準備してある場合でも、もう一度作り直す必要が
 あります。

  \PS3\otheros\otheros.self
  \PS3\otheros\otheros.bld

 USBメモリでなくても PS3 で認識できるメディアなら何でもかまいません。

●PS3 上での作業

(3) 内蔵 HDD の準備

 GAME OS を起動しておきます。

 今回の YDL install は本体 HDD に FC5 が入っていることが前提なので、
 すでに PS3 のパーティションは切ってあるものとします。

 FC5 のインストールやパーティション分割については
 http://ch09144.kitaguni.tv/e327222.html
 こちらの手順を参考にしてください。

 外付け HDD への install であっても、本体の HDD を分割しておかないと
 他のシステムのインストールができません。

(4) 他のシステムのインストール

 用意した USB メモリを PS3 に差し込んでから

  設定 → 本体設定 → 他のシステムのインストール

 を実行します。もちろん USBメモリでなくても PS3 で認識できるメディアなら
 何でもかまいません。

(5) kboot 起動

  設定 → 本体設定 → 優先起動システム → 他のシステム

 設定したら電源を切ってから入れ直します。

 ここでいったん画面モードが 480i になるので、PC モニタなど 480i の
 表示ができないディスプレイを使っている場合は注意してください。

 起動の前に
 ・PS3 に USB キーボードとマウスを忘れずにつないでおいてください。
 ・インストールする外付けの USB HDD も先に接続しておきます。
 ・(1) で作った YDL の DVD を挿入しておきます。

(6) YDL インストール

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

 内蔵 HDD に FC5 が入っている場合、ここで読み込まれているのは
 /dev/sda1 の kboot.conf です。
 なので [TAB] キーは使えません。

 おそらく timeout が 10秒になっているので黙っていると FC5 が
 起動してしまいます。

 YDL のインストーラは 720p で起動するので、今度は 720p 以上が表示できる
 モニタが必須です。必要ならモニタをつなぎ変えてください。

 SD のまま実行できるテキストインストーラもありますが、
 こちらはインストール後もウィンドウ環境にならないので今回は見送ります。

(7) インストーラ

 日本語を選択できるので、表示されるメッセージにしたがっていけば簡単です。

 Partitioning Type の選択では
 「Remove all partitions on selected drives and create default layout.」
 を選びます。

 インストール先を聞かれるので sdf にします。(sda のチェックを外す)

 このあと root パスワードなど必要な情報を入力します。

 しばらくして開始の確認ダイアログが出るので後はじっと待ちます。

 DVD メディアがイジェクトされて完了画面が出たら、メッセージにしたがって
 そのまま再起動します。

(8) 一度 FC5 を起動する

 再起動後再び kboot: の画面になったら YDL をインストールした USB HDD を
 外しておきます。そのまま内蔵 HDD の FC5 を起動します。

 kboot では常に /dev/sda1 の kboot.conf が読み込まれるので、
 YDL 用の設定追加が必要です。

 内蔵 HDD から FC5 が起動したら USB HDD を再び取り付けて mount します。
 YDL のパーティション分割をインストーラに任せた場合 /dev/sdf2 が root に
 なっているはずです。

  # mkdir /mnt/usbhdd
  # mount /dev/sdf2 /mnt/usbhdd

(9) kboot.conf の設定をマージする

 内蔵 HDD 上の FC5 と YDL を起動時に選択できるように sda1 の
 kboot.conf を書き換えます。

  # vi /etc/kboot.conf

 具体的には /etc/kboot.conf に YDL の kboot.conf の起動設定を加えます。
 YDL の kboot.conf は (8) の手順で mount した場合
 /mnt/usbhdd/etc/kboot.conf としてアクセスできます。

 下記は設定した /etc/kboot.conf の例です。

default=fc5
timeout=30
root=LABEL=/

fc5=’/boot/vmlinux-2.6.16 initrd=/boot/initrd.img root=/dev/sda1 video=ps3fb:mode:1′
fc5720p=’/boot/vmlinux-2.6.16 initrd=/boot/initrd.img root=/dev/sda1 video=ps3fb:mode:3′
fc51080i=’/boot/vmlinux-2.6.16 initrd=/boot/initrd.img root=/dev/sda1 video=ps3fb:mode:4′
fc51080p=’/boot/vmlinux-2.6.16 initrd=/boot/initrd.img root=/dev/sda1 video=ps3fb:mode:5′

ydl=’/dev/sdf1:/vmlinux-2.6.16-20061110.ydl.2ps3 initrd=/dev/sda1:/boot/initrd.img root=/dev/sdf2 init=/sbin/init video=ps3fb:mode:3 rhgb’

ydl480i=’/dev/sdf1:/vmlinux-2.6.16-20061110.ydl.2ps3 initrd=/dev/sda1:/boot/initrd.img root=/dev/sdf2 init=/sbin/init video=ps3fb:mode:1 rhgb’
ydl720p=’/dev/sdf1:/vmlinux-2.6.16-20061110.ydl.2ps3 initrd=/dev/sda1:/boot/initrd.img root=/dev/sdf2 init=/sbin/init video=ps3fb:mode:3 rhgb’
ydl1080i=’/dev/sdf1:/vmlinux-2.6.16-20061110.ydl.2ps3 initrd=/dev/sda1:/boot/initrd.img root=/dev/sdf2 init=/sbin/init video=ps3fb:mode:4 rhgb’
ydl1080p=’/dev/sdf1:/vmlinux-2.6.16-20061110.ydl.2ps3 initrd=/dev/sda1:/boot/initrd.img root=/dev/sdf2 init=/sbin/init video=ps3fb:mode:5 rhgb’
ydltext=’/dev/sdf1:/vmlinux-2.6.16-20061110.ydl.2ps3 initrd=/dev/sda1:/boot/initrd.img root=/dev/sdf2 init=/sbin/init 3′

 ここで書き換える場合の注意点がいくつかあります。

 ・YDL のデフォルトは 480i ではなく 720p になっています。
 ・YDL の起動時に参照する initrd.img は、必ず FC5 のものを使ってください。

   上記の設定例の場合もともとの YDL の kboot.conf では

     initrd=/dev/sdf1:/initrd-2.6.16-20061110.ydl.2ps3.img

   だったものを次のように置き換えています。(sdf1 → sda1 に注意)

     initrd=/dev/sda1:/boot/initrd.img

(10) YDL 起動

 kboot.conf の書き換えが終わったら reboot コマンドで再起動します。

  # reboot

 起動しなおして kboot: プロンプトになったら、[TAB] やキー入力で ydl を
 選択します。

 上の例の場合、YDL を 720p で起動するなら ydl と打ち込みます。

  kboot: ydl

 他にも、ydl480i ydl720p ydl1080i ydl1080p を選択できます。

 もし YDL ではなく FC5 を起動したい場合は kboot: で fc5 と入力してください。
 この場合 480i で起動します。他にも fc5720p fc51080i fc51080p の選択が
 できます。

外付けドライブからの起動では、FC5 の initrd.img を使うのがポイントです。
YDL の initrd-2.6.16-20061110.ydl.2ps3.img を使うと起動時にエラーで
止まってしまいます。

YDL の initrd 内の nash のスクリプトでは USB のドライバ組み込みや
起動待ちが入っていないので、外付けのドライブを root ファイルシステム
として認識できないからです。

それ以外の内容は FC5 の initrd.img とほとんど一緒です。