Wii U ファームウェアダンプ: 計画
#不揮発メモリ 不揮発メモリとは何のこっちゃというと, 簡単に言えば, 電源を切ってもデータを保持できるメモリである. Wii Uには3つの不揮発メモリがある.
##eMMC eMMC_は_embedded MMC, すなわち組み込みMMCである. 最近はめっぽうMMCは見ないが, SDカードと互換性のあるカードと思ってだいたい間違いない. eMMCはWii Uのデータを格納しているらしい. ベーシックパックとプレミアムパックで違うのはここらしい.
##NANDフラッシュチップ eMMCも内部にはNANDフラッシュチップがあるのだが, MMCのコントローラが間に入る. 一方で, このフラッシュチップはそのまま裸のものだ. 形状は, デファクトなTSOP 48ピン. 2Gb (バイトじゃなくてビットだよ!) の2バンク構成となっており, RBとCEという端子を接続し直すことにより, バンク切り替えができる. それぞれのバンクにはvWiiとWii Uのファームウェア (以下Cafe OS)が格納されている. 想像すると, NANDフラッシュチップを搭載するWiiの資産を継承するため, ファームウェアをこれに搭載したのだろう. なお, 当然バンク切り替えなので, 両方に同時にアクセスすることはできない. これはセキュリティ, 及び安定性の向上に一役買ってるのではないだろうか.
##EEPROM 正体不明の謎チップ. PCのマザーボードではBIOSやEFIファームウェアを格納するのに使われる.
#ダンプ 今回はFT2232Hを使うことにした. FT2232Hは, 様々な入力をUSB経由でPCと接続することができる万能チップである. 日本では, Strawberry Linuxがこれを実装したボードを販売している.
https://strawberry-linux.com/catalog/items?code=50028
見ればわかるが, EEPROMが搭載されている. EEPROMのダンプは言うまでもなく行える.
NANDフラッシュチップは, 有志作成のソフトを使う.
https://github.com/bkerler/NANDReader_FTDI
理論上, SPIを利用できるFT2232HでeMMCもダンプできるのだが, 無難にカードリーダーを使う.
##eMMC わざわざeMMCを引っぺがしてピンアウトを調べた人がいるので, ありがたくそれを使わせてもらう. WiiUBrewにはEuss氏が投稿している.
あとは, これをカードリーダーの対応するピンと接続してあげれば良い. ただし, カードリーダーに直はんだづけするのは経済的に良くないので, 大抵はmicro SDやmini SDの変換器に接続して, カードリーダーは使いまわせるようにするのが一般的である. なお, こうちゃんさんはUSB mini-Bの端子を利用して, micro SDの変換器を着脱可能にしている. つまり, 次のように配線している.
eMMC->USB mini-Bの端子->micro SD変換器->カードリーダー
なお, 端子を借りるだけなので, うっかりUSBデバイスとして接続しないこと. 今回も, こうちゃんさんに同じように配線してもらおうと思う.
あとは, 普通にSDカードとして読む. ただし, 未知のファイルシステムを利用しているため, UNIX系OSではDDコマンド, WindowsではWin32 Disk Imager等を使用してダンプしよう. なお, Ubuntuに標準搭載されているgnome-disk-utility (UI上は単に「ディスク」と表記される) はこの際大変便利である. Ubuntu最高だぜ!
##NANDフラッシュチップ 直に配線するのは困難だが, Wii Uの場合, 抵抗がつくはずの部分にはんだづけすることで配線できる. また, 360-clipを使う方法がある.
###360-clip 360-clipは, TSOP 48ピンのものになら何でも接続できる優れもの. ただし, クリップと言いつつも, 上からかぶせるだけなので, 押さえていないと接触不良が起きるらしい. それでも, 万能なこのクリップは重宝することもあるだろう.
ただし, 少々お高い (約US$40ほど). それと, 日本では売っていない. ゲーム機ハック以外にも使えると思うんだけどな.
###消えた抵抗 抵抗が本来存在するはずの部分に存在しないらしい. ともかく, そこをピンアウトとして利用できる.
今回は, ここにこうちゃんさんにはんだづけしてもらおうと考えている.
###FT2232Hとの配線 きたねえとかいうんじゃねえぞ! 俺が書いたんじゃない.
RB, CEに1と2のどちらを接続するかで, vWiiとCafe OSのどちらかを選択できる. こういう構造だし, EEPROMのダンプにも使うので, FT2232Hのボードには直にはんだづけせず, ジャンパケーブル等を使おう. eMMCの場合USB端子を使って上品に配線できたが, 17ピン以上の端子はあまり多くないので, 今回はそのようなことはできなさそうだ.
/* 一応ないことはない. ただし, 一番きれいなHDMI端子はライセンスのせいでお高いし, ほかはレガシーなものばかりである. 単純にピンヘッダを使うという手もあるが, かなり詰められたWii Uにでかいピンヘッダを置くのは無理があるだろう. */
##EEPROM これにもクリップと直に配線する方法がある. クリップはぐぐればすぐに見つかる. 秋葉でも売っている. 直に配線するのもそこまで難しくはないはずだ. NANDほど端子は細かくない. 私はクリップを持っているので, 今回はそれを使おうと思う.
flashromというソフトがFT2232HでのEEPROMダンプに対応している. 今回はそれを使うつもりだ.
http://flashrom.org/FT2232SPI_Programmer
#ふと思う 基盤の両面に不揮発メモリがあって, バックアップの度にバラすのは流石に面倒だな… まあそうするしかないんだけどな。