今確認できているのは、Ronzi A3 と IQQ M1 。これらの設定の違いを見てみることにする。
注) Ronzi A3 (と Ramos V65Pro)の公式ファームウェアは、Ingenic のものを変更している。 ファームウェアのファイルが単一のファイルになっているのだが、Ingenic のツールで扱えるように 分解できる。
Jz4770 に対応した版は、いまのところ Jz4770 開発環境の中だけにある。公式版は Jz4760 まで。
追記: V65Pro の情報を右端に追加。これについては、最後にまとめてコメント
機種 Ronzi A3 IQQ M1 V65Pro
ファイル名 4760(B)_default.ini 4760_xam5001.ini 4760(B)_default.ini
[UserSetting]
ForceErase 1 0 0
Format 1 0 0
この設定を IQQ M1 と同じにすると VFAT 領域を初期化しなくても済みそう。
[Fileset]
MaxFileCount 7 7 8
EndPage 7812000 7812000 7812000
Flash のサイズが違うのに同じ設定 -- これより小さな容量のマシンは気にしなくとも良いということか。
[File5]
FileName=userdata.img
StartAddr 0x19000000 0x1F400000
[File6]
StartAddr 0x3A400000 0x40800000
[File7]
StartAddr 0x40000000 0x46400000
[File8]
StartAddr 0
IQQ M1 は、サイズが大きくなっている。.. のだが userdata.img の開始位置からずれてくる。このあたりは、パーティションになっているので 整合性を取れば自由にサイズを変更できそう。
[OpenCardSetting]
PowerPin 123 108 123
PowerOffLevel 0 1 0
CidPsnModel SD_MODEL FIXED SD_MODEL
これは 非常に重要な項目。これを間違えると まずいと思われる。... のだが、関係なかったりするかも知れない。
[PLL]
EXTCLK 12 12 12
CPUSPEED 114 240 114
PHMDIV 3 3 3
BOUDRATE 57600 115200 57600
CPUSPEED が違うが 書き込み中だけの話なので、実は気にしなくて良い。BOUDRATE は、シリアルの設定だが、製品では関係ない。
今、Ramos V65Pro を購入中なのだが、Ronzi A3 の設定と違うのは、 PowerPin, PowerOffLevel ぐらいのはず。これも調べておこう。
追記: V65Pro
ヒストリには、たとえば、mbr-xboot_r300_60bA3w_110509.bin といったファイル名が残っている。確かに V65Pro は、Jz4760B 。なのだが、設定は同じ。違うのは、File1-7 は使わずに File8 を使う点。ひょっとしたら、File8 はもともとこういうものかも知れない。
あと、ForceErase=0, Format=0 となっていた。全部をひとつのファイルにしているから関係なさそうなものだが... 。
さて気になる PowerPin だが、Ronzi A3 とまったく同じだった。チップを変更したが基本は同じなのか ... そもそもあまり関係ないのかはわからない。それはともかく、Ronzi A3 のツールで設定も変更せずに、分割したファームウェアが書けるようだ。これは、ちょっとうれしい。
USBBoot の仕組みとファイル名の関係
- usb_boot_burn-jz4770-20111025.rar
... と思って一応確認したら 10/28 に更新されている。 USBBootTool の最新版が単独でダウンロードできるようになった。
ちょっと見たのだが、上で説明したのと大分内容が違う。要注意。
まず config の TOPの ファイル名が違う。今まで config.ini だったのが Setting.ini になっている。
# CpuType: 0 - 25\40,1 - 4750 ,2 - 4755 ,3 - 4725B , 4 - 4760, 5 - 4760B,6 - 4770
# SystemUsed: 0 - miniCos ,1 - Linux , 2 - Other #
# ForceErase/Format: 1 - Used ,0 - Unused #
# DDRType: 0-fw.bin, 1-fw_mddr.bin,2-fw_ddr1.bin,3-fw_ddr2.bin
# (OLD: 0--SDRAM(fw.bin), 1--DDR(fw_ddr1.bin), 2--DDR2(fw_ddr2.bin), 3--MDDR(fw_mddr.bin) )
# StorageMedia: 1-SD/MMC,0-NAND
[UserSetting]
CpuType=6
SystemUsed=1
ForceErase=0
Format=0
ProgrammeCount=0
DDRType=0
StorageMedia=1
ここらあたりは、項目は同じ。DDRType は、stage1 のファイル名を指定するのだが、番号と ファイル名の対応が変わっている。Jz4770 は DDR2 を使うのが普通のはずだが fw_ddr2.bin はないし使っていない。
あと CPUType について、IQQ M1 は、Jz4760B にかかわらず 4 を使っていた。分離するほどの違いはなかったはずなのだが ... 何故 5 を新設したのだろう?
# AdvanceModel: 1 - Used ,0 - Unused #
# FileXUsed: 0 - Filehistory-0 ,1 - Filehistory-1 ,2 - Filehistory-2#
[FileSetting]
AdvanceModel=1
File1Used=0
File2Used=0
よく分からないのが、 AdvanceModel。[FileSetting]に関係するはずだが ...
Ingenic の CPU は、USBBoot の機能を持っているわけだが、どんなタイプのメモリが付いているかも分からない状態ではメモリを設定できずメモリにアクセスできない。
だから、最初はキャッシュにプログラムをロードする。そのプログラムが、メモリの設定を行うことで、メモリにロードできるようになる。
最初のものが stage1 といわれるもので、CPU名/fw.bin など の小さな bin ファイル。JZ4760/B の場合は、DDR2 なので 4760/fw_ddr2.bin を使う。
stage1 は、メモリの設定いがいにも CPU クロックの設定や GPIO の設定を受け持っている。これらの設定は、上記の ini ファイルの値を元に fw.bin のイメージをメモリ上で書き換えることで、stage1 プログラムに渡す。
fw.bin は SDRAM , fw_ddr2.bin は、DDR2 だが、他に DDR3 の fw_ddr3.bbin と Mobile SDRAM の fw_mddr.bin がある。
メモリにロードするプログラムは、stage2 だが、ファイル名は、CPU名/usb_boot.bin になっている。
これは、USB ドライバを持っていて、ROM のドライバの機能を上書きして、(USB はリセットしないで) 新たな機能を加える。ちなみに、ハードウェアに関する 2.3 のパラメータは、stage1 と共用している。(多分 PowerPin とか シリアルの設定とか)
これと通信することで、内蔵フラッシュに書きこむのだが、SD カード と NAND Flash では書きこむ方法が違う。特に NAND Flash は OOB という 領域の管理が面倒。LinuxNandcfg.ini と MiniOSNandcfg.ini で Linux と (PMP 機で使われる) MiniOS の 2通りに対応している。... ただ、Android 機は、いまのところ全部 SD カードなので関係なく気にする必要はない。
この stage2 は、書きこむ機能はあるが、吸いだす機能は持っていない。ドライバにもそういう機能はない。悪用を防ぐ目的だとは思うが、USBBoot で書き込めるファームウェアを最低1つ持っていないと気軽にはいじれない。ファームウェアが公開されているかどうかは、重要なポイント。
補足: 吸いだすことは、android が立ち上がった状態で adb に接続すれば、簡単にできる。Jz47xx の android 機は(いまのところ) 最初から root で shell が動く上に busybox も入っている。
busybox を使って、内蔵フラッシュから dd で吸い上げれば良いわけだ。system.img は read-only だから たぶん USBBoot で書き込み可能なファームウェアを再構築できる。その上 /data/app も残っているみたいだから、プレインストールアプリも吸い出せる。
novo 7 basic もこうやって再構築できるかも知れないのだが ... 失敗すると危険なので、公式ファームウェアが出るのを待ったほうが良さそう。
Ingenic 版について
ftp://ftp.ingenic.cn/3sw/00tools/usb_boot/
ここに、Ingenic オリジナルの USBBootTool がある。バージョンは、r166 (2011/06/09)。
ソースコードも置いてあり、ちょっとだけ古い 2011/03/04 の日付になっている。
この Windows 版 USBBootTool は、driver と UI のプログラム, そして driver インターフェイスの dll から成っている。
ソースコードが、全てを含んでいるかどうかについては調べていないが、少なくとも UI のプログラムは入っていた。これを元にすれば、英語版も作れそうなものだが、誰も作っていないようだ。
あと、Jz4770 への対応は、stage1,stage2 のプログラムで済む。ドライバも含めて、ツール自体は関係ない(はず)
ftp://ftp.ingenic.cn/3sw/Jz4770/01LinuxBsp/20110729/
Novo 7 basic 版について (osakanataro 氏の記事 参照)
USBbootTool も出ている。これの config をチェックしてみたところ、上記 Ingenic 4770 版ではなく、Ronzi A3/V65Pro 版を元にしていることが分かった。
内容が 4770 追加になっているし、config のコメントに lynx というのが残っている。やはり 7 つのファイルを書き込むのだが、cache.bin の位置がどうも違うようだ。
あと、mbr-xboot.bin には、microSD カードから ファームウェア をアップデートする機能があるらしい。... といっても Novo 7 だけかも知れないのだが ...
http://cruzsupport.velocitymicro.com/ics/support/KBAnswer.asp?questionID=861
これは、正規のファームウェアのための機能ということにしておきましょう。