/retrofd

レトロフrなんとかAndorid化計画

Primary LanguageShell

retrofd (レトロ某ゲーム機 android化SDカードイメージ)
                                                                     2016/03/30

本SDカードイメージを使用することにより、レトロゲームカートリッジを装着して
プレイすることのできるゲーム機(以下、レトロ某)をAndroid化します。

もともとレトロ某の中身はAndroidではありますが、Android用の任意のapkファイルを
容易にインストール、実行できるようになります。


0. 注意事項

  0.1 免責

    本ソフトウェア/SDイメージ等を使用したことによる、いかなる損害も作者は
    責任を負いません。
    あくまでも自己責任での使用をお願い致します。

  0.2 データのバックアップ

  ・本体に保存されたクイックセーブ等のデータは、あらかじめバックアップ
    してください

  0.3 本体への影響

  ・本SDカードイメージを使うと、レトロ某本体内の保存領域(GUIの右上の方に
    本体領域として見える3GB程度の領)を/mnt/sdcardとして使用します

  0.4 FACTORY TEST MODE

  ・レトロ某GUIが「FACTORY TEST MODE」で立ち上がると、本体NAND上の
    以下の領域が初期化(クリア)されます。
    /data (mtdblock6), /cache (mtdblock5), /mnt/sdcard (mtdblock9)

    上記領域が初期化されると、工場出荷状態となり本体バージョンが
    初期バージョンに戻ります。

    ※出荷時v1.0であれば、v1.0に、出荷時v1.1であればv1.1に戻ります。
      ただし、システムアップデート(v1.5等)を行っている場合は、
      出荷時バージョンには戻らず、最後にシステムアップデートした時の
      バージョン(v1.6以上ならv1.5)に戻ります。

    また、本体に保存したセーブデータ等もクリアされます。

  ・通常はFACTORY TEST MODEにならない様にしていますが、本体を初期化したい
    場合などは、retrofd.cfgを編集するとFACTORY TEST MODEで立ち上げることも
    できます

  0.5 apkファイルについて

  ・apkはcpu種別がある場合は、ARM用を用意してください
  ・現在の本体Androidバージョンは4.2のような気がします
  ・Google playで公開されているapkをダウンロードする方法等は、各自で調べて
    ください
  ・起動できない、うまく動作しない物も多々あるかと思いますが、その場合は
    あきらめるか各自調査してください(聞かれても答えられません)

  0.6 SDカードイメージの譲渡・再配布等

  ・本SDカードイメージはフルスクラッチで作成していますので、
    自由に譲渡・再配布等が可能です。
    ただし、一度レトロ某で起動したSDカードはpartition 2/3に本体NAND内の
    情報をコピーします。一度レトロ某で起動したSDカードまたはそれを
    イメージ化したものは譲渡・再配布等することを禁じます。

  0.7. ライセンス

  ・本プログラム群は修正BSDライセンスとします


1. 下準備

  1.1 用意するもの

  ・以下を用意してください

    (1) 8GB/16GB/32GB いずれかのサイズのmicroSDカード
    (2) 本SDカードイメージ(SDカードサイズにあうものを選択してください)
    (3) インストールしたいアプリとホームアプリのapkファイル

       ※インストールしたアプリを起動させるため、少なくとも一つは
         ホームアプリをインストールする必要があります
       ※ホームアプリによっては、操作にUSBマウスが必要になる場合があります

  1.2 SDカードイメージのmicroSDカードへの書き込み

  ・本SDカードイメージをWin32 Disk Imager等を用いてSDカードに書き込みます

    ※本SDカードイメージは複数のパーティションに区切られています。
      SDカードを別用途で使う場合はSDFormatter等を用いてフォーマットし直して
      ください。

    ※Windowsで見ると出来上がったSDカードの容量は本来より2GB程小さく見えます
      (Windowsで見ないext4領域で2GB程使っているため)

  1.3 apkファイルのmicroSDカードへの書き込み

  ・作成したSDカードをPCで開きます。
    (WindowsではFAT32の領域(partition 1)のみ見えます)

  ・/retrofd/install_apk/ディレクトリにインストールするapkファイルを
    コピーしてください


2. 起動

  (1) 本SDカードを本体に装着し起動します

  (2) install_apkディレクトリにapkファイルを置いた場合は、自動で
      再起動しますので、GUIが起動してもそのままお待ちください

      ※apkファイルの大きさや量により、GUI起動後、自動再起動まで数分かかる
        場合があります

  (3) ホームアプリをインストールした場合は、ホームアプリ選択画面が出ますので
      ホームアプリかレトロ某GUIのいずれか起動したい方を選択してください

      ※インストールが完了したapkファイルは、インストールの成功・失敗に
        かかわらず/retrofd/install_done/に移動します
      ※インストール結果は/retrofd/install_done/inst_err.txtに出力されます
      ※成功した場合もinst_err.txtにpkg: 〜 は出力されます
      ※インストールが完了したapkファイルは削除して構いません

  (4) インストールしたアプリを起動する場合は、ホームアプリから起動してください

  (5) 以降、新たにアプリをインストールする場合は、ファイラーアプリを
      インストールしてそこからインストールするか、
      SDカードの/retrofd/install_apk/にapkを置いて本体を(再)起動してください

      ※install_apkにapkファイルを置いた場合は、起動後に自動インストール、
        自動再起動します


3. ディレクトリ構成

  3.1 /data, /cache

  ・本体NANDの代わりにSDカードのpartition 2, 3 (ext4)を使用します。
    それぞれ1.5GB弱, 300MB弱確保しています。

  3.2 /mnt/external_sd

  ・SDカードのpartition 1 (FAT32)を使用します。
    SDカード容量から2GB程度少ないサイズがこの領域に割り当てられます。
    (32GBSDカードイメージでは、30GB弱確保されます)

    ※レトロ某GUIでゲームをインストールした場合も、この領域に保存されます

  3.3 /mnt/sdcard

  ・本体NAND (mtdblock9, FAT32)を使用します。
    容量は初期状態で3GB程度です。


4. 設定ファイル retrofd.cfg

・SDカードのFAT32領域にある/retrofd/retrofd.cfgを書き換えることで、
  状態を変化させることができます。

  4.1 RF_CLR_SDP23 (初期値:no)

  ・yesにして起動すると、SDカード上の/dataと/cacheが初期され、本体NANDの
    /data, /cacheをコピーし直し、インストールしたapkは削除されます

    ※本処理を行うと、SDカードに/retrofd/rfd_clr_doneというファイルを
      作成します。後処理としてこのファイルをクリアし、本設定をnoに戻して
      おいてください。

    ※/mnt/sdcardは初期化しません

  4.2 RF_FTM (初期値:no)

  ・yesにすると、レトロ某GUIがFACTORY TEST MODEで起動します。
    レトロ某GUIの画面下に「FACTORY TEST MODE」と表示されます。
    本体NANDの/data, /cache, /mnt/sdcard が初期化されます。
    ========

  4.3 RF_LOGCD (初期値:no)

  ・yesにすると、1秒毎にログ(/mnt/ram/log/配下に置かれる)をチェックし、
    まだSDカードにコピーしていない新しいログがある場合はSDカードの
    FAT32領域/retrofd/log/にコピーします


5. adb有効化、root化

・SDカードのFAT32領域にある/retrofd/local.propを修正することで、
  adbを有効化したりroot化が可能になります。
  デフォルトはadb/root化ともに無効となっています。
  adbを有効にするにはlocal.prop.adbをlocal.propにリネーム、
  adb有効化/root化はlocal.prop.adb_rootedをlocal.propにリネームして
  再起動してください。

  ※root化状態で起動するとゲーム画面が出なくなるなど副作用があります。
    必要な場合のみ有効にしてください。

  ※adbを有効にすると、本体右側のUSB(OTG)ポートがUSBの受け側(非ホスト側)に
    なり、PCと接続できるようになりますが、パッド等の周辺機器は接続できなく
    なります。


6. レトロ某 アップデート

・v1.1~v1.4のような小規模(アップデータが10数MB程度)の場合は、本SDカードを
  使用したままアップデートをすれば、本SDカード上の領域をアップデートします。
  本体NAND上の領域はアップデートしません。

・v1.5のような大型のアップデートの場合は、未検証なので本SDカードを使わずに
  通常の方法でアップデートし、クリーンなSDイメージで環境を再構築するのが
  無難です。


7. ソースファイル

  7.1 rfgui_no_ftm.c

  ・(SDカード上の)/data/dalvik-cache/にあるレトロ某GUIのdexファイルに
    パッチを当て、「FACTORY TEST MODE」にならない様にするプログラム
  ・バイナリ中のRETRON5___BOOTSという文字列(実際にはascii code)を
    別の文字列retrofdretrofd...に置き換えます
  ・-rオプションでパッチを当てていない元の状態に戻します
  ・NDKでbuildします(ndk-build)

  7.2 mk_rfd.sh

  ・Linux等で実行し、本SDカードイメージを作成するスクリプト

    ※fileコマンドの出力結果をsed処理したりしているので、環境によっては
      正しく動かないかも

  7.3 bootscript.sh/retrofd.sh/inst_apk.sh/rfd_logcd.sh

  ・本体起動時に実行されるスクリプト群
  ・/init.rc -> /mountfs.sh -> /data/bootscript.sh -> /data/retrofd.sh ->
    /rfd_tmp/inst_apk.sh -> /rfd_tmp/rfd_logcd.sh の順番で起動されます

    ※後ろ2つはnohup, バックグランドで実行されます

    7.3.1 bootscript.sh

    ・retrofd.sh/local.propが更新されている場合はファイルを置き換えます
    ・retrofd.shを起動します
    ・本ファイルは変更が面倒(ext4領域にあるため)なので必要最低限の処理のみ
      行います
    
    7.3.2 retrofd.sh

    ・(一度だけ)本体NAND上の/data, /cacheをSDカードのpartition 2, 3にコピー
    ・FAT32領域にあるretrofd.sh/local.propがSDカードの/dataにあるものと
      異なる場合はSDカードの/dataのファイルを更新する
    ・スクリプト・実行ファイルを/パーティションにコピーし、実行権をつける
    ・rfgui_no_ftmの呼び出し(FACTORY TEST MODE抑止のパッチあて)
    ・v1.5で導入されたcpu使用パラメータ調整の設定
    ・inst_apk.shのバックグラウンド呼び出し
    ・バックグランド呼び出しは処理を一旦init.rcに戻して、
      zygote -> system_serverを起動させるため
    ・rfd_logcd.shのバックグランド呼び出し

    7.3.3 inst_apk.sh

    ・system_serverプロセスが起動するのを待って、apkファイルを
      インストールします
    ・すべてのapkをインストール完了後、本プロセスは終了します

    7.3.4 rfd_logcd.sh

    ・ログ・コピー・デーモン。kernel/init起動処理完了後も生き続けます。
    ・すべてのretrofdログはSDカードへの書き込み回数を抑制するため、ramfs上の
      /mnt/ram/logに出力します。(リリース版はコメントアウト済みで出力しない)
      だがしかし、adbを有効化しないとログが読めないのは不便であるため、
      retrofd.cfgでRF_LOGCD=yesとした場合は、ログをSDカードのFAT32領域に
      コピーします。(既にコピー済みのログは上書きしない仕様)
    ・ログの監視は1秒毎です。/mnt/ram/logをチェックし、SDカードに未コピーの
      新しいログがある場合はSDカードの/retrofd/log/にコピーします。
    ・ログの出力先はソース内のdstd=~で定義しています。ログの出力先を
      変更したい場合はdstd=~の~の部分を修正してください。


8. 履歴

  2016/03/30 初期リリース(ver1.0)


ひっそりぃ(hissorii)
http://hissorii.blog45.fc2.com (ひっそりぃドットコム)
GitHub: https://github.com/hissorii/retrofd
Twitter: @hissorii_com