honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

プレステクラシックのカーネルの書き換え方

プレステクラシックのBOOTIMG1,BOOTIMG2パーティションに収められているのはfitImage形式のブートイメージです。

これは、カーネルのバイナリ(ImageやzImage)と、ハードウェア定義であるDTBファイルを収めたものです。

カーネルを書き換えるには新たにfitImage形式のファイルを作り、BOOTIMG1に上書きしてやればいいです。

ただし、失敗するとちょっとやな感じなので、まず確実にもともとのBOOTIMG1のバックアップを取りましょう。

USB経由のスクリプトでも、シリアル経由でUSBメモリに保存してもいいですが、以下の方法でファイルを作り、大事に保存してください。

ただし、私の解釈ではこのファイルはGPLであり、著作権問題は発生しないと思っています。そのため、万が一忘れていたら、誰かにもらってもいいものだと思っています。

さて、どうにかしてシェルにログインします。一度前面USBをポートを使ってBleemSyncをインストールしている場合、BleemSyncのtelnetが簡単ですが、今後カーネルの書き換えやOTG化をした場合、自力で復活を試みれるように、生のシリアル経由で作業する方法も覚えておいたほうがいいと思います。

生のシリアル経由では、dmesgの出力が延々とでて邪魔なことがありますが、心の目で root [enter] でログインし、dmesg -n 1 をタイプすると黙らせることができます。

まずはバックアップです。

以下のコマンドを実行します。USBメモリは /media にマウントされているとします。

  • dd if=/dev/disk/by-partlabel/BOOTIMG1 of=/media/BOOTIMG1_ORIGINAL

root@bleemsync:~# dd if=/dev/disk/by-partlabel/BOOTIMG1 of=/media/BOOTIMG1_ORIGINAL


16384+0 records in
16384+0 records out
8388608 bytes (8.4 MB) copied, 0.191073 s, 43.9 MB/s

 BOOTIMG1 の代わりに /dev/mmcblk0p1 でもいいですが、番号だと間違えやすいです。/dev/disk/by- で[tab]を押して補完しながらやりましょう。

 

さて、カーネルファイルを準備します。

OTG対応、キーボード・マウス無視の、無効化、一部のUSB-Ethernet変換器のドライバを含めたカーネルをここに置きます。

 

www.dropbox.com

 

このカーネルを下のどちらかの方法で焼きます。

  • fastboot経由

本体を開け、fastboot用のパッドをショートしながら背面USBを接続し、fastbootモードに入ります。ホストPC用のfastbootやドライバはどこからか探してきてください。

fastboot flash BOOTIMG1

で書き込みます。パッドを戻し、電源を再接続します。

 

dd if=/media/otg_kernel.image of=/dev/disk/by-partlabel/BOOTIMG1

でOKです。再起動すると新しいカーネルで起動します。

前面USBをポートには何も影響がありませんので、BleemSyncかなにかが動いてる状態で以下のファイルを確認し、正常に書き込めているか確認します。

もしだめな場合、もう一度やり直しましょう。

 

万が一文鎮化してしまった場合

上記の「fastbootで書き込む方法」に準じ、fastbootに入ります。

fastboot flash BOOTIMG1 <BOOTIMG1_ORIGINALのフルパス>

で元のファイルを書き込みます。

 

正常にカーネルが更新されれば、以下の機能が追加されます。

  • キーボードの有効化
  • マウスの有効化
  • 背面USBのOTG(host)対応

ただし、OTGポートをhostとして動作させるには若干の工夫が必要です。

host/deviceの切り替えは以下のコマンドで実行できます。

  •  echo host > /sys/devices/platform/mt_usb/swmode
  •  echo device > /sys/devices/platform/mt_usb/swmode

起動後にうまいこと実行できるよう、起動スクリプトなどに以下の文を追加するといいでしょう。

私は、/usr/bin/start_pman の中に

if [ "$CHG_INFO" -eq "3" ]; then
echo change to hostmode
echo idle > /sys/devices/platform/mt_usb/swmode
sleep 1
echo host > /sys/devices/platform/mt_usb/swmode
sleep 1
fi

が入るようにしました。ちなみに

CHG_INFO=$(cat /sys/module/musb_hdrc/parameters/charger_info)

の値は、通常のUSB-DATAケーブルを使っている場合1が、OTGスプリッタケーブルの場合3が入るようです。これで見分ければいいと思います。

用途によって、どちらか固定でいい場合があると思います。BleemSyncはWebUIを使う関係でDEVICEになる必要がありますが、そのほかのツールで外部USBメモリを差し込めば使えるような場合はHOSTに固定してしまってもいいかもしれません。

 

おまけですが、USB-Ethernetのドライバを含めてあります。

dmesgを確認して、ifconfig eth0 up をすることでUSB-LAN変換が有効になります。

systemd-networkはインストールされていないので、その類の設定方法は使えません。ifconfig で IPアドレスを指定するか、busybox に含まれている udhcpc アプレットIPアドレスを取得します。

USB-LANが有効になれば、telnetftpがRNDISと同じように使えるはずです。

自動スタートアップとしてどっかに置いておくといいと思います。

 

OTGを有効にしていろいろ動かしているデモがこちらです。

 

youtu.be

 

あくまでも、これはOTGに対応したカーネル、というだけなので、OTGを使っていろいろなことを実現するには追加でユーザランドを調整する必要があります。

まぁLinux使えるならいろいろできるでしょう。

OTG機能を使わなくても、マウスとキーボードがちゃんと使えるようになっているので

dosboxやneko projectとかが快適に遊べるようになるんじゃないでしょうか。

(キーボードのESCなどがRetroArchのUIにハンドルされないようにするにはScrollLock(デフォルトのバインド)を押すといいようです。F11でUIのマウスポインタが消えます)

 

こういったカーネル書き換えの方法やプレステクラシックの回路図なんかを載せた同人誌を 4/14 技術書典6 にて頒布します。

f:id:honeylab:20190412160640p:plain

プレイステーションクラシック魔改造日誌」本文白黒 68p ¥1000円

関係者の方は声かけてください 献本しますw

techbookfest.org