honeylab's blog

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

DAM XG1000に入っているLinuxで遊ぶ方法

前回、うっかりJOYSOUNDのマシンを買って色々遊べたので、

honeylab.hatenablog.jp


続いてDAMの XG1000を買ったのですが、いじり過ぎてしまい壊してしまいました。

満を持して、もう一台XG1000を買ったので丁寧にいじっています。

DAM XG1000はLinuxが使用され、その上でカラオケシステムが動作しています。
せっかくLinuxが入っているのですが、自動でそのような動きをしているため、自由に使うことができません。

HDDを引っこ抜いて書き換えてあれやこれやする、というところで壊したので、
今回はできるだけ分解せず、ソフトウェアだけであれこれする方法が確立できたので
こっそり紹介します。

 

背面、コントロール端子のこの2ピンがそれぞれRS-232C(ttyS0)のRXとTXです。
TTLCMOSの5V/3V - 0V ではなく、RS-232Cレベルですので気をつけましょう

ブートローダの起動中、のメッセージを見ながら、徐にスペースキーを押すと
YAMON> のプロンプトで停止します。

Image
ここで

YAMON> pflash probe
YAMON> xrpc 0xac080090
YAMON> load zbf 0xb3000000
を実行すると、Linuxカーネルが読み込まれます。
ここで、
YAMON> go . "console=ttyS0 rdinit=/bin/sh"

する


と、直接busyboxのshが立ち上がります。

何が起きたかというと、内蔵Flashに記録されているLinuxカーネルにはrootfsとしてinitrdというミニファイルシステムが添付されています。

(initrdの中身)

 

何も指定しなければinitrdの中のinitが起動して、/etc/init.d/ からカラオケシステムが起動しますが、それをやめさせるためにrdinit=/bin/sh つまり、busyboxのシェルだけを起動させています。

initされてないのでマウントとかがされていませんが、ログイン不要でなんでもできるプロンプトになります。マウントが動いてないので /procとかも使えません。最低限。

 

で、ここで 

# exec init

すると、通常のカラオケシステムの起動ルーチンに戻ります。
それ以外の作業をしたければ、別途準備した rootfsにchrootする
rm /etc/init.d/S50NK1000
してから exec init すると、普通にマウントとかができてますが、/etc/shadowが使われたgettyが起動してしまうので、その前に/etc/passwdのroot行を上書きしてパスワードを無効化しましょう。

(R/Wマウントですが、これはRAMDISKなので次回起動時には影響しません。永続化されない。)

 /proc/versionとcpuinfoはこんな感じでした

 

参考までに、どっかから落としてきたこのCPU用のtoolchainでビルドした自前rootfs、自前ビルドbusyboxchrootした画面を置いておきます。
普通のLinuxですので、普通に作ったプログラムが動きます。

残念ながらお腹のLCDはそのままfbになったりはしていないようです。
頑張ってあれやこれやしたら何か出るかもしれませんが、今のところ難しそうです。

 

Image

 

もし何かしたければ、上記の S50NK1000の中で、 HDD-A、HDD-B、PATA HDD(搭載されていない)の順で /Data/MODUL/module.sh というスクリプトがあれば起動してくるようになっていますので、そこに引っ掛けるようにしてやれば永続化した自分専用の起動スクリプトを割り込ませることができます。フラッシュメモリをダンプするとか。

カラオケシステムが立ち上がると、telnetサービスも動きますが、そのままではパスワードがかかっていてログインできません。上記の流れの中で、/etc/passwdを上書きして、パスワードを無効化するといいです。(同様に、永続化はされません)

 

HDD-A、HDD-Bのp1はext3で、それぞれ/NK1000,/NK2000というマウントポイントにマウントされ、カラオケシステムから参照され、アップグレードなどのために二重化されています。そのため、スペック表記にある”RAID1”というのは実は正しくないと思われます。

カーネル上はRAIDもサポートされてますが、使ってないように見えます)

HDD p2にはOSMFという独自のファイルシステムがあるようですが、なんかよくわかりません。

 

p3はext3ファイルシステムですが、一部のバイトを書き換えてあり、XG1000以外のマシンに持っていっても認識されないようになっていました。


XG1000のLinux上ではおそらくカーネルにパッチがあってext3として認識されるようになっています。他で読みたいなら該当部分を書き換えてもいいです。
もし書き換えたものを戻しても、同じようにext3として認識されます。
注意点ですが、ext3は認識するのに、ext2がサポートされてないので、自前で作ったrootfsなどを読み込むときは注意が必要です。そのせいなのか、mount に -t ext3をつけないとダメなことがありました。

このようにすると、XG1000を普通のMIPS Linux環境として使用することができます。

 

できます!!