2011年11月08日

Novo7 basic 購入

ファームウェアも入手できたので、ようやく購入することにした。

ドキドキ堂 で 9990 円(送料無料)になっていたので、ここにした。日曜日に注文して、火曜日にゲット。さすがに国内で買うと早い。

    ASCIIjp: advanceの次はBasic! 1万円強で買える7型タブレット
    AKIBA PC HOTLINE: 2011年11月12日 -新製品- Ainol Novo 7 Basic

    追記: なんだろう 今頃になって紹介されている。しかも MIPS であるということを明記してないし。
    これだと 知らずに買う人が出てきそう。

    -- 元凶は、apad 専門店か。

    追記: 『世界初のAndroid 4.0 タブレットは99ドルの NOVO7、MIPS系SoC採用

    engadget 日本語版で記事になっている。結構インパクトのある紹介の仕方だなぁ。そういえば、『1万円以下の7型Androidタブレット EKEN M001』という記事で Android に興味を持ったのだった。

    それはともかく、これで少しでも jz4770 マシンの入手性が良くなれば嬉しい。

    ところで、1080p動画 を GC860 でサポートみたいなことが書いてあるのだが ... 動画の縮小回転には使っているかも知れないが GPU は、基本無関係じゃないかと。-- いろんな機能があってややこしいが、今度動画のデコードの流れを整理してみよう。

    あと、動画 8 時間、スリープ 30 時間となっている。動画は、実際にそのあたりのはず。(8 時間も見てないから分からないが) 。スリープ 30時間というのは随分おとなしい値だ。14 mA とかレビューで見たから 中華的スペックで 300 時間の間違いではないかという気もする。

    追記2 : 『世界初のAndroid 4.0タブレットが99ドルで登場〜MIPSベースプロセッサ採用の7型

    お、PC Watch にも 記事が出た。あと、ググってみると 4.0 より 99ドルに反応している人が多い。もともと 中国内の定価 は、599元 で レートを x12.5 と見ても 7500円弱で 100ドル以下。そして、これだけが特に安いわけでもない。

    追記3: pandawill.com でも 扱っている。$129.99 だから 10400円ぐらい。( ちょっとだけ高いが 内蔵 Flash が 8GB になっている)

    ところで、Novo7 advanced は 、生産終了らしい。競合製品が多数出てきたから仕切り直すのだろうか?

ところで、入手したファームウェアの 2.2 は、update.zip の形式で、3.2 は USBbootTool の形式。
update.zip には、mbr-xboot.bin が含まれていない。

ひょっとしたら、3.2 のものが 使えない恐れが... まずは バックアップから。


      $ platform-tools/adb devices
      * daemon not running. starting it now on port 5037 *
      * daemon started successfully *
      List of devices attached
      INGENIC108A device
      $ platform-tools/adb shell
      #

    Ronzi A3 で設定してあったので、なにもせず adb で接続できた。(IQQ M1 のときもそうだったが)
    いきなり root で入れた。

    まずは、df

      # df
      /dev: 187756K total, 12K used, 187744K available (block size 4096)
      /mnt/asec: 187756K total, 0K used, 187756K available (block size 4096)
      /mnt/tmpfs: 1024K total, 104K used, 920K available (block size 4096)
      /system: 239163K total, 217596K used, 21567K available (block size 1024)
      /data: 1032088K total, 104720K used, 927368K available (block size 4096)
      /cache: 30224K total, 4124K used, 26100K available (block size 4096)
      /mnt/flash: 2489584K total, 170368K used, 2319216K available (block size 4096)
      /mnt/secure/asec: 2489584K total, 170368K used, 2319216K available (block size 4

      # busybox df
      Filesystem 1K-blocks Used Available Use% Mounted on
      tmpfs 187756 12 187744 0% /dev
      tmpfs 187756 0 187756 0% /mnt/asec
      none 1024 104 920 10% /mnt/tmpfs
      /dev/block/mmcblk0p1 239163 217596 21567 91% /system
      /dev/block/mmcblk0p2 1032088 104720 874940 11% /data
      /dev/block/mmcblk0p3 30224 4124 24564 14% /cache
      /dev/block/vold/179:4
      2489584 170368 2319216 7% /mnt/flash
      /dev/block/vold/179:4
      2489584 170368 2319216 7% /mnt/secure/asec

    busybox も最初から入っていて、df も出力フォーマットが違う。ただ、これじゃ容量しか分からない。

      # busybox fdisk /dev/block/mmcblk0

      Command (m for help): p

      Disk /dev/block/mmcblk0: 3972 MB, 3972005888 bytes
      1 heads, 16 sectors/track, 484864 cylinders
      Units = cylinders of 16 * 512 = 8192 bytes

      Device Boot Start End Blocks Id System
      /dev/block/mmcblk0p1 8193 40960 262144 83 Linux
      Partition 1 does not end on cylinder boundary
      /dev/block/mmcblk0p2 41089 172160 1048576 83 Linux
      Partition 2 does not end on cylinder boundary
      /dev/block/mmcblk0p3 3585 7424 30720 83 Linux
      Partition 3 does not end on cylinder boundary
      /dev/block/mmcblk0p4 173057 1048576 7004160 b Win95 FAT32
      Partition 4 does not end on cylinder boundary

      Partition table entries are not in disk order

      Command (m for help): q

    busybox には、fdisk も入っているのでパーティションを確認。

    Partition 3 (/cache) が、Partition 1 (/system) の前にあるのが特徴的で、 3.2 の mbr-xboot.bin と同じ。あとでちゃんと比較するが、たぶん大丈夫だろう。

      # busybox dd if=/dev/block/mmcblk0 of=/mnt/flash/mbr-xboot.bak bs=1024k count=64

      64+0 records in
      64+0 records out

      # mkdir /mnt/flash/apk
      # busybox cp /data/app/*.apk /mnt/flash/apk

      # cd /system
      # ls

      lib
      testsd.data
      framework
      xbin
      media
      usr
      bin
      recovery.cpio.img
      lost+found
      app
      etc
      sndtest.pcm
      fonts
      build.prop
      orientation.rle
      userdata.img
      # busybox tar cvf /mnt/flash/sytem.tar lib testsd.data framework xbin usr app etc sndtest.pcm fonts build.prop orientation.rle

      # busybox cp *.img /mnt/flash/

    とりあえず 0 から Partition 1 までの 64MB のイメージを dd で バックアップ。

    /system は、tar を使ってファイル単位にした。recovery.cpio.img , userdata.img は別にバックアップ。

    ついでに書いておくと、初期ファームウェアが入手できない Jz47xx の Android を買ってしまったら、busybox dd で、先頭から FAT32 の Start までバックアップしておくと良いと思う。万が一のときは、USBBootTool を ちょっと設定すれば 元にもどせる。サイズが分からなければ count=64 のところを 2000 にして(2GB 弱) microSD にバックアップすれば良い。

    ただし root で入れて busybox があるのが前提だが ...

たぶん使わないと思うが、とりあえずは安心できた。

さて、ちょっと 使ってみた。

  • スペックに書いてなかったが、バイブレータが入っていて、なにか押すと振動する設定になっている。
  • 言語が、中国語と英語しかない。これは、どうせ後で CFW 作ることになるので気にしない。
  • ゲームは、Angry Birds 以外に Fruit Slice と TurboFly 3D が入っていた。これは、入手した 2.2 と同じ。
  • 梱包品は、USB ケーブル以外に ACアダプタと OTG 用のアダプタ それに使えないらしい リモコン。OTG 用アダプタは、二股ケーブルになっていて USB A-Type メスと ACアダプタジャック。

    USB ケーブルだけでも充電することはできる。(ACアダプタは、高速に充電できるらしい) 。OTG 用アダプタが外部電源を使えるようになっているのは良い。こういうものがあるとは...

  • 電源 Off のときの充電アニメーションは出ない。

  • あと (ほとんど使っていないが)所感

    質感は、結構良い。が、指紋でべたべたにしてしまった。aliexpress だと 白もあるようなので、選べるなら白が良いかも知れない。

    これが 1万円なら相当安い。あんまり使えない WM8650機 でも 7000円ぐらいはするし。 MIPS であることが許容でき、自分でカスタマイズできるなら良い買い物だろう。 MIPS が嫌なら 双子機の Novo7 Advance も良いかも知れない ... のだが MIPS 中心で使っていくつもりだから 私は興味はない。

実は、V65Pro も本日到着。こちらは、送料込みで 80 ドル弱 -- 6400 円ぐらい。

    ちょっと書いておくと、ラップされた箱に 収められていて、それとは別におまけらしきものが 5点 -- AC アダプタ、巾着袋、保護フィルム、小さなスタンド と 謎の CD (中を見ていない) 。

    V65Pro は、Ronzi A3 の改良版みたいなもの。CPU が Jz4760B になって高速化し、ボリュームボタンが付いた。ボタンは全部で 5 つ -- 電源と ESC , MENU , ボリューム +,− 。あと、Ronzi A3 より軽く感じる。

    ファームウェアは、一部を Ronzi A3 でも使わせてもらっているぐらいで、調査済み。... だが実機でどう動くのかは興味があったりする。

    あ、Gセンサは入っていなかった。まぁ縦画面にする方法はなんとか確立できたから良いのだけれど。

もう少し使ってみた

  • まずは動画

    Media Player という プレインストールのプレイヤーがあるが、見栄えが良くなっていた。メニューも増えて 輝度調整やアスペクト比変更とかも出来るようになった。

    で、用意した 1080p の動画(ゲームのトレーラーで動きが激しい)を 見てみたがスムーズに再生できた。ついでに V65Pro でも見てみたら、1080p はハネられた。720p は問題なし。(もともと Jz4760B は 720p まで)

    ちなみに、Ronzi A3 は 720p もダメで 480p か 360p まで 。

      これ、Ronzi A3 や V65Pro でも使いたい。ちょっとやってみているが、再生しようとすると 『cn.ingenic.videoplayer が予期せず停止しました』となる。

      この MediaPlayer は、ingenic 社が作っているようだ。それはともかく、なにか足りないらしい。

  • パチスロゲーム

    Ronzi A3 では、ドラムがパラパラ していたので、そういうものだと思っていたのだが ... なんとドラムが回っている!。確かに周波数は 2 倍だが ... 画面は広くなっているし 劇的に違うとは思わなかった。

      自然に見えるようにドラム上下は画像を縦に潰しているようだ。そのために処理が重く、性能差が体感しやすい。

    そう言えば ... 2次キャッシュがあるのだった。普通は CPU のクロック に比例した性能向上は望めないが、このおかげで 実際に 2 倍ほどの性能差があるようだ。

  • Quadrant

    Ronzi A3 では動かなかったが、動いた。

    確かに レビューどおりで Nexus One 2.2+ と同じぐらい。Total 1280 。 CPU が 4527 でスコアをこれで稼いでいる。 Memory, IO は Nexus One 2.2+ に負けているが、3D は ちょっと勝っている。ただ、Galaxy S と比べると 3D は 6 割ぐらい。

  • xPiano

    マルチタッチに対応していた。

  • pdf

    Documents To Go が入っているのだが、結構スムーズ。数ページのものなら問題なく使えるような気がする。200 ページぐらいのデータシートも 目的のページに行ければ 使えるかも。

    Ronzi A3 では解像度も低く使える気がしなかったのだが、使えるかもという気がしてきた。ただ使い込んでみないと まともな評価はできそうにない。

  • その他

    Flash 10.1 が入っていた。あと mkntfs, ntfsck が入っているから ntfs が使えるのだろう。

      # cat /proc/filesystems

      nodev sysfs
      nodev rootfs
      nodev bdev
      nodev proc
      nodev tmpfs
      nodev sockfs
      nodev usbfs
      nodev pipefs
      nodev anon_inodefs
      nodev inotifyfs
      nodev devpts
      ext4
      nodev ramfs
      minix
      vfat
      msdos
      nodev fuse
      fuseblk
      nodev fusectl

    fuse が入っているから、たぶん。

  • 所感2

    誤作動させてしまうことが多い。画面外に 5つのボタンがあり不意に触ってしまう。あと画面外にも反応しているような ... 持つときは側面を持つことになるが .. 今度は ボリュームボタンに触ったり。

    慣れだとは思うのだが ... いままで 縁が広い 抵抗式しか使ってないから ちょっと面食らう。あと爪で押そうとしたり ..

追記: 2.2 ファームウェアを USBbootTool で書き込むには

    2.2 のファームウェアは、update.zip の形式。zip をばらしても boot.img と system.img しかない。3.2 用の書き込みツールは、7 つのファイルが必要だが これをどうするか。

    結論から言うと

    • mbr-xboot.bin Android 3.2用
    • boot.img Android 2.2 update.zip から取り出す
    • recovery.cpio.img 2.2 update.zip の system.img から取り出す
    • system.img update.zip から取り出す
    • userdata.img 2.2 update.zip の system.img から取り出す
    • cache.img Android 3.2用
    • vfat.img Android 3.2用

    こう。system.img から recovery.cpio.img , userdata.img を取り出すには Linux を使うのが普通であるが、Windows のアプリ Linux-Reader (v1.6 以上) でも問題なく取り出せる。

    これで書き込んでみたが、ちゃんと立ち上がった。立ち上がるかどうかの確認だけでなく、ファイルなども調べていて、これで問題ないことは確認できている。これでいつでも元に戻せることになったので、自分の好みに合わせた CFW を作ろうと思う。

    ついでに マップ

    0x00000000 +------------------------+
    | mbr |
    0x00000200 +------------------------+
    | xboot | max 3MB - 512
    0x00300000 +------------------------+
    | boot.img | max 9MB
    0x00C00000 +------------------------+
    | recovery.img | max 14 MB
    0x01A00000 +------------------------+
    : :
    (partiton 3)| cache.bin | 32 MB
    : : (6 MB)
    : :
    0x04000000 +------------------------+
    : :
    (partiton 1)| system.img | 256 MB
    : : (1 MB)
    0x14100000 +------------------------+
    : :
    (partiton 2)| userdata.img | 512 MB
    : : (7 MB)
    0x34800000 +------------------------+
    : :
    : :
    (partiton 4)| vfat.bin | xxxx MB
    : :
    : :
    0x???00000 +------------------------+

    これは、2.2 / 3.2 で共通。(確認済み)。 Ronzi A3 / V65Pro と比べると /data の領域は 512MB で同じだが、無駄な領域を詰めて vfat の領域を増やしている。

    vfat.bin の領域のサイズは、最後までの 3GB + α。

CFW の作成方針

結構手持ちのマシンが増えてきて ややこしくなってきたので、できるだけ同じ環境にしようと思っている。当然ターゲットは、2.2 。まずは、最低限入れるアプリから。

  • ファイラー FileBrowser.apk (V65から)and/or ASTRO_3.0_218.apk (n7b から)
  • 動画 MediaPlayer.apk(system, n7b から, 旧ファイル名 SeeJoPlayer.apk)
  • pdf DocumentsToGo_V3.004.apk (n7b から)
  • ランチャー Zeam_Launcher_v315.apk (マーケットから)
  • ゲーム AngryBirds_2011-03-14_1.5.3_MIPS.apk(全部同じ)
  • ゲーム Fruit_Slice_V1.3.3.apk (n7b から)
  • ゲーム turbofly3d_4_V1.21.apk (n7b のみ)

  • 日本語入力 nicoWnnG-2011.0823.2-mips.apk
  • ツール Advanced_Task_Killer.apk (IQQ M1 から)
  • ツール AndroidOptimizerEn_207.apk (IQQ M1から) → ヤメ
  • 小物ツール RotatingScreen.apk , myVolume.apk , QuickRotationChange.apk

  • マーケットなどのシステムアプリ (osakana 氏 20111024 版から)
  • Flash Player 10.1 (n7b から)
  • Dalvik Turbo VM (全部に入れる)

当面これに 収束させていく。

    システム以外のアプリについて基本は、ファームウェアに入っていたアプリから選ぶ。ただ、Ronzi A3/V65Pro で 縦画面にするには、Zeam_Launcher + RotatingScreen が必要なのでこれは入れる。

    ファイラー は、ASTRO_3.0_218.apk (n7b から)が良さそう。横画面でツールバーが横に出てくれて 上下方向を圧迫しない。あと、テキストエディタのような小物が入るようだ。

    Android Optimizer (Optimize Tool Box) は、スタートアップで起動されて、しかも Novo7 の環境で ときどき落ちる。具合が悪いので使わない方向で。

    Advanced_Task_Killer は、Novo7 に Pro が入っているが、M1 に入っていたものにする。

    MediaPlayer.apk は、A3/V65Pro では再生できない。ライブラリのコピーが必要なのかも知れない。なんとか動かしたいものだ。

ちなみに A3 は、アプリだけでなくて 他も V65Pro に合わせていく。 まず framework は V65Pro のものをコピーして使うことに決めた。

とりあえず作った CFW が動いて、Dalvik Turbo VM ありでの Quadrant ベンチマークが出来た。


    Total: 1270 CPU: 4377 Mem: 816 I/O: 431 2D: 201 3D: 527 (normal)
    Total: 1570 CPU: 4838 Mem: 769 I/O: 1489 2D: 201 3D: 553 (Dalvik Turbo)

    (normal) は、レビュー記事の結果を転記。自分でもやって見たが同じような結果だった(記録は残していない)。不思議なことに CPUの伸びは 1割ぐらいなのに I/O が伸びた。2 回やって同じような結果だったから、そうなる理由はちゃんとあるのだろう。

    ちなみに、Ronzi A3 では、Dalvik Turbo VM ありで分かる体感的な性能向上は、アプリの起動。2-3 割だと思うが明らかに待ち時間が短くなっている。あり/なし の 2 台を並べてチェックもしたから間違いない。

    ひょっとしたらこの違いの主な理由は、I/O かも。

    あと、MoreLocale2 を入れたら日本語に設定できた。適当なものだが、問題がなさそうなら 作り方とか整理しようと思う。

AnTuTu bench

    Quadrant 以外にも 有名なベンチマークがあることを知ったので試してみたら、Ronzi A3 でも動いた。ようやく 60(B) と、どれぐらいの差があるのか数字で見ることができる。


    Ronzi A3 V65Pro Novo7 basic
    RAM: 84 93 195
    CPU integer: 243 275 517
    CPU float-point: 95 117 203
    2D graphics: 196 220 299
    3D graphics: 52 58 440
    Database IO: 40 75 245
    SD card write: (2.4MB/s) 24 (3.6MB/s) 36 (7.9MB/s) 79
    SD card read: (6.7MB/s) 67 (7.1MB/s) 71 (13.4MB/s)134

    Total score: 801 945 2112

    全部 Dalvik Turbo VM あり。SD card は、V65Pro と Novo7 basic が同じ。

    結果は、しょぼいものだが ... 一応 Novo7 basic は Nexus One に割りと近いし 全然違うわけでもなさそう。

    さて、CPU 性能。なんかクロックに比例しているような値。Ronzi A3 はちょっとの差で 720p が再生できないのか。2 倍の差があれば 1080p が表示できるのも妥当なところか。あと、2D は差が小さいが 3D は全然違う。2D は、画面サイズの違いも影響しているのだろう。

    I/O は、novo7 以外 妙に遅い。ひょっとしたら DMA 使えてないかも。

    RAM の性能差が大きいのも不思議。チップの数は A3/V65Pro の 2 個に対して Novo7 は 4個だが、アクセスのビット幅は 同じような気がする。

    あと絶対値については、Ingenic の メモリコントローラはしょぼいような気がする。だいたいバンクが上位アドレスに割り当てられていて インターリーブしていない。Jz4755 までしか見ていないが、バースト転送も 1 キャッシュラインを一気に読み書きできたかどうか...

    まぁ結果はしょぼいが、これでもちゃんと動画は再生できるし、きびきび動いている。ただ、A3/V65Pro の IO が 弱いのはちょっと問題か。 たぶん改善の余地があるんじゃないかと思う。RAM は厳しいだろう。できるとしたら オーバークロックぐらい?

    ちなみに、メモリクロックやCPUクロックの設定は、ブートローダが行う。カーネルはその設定を変更しない。カーネルでの CPU クロックの変更は、省電力のために 1/2 , 1/3 ... にすることぐらい ... だがそれすらも 組み込まれていない。

    ブートローダのソースコードが手に入ったことで、オーバークロックの実験ができるかも。

MediaPlayer の調査(1)

    MediaPlayer は、V65Pro に無理やり入れると、立ち上がりはするのだが、動画を見ようとするとエラーになる。

    一体なにが足りないのか? ダメもとでちょっと調べてみる。

    # ps | busybox grep video
    app_38 573 80 130288 18944 ffffffff 7ee0fd74 S cn.ingenic.videoplayer

    まずは、画面が出たところで、こんな風にすると 1 つのプロセスになっているのが分かる。


    # cd /data
    # cat /proc/80/maps > p
    # cat /proc/573/maps > s1
    # busybox diff p s1

    まずは、mmap しているものを親プロセスと比べてみる。

    ここまでは動くわけで、問題ないのではあるが、興味本位。

      /dev/pmem

      /system/framework/core.jar
      /system/framework/ext.jar
      /system/framework/framework.jar

    沢山出るが、興味を引いたのはこういうもの。動画は、フレームバッファをアクセスするのに、 /dev/pmem (物理メモリ?) を mmap している。

      /system/lib/hw/gralloc.npm701.so

    メモリの割り当てを管理しているのは、たぶんこれ。

    あと、/system/framework/ のいくつかの jar ファイルを新たに mmap している。


    # cat /proc/573/maps > s2
    # busybox diff s1 s2


    さて動画を再生して何が変わったか、チェック。

      /system/lib/libstagefright_foundation.so
      /system/lib/libjzipu.so
      /system/lib/libstagefright_x264enc.so
      /system/lib/libstagefright.so
      /system/lib/libstagefright_color_conversion.so
      /system/lib/libstagefright_avc_common.so
      /system/lib/libstagefright_amrnb_common.so
      /system/lib/libmedia_jni.so
      /system/lib/libvorbisidec.so

    これらのファイルのうち足りないものがあるのかも知れない。ファイル名やパスが変わっているだけだったり、機種に依存しないものが足りないだけならなんとかなるが、お手上げになる可能性も高そうだ。

    ちょっと /system/lib で関係ありそうなものを 比較してみた。

      Novo7:
      libmedia.so
      libmedia_jni.so

      libstagefright.so
      libstagefright_amrnb_common.so
      libstagefright_avc_common.so
      libstagefright_color_conversion.so
      libstagefright_foundation.so
      libstagefright_omx.so
      libstagefright_vffmpegdec.so
      libstagefright_x264enc.so
      libstagefrighthw.so

      libvorbisidec.so
      libjzipu.so

      Ronji A3:
      libmedia.so
      libmedia_jni.so

      libstagefright.so
      libstagefright_amrnb_common.so
      libstagefright_avc_common.so
      libstagefright_color_conversion.so
      libstagefright_omx.so

      libomx_aacdec_sharedlibrary.so
      libomx_affmpegdec_sharedlibrary.so
      libomx_amrdec_sharedlibrary.so
      libomx_amrenc_sharedlibrary.so
      libomx_avcdec_sharedlibrary.so
      libomx_avcenc_sharedlibrary.so
      libomx_m4vdec_sharedlibrary.so
      libomx_m4venc_sharedlibrary.so
      libomx_mp3dec_sharedlibrary.so
      libomx_sharedlibrary.so
      libomx_vffmpegdec_sharedlibrary.so

      libopencore_author.so
      libopencore_common.so
      libopencore_download.so
      libopencore_downloadreg.so
      libopencore_mp4local.so
      libopencore_mp4localreg.so
      libopencore_mpfflocal.so
      libopencore_mpfflocalreg.so
      libopencore_net_support.so
      libopencore_player.so
      libopencore_rtsp.so
      libopencore_rtspreg.so

      libvorbisidec.so
      libjzipu.so

    libstagefright って何だろう?
    ちなみに、jzipu.so は、IPU という Jz47xx の機能を制御しているところで、入れ替えるとまずそう。

    あと libopencore , libomx というのが見当たらない。

    libmedia , libmedia_jni.so と
    これだけそっくり入れ替えれば良さそうな気もするが ... どうなのだろう?


      $ strings libmedia_jni.so |grep stage
      libstagefright.so
      media.stagefright.enable-scan

      $ strings libmediaplayerservice.so |grep stage
      libstagefright.so
      libstagefright_omx.so
      libstagefright_color_conversion.so
      media.stagefright.enable-http
      media.stagefright.enable-vorbis
      media.stagefright.enable-player
      media.stagefright.enable-meta

    どうも libmediaplayerservice.so が使っているみたいだ。.. が libstagefright_x264enc.so を直接はリンクしていない。

    libstagefright* を入れ替えてみて、だめなら libmedia* も入れ替える方針でやってみよう。
    ついでに etc/*.bin も あやしい。

      Novo7:
      etc/h264_cavlc_p1.bin
      etc/rv9_p1.bin
      etc/vc1_p1.bin
      etc/h264_p1.bin
      etc/x264_p1.bin
      etc/mpeg4_p1.bin

      A3/V65Pro:
      etc/jz4760_bin/h264_cavlc_p1.bin
      etc/jz4760_bin/h264_p1.bin
      etc/jz4760_bin/rv_p1.bin
      etc/jz4760_bin/vc1_p1.bin
      etc/jz4760_bin/xvid_p1.bin

      etc/jz4760b_bin/h264_cavlc_p1.bin
      etc/jz4760b_bin/h264_p1.bin
      etc/jz4760b_bin/mpeg4_p1.bin
      etc/jz4760b_bin/rv9_p1.bin
      etc/jz4760b_bin/rv_p1.bin
      etc/jz4760b_bin/vc1_p1.bin
      etc/jz4760b_bin/xvid_p1.bin

    こういう関係だから .. libstagefright* を入れ替えるなら、ファイルを移動しないといけなさそう。

    追記: ちょっとやってみたが、ダメだった。 libmedia* も入れ替えたのがダメなのかも知れない。

    ちなみに、V65Pro では、etc/jz4760_bin/* を削除しても問題なかった。lib/4760b に ライブラリがあるが、同名の lib 直下のファイルも削除しても大丈夫のはず(未確認)

ed を使う

    ちょっと、build.prop を変更したくなったので、編集してみた。

      # mount -w -o remount /dev/block/mmcblk0p1 /system

      # busybox ed /system/build.prop

      "/system/build.prop", 64 lines, 1832 chars
      : $p

      dalvik.vm.heapsize=24m
      : s/24m/48m/p

      dalvik.vm.heapsize=48m
      : $p

      dalvik.vm.heapsize=48m
      : w

      "/system/build.prop", 64 lines, 1832 chars
      : q
      Really quit? y
      # reboot

    vi 使いだから ed を使うのに苦労はしないのだが ... ed を使ったのは一体何年ぶり何回目だろう

Novo7 advance との違い

    CPU は、まったく違うわけだが ... 筐体はまったく同じだし、周辺装置も同じ。価格はいまでこそ 3000円ぐらいの開きがあるが、以前は 1000 円ぐらいしか違わなかった。

      液晶もまったく同じものだろう。画素が長方形なのも同じ。

      ちなみに、basic の HDMI 出力は、720p / 1080p の 50 Hz/60 Hz が選べる。advance はどうか知らないが、液晶との同時出力可能らしいし、似た様なものだろう。

      USB otg 機能も両者付いている。

    メモリも同じ 512MB だし CPU の周波数も 両方 1GHz 。AnTuTu bench だと basic の方が若干劣るようだが似た様なもの。

      追記 : advance 2995 vs basic 2112 で全然違った -- SD Card という 外部依存の要素はあるにしても -- 思ったより差があった。
      ここに いろいろベンチマークの結果が出ているのだが、Quadrant Advance のスコアだと

      Wopad A7: 1537 CPU: 4471, Mem: 1495, I/O: 688, 2D: 232, 3D: 798
      novo7 basic: 1270 CPU: 4377, Mem: 816, I/O: 431, 2D: 201, 3D: 527

      こういう差になっている。(advance は詳細が出ていなかったので 同じ A10 のデータを採用)

    スリープでのバッテリーの持ちは、basic の方が若干良いらしい。動作可能時間も 8 時間ぐらいで似た様なもののはず。

    動画再生機能は、圧倒的に advance の方が良いらしい。ただし、basic でも 1080p は問題ない。

    CPU は、MIPS と ARM でまったく違う。basic で動かないアプリは多数ある。

    ー これでは、一般のひとに basic を勧める ネタがない。

    あえて言うなら basic は、 文鎮化しないのだが、advance のことはよく知らない。advance でも ファームウェアが壊れてもインストールできる機能を持っている可能性はある。

      ここに advance の ファームウェア書き換えのガイドがあった。

      これも USB から 書き換えるようだ。この機能がブートローダに入っていたりすると、やっぱり 文鎮化のリスクがある。ブートローダが SPI Flash など 別のチップにあれば リスクが随分減るが ... 一体どういう仕組みだろう?

    あと起動時間。basic は 30秒を切った。advance も まぁ 同じぐらいかも知れないが。

    起動時の ロゴは 3 種類。最初はブートローダが表示している。次にカーネル。最後の アニメーションは Android 。最初のロゴが出てから 25 秒ぐらい。アニメーションが出ている時間が かなり短い。

    ところで V65Pro は、48 秒ぐらい。アニメーションが出ている時間が半分ぐらい占める。

追記: Allwinner A10 機が続々出てきた

    EKEN も 2 機種

    http://www.eken.com/t01a/
    http://www.eken.com/t10a/

    最近は、同一筐体で 2 機種出してくるのが、流行りのようだ。

    • Allwinner A10 採用と 別 CPU とか。
    • Allwinner A10 だが 抵抗式/静電式とか。

    もうひとつの CPU だとか、 抵抗式のタッチパネルとか 単なる当て馬という気もする。

    さて、EKEN も 当て馬 2 機種がある。

    http://www.eken.com/t01f/
    http://www.eken.com/t10f/

    F とつけば、CPU は TMIC 1GHz と書いてあるんだが、CPU は何だろう?

MIPS では動かないアプリは多いのか?

    MIPS では動かないアプリを作るには、NDK を使う必要がある。数で言えば SDK だけを使ったものがほとんどであり、全体の割合では多くはない。

    ただ、わざわざ NDK を使うのには理由があるわけで、本格的なアプリでは動かないものの割合が増える。

    ー 基本的には、ライトなアプリは動くかんじ。

    といっても、具体的に何が動かないのか? 実は良く分からない。マーケットには NDK のアプリは出てこない ... のだが、NDK だから出てこないのか 別の理由で出てこないのかは、出てこない以上分からないのだ。そして、実際に MIPS のマシンから マーケットにつなげないと、出てこないというのが分からない。MIPS マシンを買ってしまった後でないと分からないのだ。

    マーケットというのは、ナカナカ難儀なシステムだ。なにかパラメータを入れることで、マーケットからダウンロードできるかどうか分かるサイトはないのだろうか?
posted by すz at 20:47| Comment(4) | TrackBack(0) | Jz47xx

2011年10月18日

Ronzi A3 のファームウェア

Ronzi A3 の (オリジナルの)ファームウェアは、2 つある。ひとつは、公式ファームウェア。もうひとつは osakanataro 氏が購入元からもらったもの。

ともに 5/11 版で 違いは、ファイル形式。更新ツールも違い、公式版は カスタマイズしたもの。osakanataro 氏が購入元からもらったものは Ingenic が提供しているものがベースで設定をカスタマイズしてある。

Jz4760/B 機 のファームウェアは、他にもある。ひとつは、IQQ M1 用。もうひとつは、Ramos V65Pro 用。

これで、3 機種分の ファームウェアが手に入った。ここで、それらについての解析結果をまとめていこうと思う。

ファイル形式 (Ingenic ツール用)

    以下の 7 つのファイルからなっている。

    mbr-xboot.bin : パーティションとブートローダ
    boot.img : カーネル と initrd
    recovery.img : カーネル と initrd (リカバリ用)
    system.img : ext4 / のファイルシステムイメージ
    userdata.img : ext4 /userdata の ファイルシステムイメージ
    cache.bin : ext4 /cache の ファイルシステムイメージ
    vfat.bin : /flash (等) 内部 FLASH ストレージの初期化データ (all 0)

    boot.img , recovery.img は、split_bootimg.pl で分離することが出来る。再結合は、Android ソース添付の mkbootimg コマンドを利用するそうだ。

     参考URL : リカバリイメージの解体と再構築 - urandroid

    分離した initrd は、cpio + gzip で固めたもの。
    例えば

    gzip -d < boot.img-ramdisk.gz | cpio -id

    で展開できる。

    ちなみに、これらの機種の FLASH は、すべて SD カードインターフェイス。NAND Flash を直で扱うような機種とは違って一般的なファイルシステムを使えるのだ。

      NAND Flash を直で扱う場合、書き換え回数とか チェックサムを管理しないとならない。NAND FLASH には、OOB というエリアがあるが、管理データの扱いは様々で解析が面倒なのだ。

ファイル形式2 (Ronzi A3 公式, Ramos V65Pro)

    このファイルは、上記 7 つのファイルをパックしたもの。個々のファイルを取り出す コード は、とりあえず出来た。

  • split_nib.c
  • split_nib.zip (.exe 入り)

    調べてみたところ、local のものと 公式版から 取り出したものは完全に一致した。

    解析の詳細:


    00: 4e 49 42 00 07 00 00 00 34 00 00 00 07 00 00 00 NIB
    01: bc e8 5c 18 88 07 00 00 fc 1a 0d 00 fc 42 39 00
    02: fc 32 6a 00 fc 92 a8 0c fc fa ac 0f fc 0a 8d 11
    03: c0 dd cf 06 88 07 00 00 74 13 0d 00 00 00 00 00
    04: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    先頭は、"NIB" で始まっている。-- NIB ファイルとでも呼ぼう。

    NIB 以降は、little-endian で 4 バイトづつの 値が入っている。

    最初の 0007 は、セクションの数。mbr-xboot.bin,boot.img,recovery.img, system.img, userdata.img, cache.bin, vfat.bin の 7 つのファイルに対応している。

    0x10 の 185ce8bc は、ファイルサイズで、次からの 7 つのエントリが それぞれのセクションの オフセット。

    わかっていないのは、0x34 から始まる 第二の情報。Flash に書きこむ 位置の情報と思えるが、釈然としない。

  • 最初の情報は、0x788 で mbr-xboot.bin のファイルオフセットと同じ。

  • 2番目の情報は、0xd1374 で、boot.img の ファイルオフセット 0xd1afc - 0x788。

  • その他は 0 。パーティションの先頭からという意味だろうか?

    そもそも mbr-xboot.bin が先頭に書かれるのかどうかも不明。だったりする。ここを解析できれば、パーティションを広げたり、さらには、Android でない別のものを書き込んだり出来るかもしれない。ただ、現状では、さらなる解析は必要ない。

    ちなみに、system.img , userdata.img , VFAT のサイズ配分を変えてもインストール出来るような気がする。確かめてみたい。(ファイルが別の場合、書き込み位置は、usbboot の方の config ファイルに書かれているから、当然これも変更する。1つの場合、もし位置情報が含まれているのなら、そういう面倒なことはしなくて済む。... だが、そういう情報はないのかも。)

mbr-xboot.bin

    先頭にパーティション情報 512B 。続いてブートローダのコード。

    ただ 856948 bytes とブートローダにしては、大きい。uboot でも 普通なら 100KB - 200KB ぐらいのもの。画像が含まれているのではないか? そうだとすると LCD ドライバがあるし、機種毎に内容が違うことになる。さらに言うと、定期的に LCD にデータを送り込まなくては画像は表示できない。割り込みに対応した OS が入っている可能性まである。

    IQQ M1 では、電源 Off の時に USB から充電しようとすると PMP でお馴染みの 充電のアニメーションが表示される。それはこの xboot でやっているのかも知れない。 Ronzi A3 では表示されないが、コードは入っているのかも。

    パーティション情報は、

    Device Boot Start End Blocks Id System
    /dev/block/mmcblk0p1 4162 12484 262144 83 Linux (/system)
    /dev/block/mmcblk0p2 13004 29648 524288 83 Linux (/data)
    /dev/block/mmcblk0p3 30298 31338 32768 83 Linux (/cache)
    /dev/block/mmcblk0p4 33289 254213 6959104 b W95 FAT32 (/sdcard)

    こんな風になっている。boot.img と recovery.img は、パーティション 1 の前の隙間にはいる。
    Blocks は KB 単位。Start と End は 31.5KB (63 x 512) 単位。

    Ronzi A3 の Flash は 4GB しかないので、FAT32の領域が大きすぎる。ここは、実際のサイズを元に 再フォーマットするようで問題ないらしい。

    Ramos V65Pro もほぼ同じ。 FAT32 のサイズが違うだけ。

    Start 位置を KB 単位に直してみる。

    Start real-size lbr-size A3-0511 V65Pro-0817
    system 131103 278523 262144 210905 200600
    usrdata 409626 544761 524288 67312 49434
    cache 954387 94216.5 32768 30724 30724
    vfat 1048603.5 - - 8 111607.44

    (参考) /proc/partions より toral 3799040 real-vfat 2750464 と判明。

    なんと ... もっと大きくできるのだった。lbr-size に合わせるならパーティションをいじらなくとも良い。
    lbr のサイズをいじるならもっとぎりぎりに出来る。ここまでは、Start 位置を変えなくともよい。

    Start 位置を変えてもインストールできるなら vfat の エリアを削れば良い。ただ system のスタート位置は変えないか、後ろにずらす。userdata は、実際よりずっと小さい。後で フォーマットし直すのだろうか? そのためには、mke2fs 関係のツールが必要だが、入っているかどうか要チェック。(A3 は、systeem/bin にあった)

    vfat の Start 位置は意外と重要らしい。というか SD カードインターフェイスとはいえ NAND Flash なのだから Start 位置は重要ではないか? NAND Flash の消去ブロックサイズは 512KB ぐらいある。

      Start 位置を 63MB 境界にしてしまうのは、どうだろう?
      Linux の Fdisk なら セクタ 63 , ヘッド 1, シリンダ 1 にしておいて、Start と Size を 1024 の倍数になるよう指定する。

      これを元にして、system.img を作りなおす。userdata は、app が入る最小サイズで良さそう。

      追記: 4760(B)_deefault.ini に 書き込み位置が書いてあるとのことなので、付きあわせてみた。

      16 進数 K 単位  Start x 63sec
      mbr-xboot.bin 0 0
      boot.img 0x500000 5120 K
      recovery.img 0xB00000 11264 K
      system.img 0x8000000 131072 K 131103 K
      userdata.img 0x19000000 409600 K 409626 K
      cache.bin 0x3A400000 954368 K 954387 K
      vfat.bin 0x40000000 1048576 K 1048603.5 K

      どうも微妙に違う。そういえば lbr の START 位置が FDISK では出ていなかった。なにか間違えたかも。それはともかく、ただの SD カードだから、パーティションは MBR の情報に従って分割される。これは間違いない。

      0x00000000 +------------------------+
      | mbr |
      0x00000200 +------------------------+
      | xboot | max 5MB - 512
      0x00500000 +------------------------+
      | boot.img | max 6MB
      0x00B00000 +------------------------+
      | recovery.img | max 117 MB
      : :
      0x08000000 +------------------------+
      : :
      (partiton 1)| system.img | 256 MB
      : : (16 MB)
      0x19000000 +------------------------+
      : :
      (partiton 2)| userdata.img | 512 MB
      : : (20 MB)
      0x3A400000 +------------------------+
      : :
      (partiton 3)| cache.bin | 32 MB
      : : (60 MB)
      0x40000000 +------------------------+
      : :
      : :
      (partiton 4)| vfat.bin | 2686 MB
      : :
      : :
      0xE7E00000 +------------------------+


      どうも これが正しいらしい。CHS ジオメトリでまるめているから間違えたようだ。


    V65Pro は、VFAT の初期値があるが、例によって demo 用の video などが入っている。8KB の all 0 で良さそうだ。どうせ後でフォーマットできるし。

boot.img , recovery.img

    これらは、他の Android と同じ構造。ファイルの先頭も ANDROID! となっている。

    カーネルのソースコードのベースは、たぶん MIPS のサイトにある。(未入手)

userdata.img

    app というディレクトリ配下に apk が入っている。

    最初に起動するときに インストールして apk を 削除?

system.img

    lib 配下に ダイナミックリンクライブラリがある。
    解析したいのは、ここ。機種非依存のものを更新したいのだ。Ronzi A3 のファームウェアは、更新されるような気がしない。一方 Ramos は有名なメーカなので、V65Pro は数が出るに違いない。ファームウェアが更新される見込みはある。IQQ M1 はよくわからない。それなりに人気はあるようだが..

      動画関係の不具合はひどい。再生できたり、出来なかったりする。想像では、間に合わないのが原因で buffer への先読みがまずい。Ramos は基本 PMP のメーカだし、これほどの不具合があれば直させるはず。

      Ronzi A3 の サスペンドのまま持つ時間は短いようだ。基本はカーネルで対処するのかも知れないのだが、userland レベルで多少なりとも改善する方法もあるかも知れない。例えばサウンド。回路を Off にしてないのではないか? .. とか。サスペンドするときに スクリプトを動かせるなら Off にして復帰するときに 戻す.. とか。ヒントは、IQQ M2 の boot.img 。これの initrd では、Wifi の Off が仕込んであった。

      追記: taobao での最近の販売数 上位 4 ショップの販売数の合計は、V65Pro 369 に対し IQQ M1 は 11 。

    app 配下に apk が入っている。これらは、一旦イントールしたら消せない? userdata.img にあるものとは扱いが違うらしいので、消せるものはどれなのか知りたい。

    あと userdata.img , cache.img recovery.img のコピーがまるまる入っている。このせいで ファームウェアのサイズがでかくなっている。どちらが不要なのか?

    本来の userdata.img , cache.img を all 0 にしておいてもちゃんとインストールできるような気がする。確かめてみよう。

追記: osakana 氏から CFW 20111018版 が出た。

    詳細は、リンクをみてもらうとして ... DalvikTurbo が入ったのが嬉しい。どんなものか使ってみたい。
    .. というか M1 にこそ入れたいところ。

    あと framework を入れ替えたとのこと。

    Media Player (SeeJoPlayer.apk) とか lib 配下のダイナミックライブラリーも入れ替えてみたいところ。ちょっとやってみたい。ただ、全部入れ替えると動かなくなるかも。

    ついでに書いておくと M1 に入っている Advanced Task killer と Optimized ToolBox も入れてみたい。

付録: Windows から system.img userdata.img を見る。

  • Linux Reader

    を使うと EXT4 のパーティションが読めるらしい。イメージファイルも直接開けるどころか vmdk とかも OK 。

    だが、実際やってみたところ、V65Pro , M1 の userdata.img や system.img は開けたものの A3 のはダメだった。例えば EXT4 は不完全だとか?

      追記: v1.6 になっていたので、試したところ EXT4 も読めた。Windows 環境しかないところでは重宝しそう。

    さて、A3 になくて M1 にある便利なもの。

  • Optimize Tool Box (Android Optimizer) (2011/0/21 現在 最新版は v2.1.0)

    どうもマーケットに出てこない。

    ここに、あるはずなんだが... Phone がないとインストールさせてもらえないようだ。... そういえば、M1 には、Phone.apk が入っていた。

    http://www.kfkx.net/AndroidOptimizer/AndroidOptimizer.html

    ここからダウンロードできるのは、中国語版。

    いろんな機能が入っていて、なにかと便利。

    あと、これと ギャラリーでは、見れるはずの動画がエラーになる現象が起きにくいようだ。ファイルを少し Read していたりするのではないか?

    ファイル名は、M1 では、cn_opda_xxx_207.apk となっている。

    ちなみに動画は、媒体?放 でみないとボリューム制御ができなくて具合がわるい。そして、動画プレイヤーとして、媒体?放を選べるのは、Optimize Tool Box だけだったりする。(一回、常に使用する設定をすれば ES ファイルエクスプローラでもこれが使われる)

    また、動画などを選ぶと、抜けられない。媒体?放 だと 終了すると戻って来るし、戻るアイコンもある。

    ただ、A3 は、動画の性能がイマイチ。720p mp4 は無理。さらに、信じられないことに音が悪い。M1 だと 720p は問題ない。

  • Media Player (SeeJoPlayer.apk)

    これは、system.img にある システムアプリ。

    媒体?放 のように、ボリュームコントロールが付いている。

      あとで分かったのだが、同じアプリの英語対応版。

  • Advence Task Killer

    メモリが少ないので、必要そう。M1 になって入ったということは、そういうことだろう。

    M1 になくて V65Pro や A3 にあるもの。

  • Android Assistant

    バッチアンインストールの機能がある。いろいろいじっている場合は意外にも便利。

    あとボリュームコントロール。 Optimize Tool Box にもあるが、すぐには出てこない。

  • Home 画面

    V65Pro は、PMP っぽい カスタマイズがされているようだ。

フォントについて

    フォントを入れ替えるという話題は 前は結構あったのだが、これはどうするべきなのだろう?

    ここに、 MTLc3m.ttf, MTLmr3m.ttf 自体はある。DroidSansJapanese.ttf というのもある。

    ググったら

      フォントのサーチ順序は、ソースを見る限り、MTLmr3m.ttf(モトヤLマルベリ3)、MTLc3m.ttf(モトヤLシーダ3)、DroidSansJapanese.ttf(これまでの標準)の順になっているので、/system/fonts以下に設置するだけで...

    なんて情報があった。MTLc3m.ttf あたりをそのままコピーしておけば良いのか...

    追記: osakanataro 氏よりコメントがあり、Android 2.2 では、DroidSansJapanese.ttf のみサーチするとのこと。MTLc3m.ttf を使うなら rename すべし。

ファームウェアカスタマイズの記録

  • カスタマイズ1 -- 失敗

    A3 の ファイルシステム が Linux Reader で見えなかったので、 V65Pro の system.img , userdata.img を使って A3 の中身を移す。

    android までは出たが ... その先に行かないようだ。失敗。

  • カスタマイズ2 -- 成功

    A3 の system.img , userdata.img を 当面はベースにする。

    まずは、userdata の shrink -- 不要なものを消して、M1 から気に入ったものをコピー。

    GoogleServicesFramework.apk
    Vending.apk
    com.icenta.sudoku.ui.apk
    ES_file_manager.apk (com.estrongs.android.pop.apk を rename)

    (M1 より)
    Advanced_Task_Killer.apk
    AngryBirds_2011-03-14_1.5.3_MIPS.apk
    cn_opda_a_phonoalbumshoushou_207.apk (Optimized Tool Box)
    Quickoffice.apk

    次に、system.img の SeeJoPlayer.apk を V65 のものと入れ替え。

    lib/jz4760b_lib は、どうも 機種依存性がないようなので V65 のものと入れ替え。

    MTLmr3m.ttf を fonts/ にコピー

    まずはここまで ....

      SeeJoPlayer.apk は、同じソフトだった。言語を 日本語にすると 媒体?放 が Media Player になる。

  • カスタマイズ3 -- 成功

    GoogleServicesFramework.apk , Vending.apk は、V65 や M1 では system.img に移動している。とりあえず V65 からコピーして、userdata.img の方の apk は消してみる。

    次、etc/jz4760_bin etc/jz4760b_bin -- どうもこれも機種依存ではなさそう。その上 60/60B 両方ある。これもコピーしておこう。

    ちなみにコピーはこんな風にしている。

    # tar -C /mnt/V65sys/etc/jz4760b_bin -zcvf 1 .
    # tar -C /mnt/A3suz_sys/etc/jz4760b_bin -zxvpf 1


    まずはここまで ...

      一応インストールできるところまで確認。


  • ちょっと調査

    さて、system 側の apk で V65 のみ にあるもの は、他に SoundRecorder.apk , TelephonyProvider.apk がある。逆に A3 のみなのは、Phone.apk 。

    これを V65 と同じにしてみる。ついでに M1 と比べてみると .. V65 よりさらに

      Dictionary.apk
      Gmail.apk
      Maps.apk
      NetworkLocation.apk
      Talk.apk

    と多数ある。これらは、後回し。まずは、V65 に近づけるのが目標。

    他に V65 と違うファイルがあるかチェック。

    etc:(V65 のみ)
    etc/ppp/chat-scripts/chat-777.conf
    etc/ppp/chat-scripts/chat-ctnet.conf
    etc/ppp/peers/evdodialer
    etc/wifi_switch.sh

    lib:(V65のみ)
    lib/huawei-em770w-ril.so
    lib/libDmplayer.so
    lib/libnl-tiny.so
    lib/libvia-cds7-cdma2000-ril.so

    lib:(A3のみ)
    lib/libext2_blkid.so
    lib/libext2_com_err.so
    lib/libext2_e2p.so
    lib/libext2_profile.so
    lib/libext2_uuid.so
    lib/libext2fs.so

    bin: (V65のみ)
    bin/akmd8975
    bin/lh
    bin/lw

    bin: (A3のみ)
    bin/mke2fs
    bin/verifier_test

    ついでにいかにも機種依存なファイル

    lib/hw/copybit.default.so
    lib/hw/gralloc.default.so
    lib/hw/gralloc.lynx.so
    lib/hw/lights.lynx.so
    lib/hw/sensors.goldfish.so
    lib/hw/sensors.lynx.so
    lib/wifi/modules/8192cu.ko
    usr/keychars/lynx-keypad.kcm.bin
    usr/keylayout/lynx-keypad.kl

    lib/libreference-ril.so (これも?)

    .ko はカーネルが違うから ダメ。lib/hw は、M1 では、

    copybit.default.so gralloc.xam5001.so sensors.goldfish.so
    gralloc.default.so lights.xam5001.so sensors.xam5001.so

    こんな風になっている。V65Pro と A3 では、機種の名前?が同じなので、ファイル名が重なる。

      ところで、Wifi は、同じ 8192cu.ko を使う ... ということは、USB 接続で 同じような モジュールを使っているのだろう。

      V65Pro は、A3 をベースに作った 第二世代の製品 と言えそうだ。ソフトだけではなくて、ハードも改善されている。CPU の高速化は もとより、ボタンを増やしたり。多分 サウンドにノイズが載るのも直っているのだろう。ちょっと欲しくなってきた。

  • カスタマイズ4 -- 成功(でもない)

    framework をまるごとコピーしても大丈夫なのだろうか?
    とりあえずやってみよう。

    # tar -C /mnt/V65sys/framework -zcvf 1 .
    # tar -C /mnt/A3suz_sys/framework -zxvpf 1


      android の代わりに miumiu が出るようになった。HOME 画面に変化はない。

      ... と思ったら ツールバーが違う。サウンド± のアイコンがない。... って osakanataro 氏も書いていたが、実際に見るまでなんのことか分からなかった。V65Pro は、サウンド±のボタンが付いているのだ。

      あと AngryBirds はちゃんと動いているような ..

      ToDo: ツールバー関係は元に戻したい。あと、PMPのような HOME 画面にするには、何が足りないのだろう? Launcher2.apk あたり?

  • テスト 1

    V65Pro の mbr-xboot.bin は動くのか ... 確かめてみたい。

    やってみたら、最初の 『ronzi 溶智』も出なかった。... まぁ当たり前か。ちなみに、ブートローダ は、最初に クロック周りの設定をする。そうしないとメモリも使えない。usbboot たと stage1 がそれを行う。SD カードからブートする場合は、mbr-xboot.bin のどこかに それをするコードと情報がある。クロックアップとかを試すなら mbr-xboot.bin をいじることになるのだ。

  • テスト 2

    userdata.img を vfat.bin (8KB all 0) と置き換えるとどうなるのだろう? もちろん、system.img の 中の userdata.img は残す。

    これはダメだった。system.img の userdata.img と recovery.img を消す osakanataro 氏の方法で shrink することにしよう。

      リカバリ... なんてのは、再インストールで良いのでは? と思う。どんな状態になっても 元に戻せるのだから。だが、リカバリーの機能を確認することが簡単なマシンでもある。失敗を恐れる必要がないのだから。まあ、いずれ。

  • カスタマイズの案

    microSD に 2 つめの Android を インストールする というのも出来ても良いかも知れない。

    カーネルは、本体のものを使うのならば、initrd を編集して、system.img の中の /dev/mmcblk0 を扱っているところを 修正する。

    これは比較的簡単だが、userland をいじる人向け。カーネル自体をいじる場合には使えない。... となると Dingux のように ブートローダを変更して dualboot にするのだろうか?

    xboot とは何だろう? ファームウェアを作ったところが 作ったのだろうか? それとも Ingenic が作って、どこかにソースを公開しているのだろうか?

      ブートローダを いじらなくとも kexec という機能が使えれば、別のカーネルを立ち上げることは可能。もちろん、オリジナルカーネルは、そんなものは config してなくて 使えない(はず)。まぁでもカーネルをいじるのが前提の機能だから、そのときは本体側のカーネルも入れ替えるのだろう。

      ただ、UI は考えないといけない。カーネルが動いている状態なら、画面出力自体はできるだろう。あとはボタンでなんとか。

      ... といってもカーネルを入れ替える理由は何だろう。開発中ならば、usbboot で簡単に入れ替えられる。まぁ出来ても良いのだが... ううむ。

  • カスタマイズ5

    build.prop はよく分からないが、これぐらいは編集しておいた方が良いかも知れない。

    ro.sf.lcd_density=160
    ro.product.locale.language=en
    ro.product.locale.region=US

    あと、

    rild.libpath=/system/lib/libreference-ril.so

    なんていう記述がある。
    これも V65 のものを 置き換えたらダメなもの?

    さて、system.img から userdata.img と recovery.img (ファイル名は recovery.cpio.img) を消しておく。

    あと nicoWnnG を入れてなかったので、userdata.img の方に入れておく。

      これで試した。まずは、書き込み終了から 2 分ほど 『ronzi A3』が
      出て 一旦真っ暗になり、2 分ほど経つと 『miumiu』が表示され 10-20秒ほどで HOME 画面になる。USB が接続されているので、続いて USB 接続の画面。

おまけ : bin/busybox について

    bin には、busybox が入っていて、結構な数のコマンドが ある。だが、使えるコマンドはもっと多いような ... bin の ファイルと後で比べてみよう。

    Currently defined functions:
    [, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash, awk,
    basename, beep, blkid, brctl, bunzip2, bzcat, bzip2, cal, cat, catv,
    chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt,
    cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cttyhack,
    cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df,
    dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du,
    dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid,
    ether-wake, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush,
    fdformat, fdisk, fgrep, find, findfs, fold, free, freeramdisk, fsck,
    fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep,
    gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd,
    hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd,
    init, insmod, install, ionice, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink,
    iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd,
    last, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap,
    logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr,
    lsmod, lzmacat, lzop, lzopcat, makedevs, makemime, man, md5sum, mdev,
    mesg, microcom, mkdir, mkdosfs, mkfifo, mkfs.minix, mkfs.vfat, mknod,
    mkpasswd, mkswap, mktemp, modprobe, more, mount, mountpoint, msh, mt,
    mv, nameif, nc, netstat, nice, nmeter, nohup, nslookup, od, openvt,
    passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root,
    pkill, popmaildir, poweroff, printenv, printf, ps, pscan, pwd,
    raidautorun, rdate, rdev, readahead, readlink, readprofile, realpath,
    reboot, reformime, renice, reset, resize, rm, rmdir, rmmod, route,
    rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script,
    scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont,
    setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum,
    sha512sum, showkey, slattach, sleep, softlimit, sort, split,
    start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd,
    swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar,
    tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top,
    touch, tr, traceroute, true, tty, ttysize, tunctl, udhcpc, udhcpd,
    udpsvd, umount, uname, uncompress, unexpand, uniq, unix2dos, unlzma,
    unlzop, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock,
    volname, watch, watchdog, wc, wget, which, who, whoami, xargs, yes,
    zcat, zcip

    一つもリンクされてなかった。

      awk basename bunzip2 bzcat
      bzip2 chroot cp cpio
      diff dirname du echo
      ed egrep expr getopt
      gunzip head hexdump hostname
      less losetup mknod od
      patch printf pwd script
      sed sort swapoff swapon
      tail tar touch uname
      unzip vi wc

    vi , less などは tty でないと使えないけれども、それは別にして これぐらいはリンクしておきたいところ。あと、ls などは toolbox の方をリンクしている。
    とりあえずは、以上のものを xbin の方にリンクを作っておこうと思う。

画面の回転について

    A3 を 縦画面で使ってみたいと思っていたのだが、どうしたら良いか分からない。

    で検索していたら、『日々模索: Witstech A81E カスタマイズ』という記事を発見。

    要は、

    • lib/hw/sensors.lynx.so を消せ
    • RotatingScreen.apk を入れろ。
    • 表示 → 自動回転 を ON にせよ。

    ということらしい。センサがないのにドライバがあると、位置を固定してしまうのかも。

    だだ ... A3 では 自動回転というメニューはない。どうしたものか....

    • 回転をロックするようなソフトで代用できる?
    • プロパティーをファイルで設定する? 名前は何?

    回転をロックするようなソフトで試したところ、Gセンサがある M1 と同じような動作になった。ロックの状態はちゃんとトグルするのだが、すぐ元に戻る。M1 の場合は、ロックすると必ず横向きで固定される。

      回転をロックする機能は、M1 に入っている Optimize Tool Box にもあった。Widget を add すると 7 つのボタンが付く。それぞれ機能を定義していくのだが、その中に ロック機能があった。

    要するに sensors.xxx.so が有効でないか、ロックされれば、横向きに固定している。

    これは ... framework をいじらないとダメなのではないか? たぶん同じところが作っているから、M1 や V65 の ものをベースにして、sensors.xxx.so を 削除しても同じかも知れない。

    ちなみに、他の機種でも、ロックされれば必ず縦になるようなものがあるようだ。

    追記: Optimize Tool Box をいじっていて気がついたのだが、回転はランチャーだけの問題ではないだろうか?

    Optimize Tool Box は常に縦画面で動作する。そこから、アプリをアンインストールできるが、ちゃんと縦画面になる。

    要するに、framework をいじらなくても、ランチャーの方をいじることで、縦画面にできるのではないか? .. といってもどうやっていじるのか分からないが。

    ググッてみると、例えば Screen 3 だけ強制的に 横画面にする(ベースが縦画面の機種) といった 改造版 Launcher2 を作っている人がいた。

    ただ、縦ベースの 機種で、横画面にしたいというのが、ほとんどのようだ。希望する機能のものがあるかどうか...

    ちなみに、ランチャーの入れ替え方法(例)

      (sdb shell)
      # rm -r /data/data/com.android.launcher2
      # mount -w -o remount /dev/block/mmcblk0p1 /system
      # busybox cp /sdcard/Launcher2.apk /system/app
      (再起動)

ボタンの設定について

    ボタンを押すと、スリープモードから抜けてしまう。スリープモードから抜けるのは POWER ボタンだけにしたい。

    TeckBooster: Androidのキー設定を変更する』という記事をみると何か 設定できるような気がするのだが ...

    やってみたのだが、どうもなにか違う -- スリープ状態には 2 つあるように見える。

    最初は、画面を消したり、サウンドを OFF するだけの状態。ここからだと POWER ボタン以外でも復帰する。だが、時間が経つと POWER ボタンでしか 復帰できなくなる。おそらく サスペンド状態になっているのだろう。

    もともと、希望どおりだということは分かった。設定は必要ないようだ。

CFW を作るスクリプト

    いろいろ試していると、よくわからなくなってくる。それで、CFW を作る手順をスクリプトにしておくことにした。

  • mkcfw-a3-1.0base.tgz

    これは、CFW を自動で作ってくれるような便利なものではない。CFW を自分で作れる人向けで、そういう人なら 見れば分かるだろうから説明はしない。

再インストール後の設定。

    何度もやっているが、忘れてしまいそうなので。

  • 言語、タイムゾーン、日付・時刻の設定

  • ES エクスプローラの設定

    サイズ: 小さい

  • nicoWnnG の再インストール

    userdata/app に入れるだけだとダメとのこと。
    結局再インストールが必要。

  • nicoWnnG の設定

    インストール後 → 開く

      簡易設定: キーサイズ 最小。
      詳細設定: 1. キーボードの下を空ける
            2. キーの高さ 最小
            3. 候補表示の高さ 小
            4. 候補表示のフォントサイズ 最小

  • 設定 言語とキーボード

    再インストール後に、使うように設定する。

      1. nicoWnnG IME にマーク
      2. 入力するところで、長押し。

  • ホーム

      ウィジェットの追加 検索 Web
      ウィジェットの追加 Switch keys

ソースコード

  • ランチャー : MIPS/packages-apps-Launcher2 (mips-froyo branch)
  • framework : MIPS/frameworks-base (mips-froyo)

    たぶんこれがベース。ちょっと見てみよう。

    android について何も知らないので、まずヒントを探す。

    新・開発者の戯言: Android開発に関する備忘録』 というのを見つけたのだが、

    //画面の回転動作を制御
    //横固定
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
    //縦固定;
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    //現状で固定
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
    //回転
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

    なんて書いてある。キーワードは、orientation か。

    で、まずは、ランチャーを見てみたのだが、何もしていないっぽい。改造して上記のようなコードを入れれば良いということか ....

    それはともかく、デフォルト値とか設定とかないのか? と思い framework の方を 探してみる。( framework の方は、変更するつもりはない。どんな制御をしているのか見るだけ)

      core/java/android/content/res/Configuration.java :

      デフォルトは、ORIENTATION_UNDEFINED のようだ。... ここを個別の機種対応で、いじっていないのなら、Gセンサー関係のコードがなにか悪さをしている?

      core/java/com/android/internal/widget/RotarySelector.java

      これは何だろう? まじめに見ないといけないかも知れない。

      あと、setRequestedOrientation に関係あるのは、

      core/java/android/app/Activity.java:
      core/java/android/app/ActivityManagerNative.java

      このあたり?

      ところで、Gセンサー関係のコードがなにか悪さをしているなら、強制的に 横画面/縦画面にするしかなさそう。たとえば workspace 0 , 1 は縦画面、2 , 3 は default動作(センサ?) 4, 5 は横画面とか。たぶんこれが簡単に対処できる方法ではないかと。

    縦画面について

    ちょっと Optimize Tool Box を使ってみているのだが ... ひとつ、縦画面での入力になるところがある。

        App Manager → Desktop folder
        ここで、+ を押すとカテゴリ名を入れるダイアログが出る。

      12 キー になっていないと、ひどいことに。

      あと、各種の設定を呼び出せるのだが、縦画面だったり横画面だったり。どういう仕組みなんだろう?

      追記:

      # mount -w -o remount /dev/block/mmcblk0p1 /system
      # mv /system/lib/hw/sensors.lynx.so /system/lib/hw/sensors.lynx.so-org
      (再立ち上げ)

      例えば、上記のようにして、sensors.lynx.so を使わないようにすると、挙動が少し変わる。

      Optimized Tool Box からの アンインストールや (Quick Profilesでの)各種設定 などが縦画面ででる。あと、ツールバーからの USB 関係の設定や、Advance Task Killer なども。

      あと アプリケーション実行中に不意に縦画面になる場合があるようになった。どうも インストール終了のメッセージ が出ると縦になるようだ。

    • SensorSimulator

      ところで、こんなものがある。G-sensor がどういう状態か見ることが出来るらしい。

      追記2:

      Zeam Launcher を使うことで RotatingScreen.apk で縦画面にすることが出来た。

      • Zeam Launcher の設定は、Sensor rotation ON
      • /lib/hw/sensors.lynx.so は削除しないと すぐ元に戻る。
      • 自動回転 ON にしないと、ランチャーから起動したアプリが横画面になる。要注意。

      アプリが横画面だと、終了時 横画面に戻るが ほぼ満足。Zeam Launcher は、使いやすいし、これで良いんじゃないか。

    アプリをビルドするには?

      実はなにも知らないのだが... とりあえず Launcher2 をビルドしてみたくなった。

    • Eclipseのプラグインで開発

      これみると、Eclipseとプラグインが必要らしい。

      あと JDK と Android SDK 。これは入っている。とりあえず、Android SDK だけ取ってきていて、そのときに JDK を要求されたから JDK も入れた。

        Android SDK は、不明なデバイスが出るのが気持ち悪かったので 取り敢えず adb のドライバを入れるのに取ってきていた。後で adb を動かすようになったけど、まだ adb しか使ってない。

    カーネルソース

      いきなり別の話になるが、ソースつながりで....

      カーネルのバージョンは、端末情報から 2.6.32.9 だと分かる。だが、Ingenic が公開しているソースは、2.6.31.3 ベース。しかも Andoroid のコードは入っていない。

      で、Android 対応のカーネルソースが見つかれば良いのだが、残念なことに見つけられていない。

      だが、幸いなことに、WM8650 の Android のカーネルソースは手に入った。バージョンも 2.6.32.9 ベース。これを参考に Ingenic のソースを マージすれば ... あるいはなんとかなるかも知れない。

      あと、android のカーネルソースもある。

    • MIPS/kernel-common (android-2.6.32.9)

      このソースと WM8650 のベースに差があるとは思うのだが ...

      linux -- android-2.6.32.9 -- WM8650

      として差分を見てみることにする。

    • android-2.6.32.9.tar.gz ( 新規分 ファイルリスト )
    • android-2.6.32.9.patch.gz ( パッチ ファイルリスト )

      まずは、android-2.6.32.9 まで。
      新規分 ファイルリスト を抜粋すると ...

        kernel/power/userwakelock.c
        kernel/power/earlysuspend.c
        kernel/power/fbearlysuspend.c
        kernel/power/consoleearlysuspend.c
        kernel/power/wakelock.c
        drivers/i2c/chips/pca963x.c
        drivers/rtc/alarm-dev.c
        drivers/rtc/alarm.c
        drivers/switch/Makefile
        drivers/switch/switch_gpio.c
        drivers/switch/Kconfig
        drivers/switch/switch_class.c
        drivers/misc/wl127x-rfkill.c
        drivers/misc/kernel_debugger.c
        drivers/misc/pmem.c
        drivers/misc/apanic.c
        drivers/misc/uid_stat.c
        drivers/usb/gadget/f_adb.c
        drivers/usb/gadget/f_mass_storage.c
        drivers/usb/gadget/android.c
        drivers/leds/ledtrig-sleep.c
        drivers/net/pppolac.c
        drivers/net/pppopns.c
        drivers/char/dcc_tty.c
        fs/yaffs2/...
        net/ipv4/sysfs_net_ipv4.c

      全部で 87 ファイルあるが、そのうち 33 ファイルは yaffs2 。あとは Android とのインターフェイス周り 。パッチは 130 ファイルだが、それぞれの修正は少ないようだ。

      さて、WM8650 に移植したものはどうなったか。

    • android-2.6.32.9-wmt.tgz ( 新規分 ファイルリスト )
    • android-2.6.32.9-wmt.patch.gz ( パッチ ファイルリスト )

      新規で 422 パッチ 156 と巨大だった。あまり見たくないのだが ...参考にする場合があるかも知れない。

      あと、新規ファイルには config ファイルが含まれる。これは重要。

      自分でカーネルをでっち上げるつもりは、あまりないのだが、android での変更は思ったより少ない。最悪なんとかなりそうな気はする。

      ちょっとどれぐらい大変なのか。検討してみることにした。

      まず、Ingenic のカーネル :

      これを 以下の 5 つに分ける。

      で、パッチを linux-2.6.32.9 に適用してみる。rej が出たファイルのうち Makefile と Kconfig を除いたものは以下のもの

        drivers/mmc/core/mmc.c.rej
        drivers/mmc/core/core.c.rej
        drivers/serial/8250.c.rej
        drivers/usb/musb/musb_gadget_ep0.c.rej
        drivers/usb/musb/musb_regs.h.rej
        drivers/usb/musb/musb_gadget.c.rej
        drivers/usb/musb/musb_core.c.rej
        drivers/usb/gadget/file_storage.c.rej
        drivers/usb/gadget/gadget_chips.h.rej
        drivers/mtd/ubi/upd.c.rej
        drivers/mtd/nand/nand_ids.c.rej
        drivers/mtd/nand/nand_bbt.c.rej
        drivers/mtd/nand/nand_base.c.rej
        drivers/mtd/mtdblock.c.rej
        drivers/input/keyboard/gpio_keys.c.rej
        arch/mips/include/asm/bootinfo.h.rej
        include/linux/mtd/mtd.h.rej
        include/linux/mtd/nand.h.rej
        include/mtd/mtd-abi.h.rej

      mtd 関係が多い。mtd と それを使う yaffs2 や ubifs は使わないので、移植を全部捨ててしまうなら、まぁなんとかなりそうな感じ。ただ、gpio_keys.c は全然だめ。

      これにさらに、android の変更が入る。gadget や input あたりが結構関係しそう。まぁ実際に作業するなら、android のパッチを当ててから ingenic の パッチを当てることになるだろう。
      じゃぁということで、linux-2.6.31.3-jz-r1198.patch.gz を mtd 関係とそうでないものを分ける。

      mtd 関係の変更が実に多かった。-- SD カードインターフェイスになったのは、意外と移植が間に合わなかったためだったりして。


        285 musb_core.c.rej
        964 musb_gadget.c.rej
        212 musb_gadget_ep0.c.rej
        22 musb_regs.h.rej
        1483 total

      これは嫌だと思ったのは、musb 。musb とは、いわゆる OTG コントローラのことらしい。そういえば、OTG はサポートしておらず device only かも知れない。A3 とかにも 切り替える機能は全然なかったし。
      とは言え 、JZ4760 以降の OTG サポートした USB-2.0 インターフェイスは、それまでの ものと全然違う。(無理やりでも) device only として config できるなら、musb を一切サポートしないということが出来るかも知れない。そうでなければ、この面倒なのをなんとかしないと ...
      とりあえず、linux-2.6.31.3-jz-r1198-nomtd.patch.gz をさらに 3 つに分ける。

      gpio_keys.c がまずいのは、汎用のコードを 専用のコードに書き換えてしまっているから。-- たぶん、linux-2.6.31.3 版を 元に 名前を変えてコピーし、gpio_keys.c には手を入れないのが良いのだろう。

      追記: 10/30

      ftp://ftp.ingenic.cn/3sw/Jz4770/01LinuxBsp/20110729/source/

      に Ingenic のカーネルの最新版があった。日付は 8/9 だが、置かれたのは 10/28 。

      ベースは相変わらず 2.6.31.3 だったが .. なにか変わったのだろうか? とりあえず見てみよう。

    ターミナル・エミュレータ アプリ

      Android にも ターミナル・エミュレータ があるということを知った。

      で、さがしてみたら github.com に登録されているのが見つかった。

    • jackpal/Android-Terminal-Emulator

      みたら jni というディレクトリがある。... ということは NDK 。マーケットで 名前を指定しても見つからないはずだ。

      それはともかく、ソースコードがあるのは幸いだった。なければ、MIPS では動かしようがない。

      ところで、元ネタは 『Android NDK でネイティブ CUI プログラムを書く!』の記事。stdin / stdout を使うコードが書けるとは、ちょっとした驚きだった。libc や libstdc++ があるのだから、出来て当然 ... とは思わなかった。
posted by すz at 21:06| Comment(7) | TrackBack(0) | Jz47xx

2011年10月09日

JZ4770 Android MID

最初の Jz4770 機として NOVO7普及版(GC860) が出てきた。

IQQ M1 を買ったばかりなので 当面Jz4770 機を 購入する予定はないのだが、いずれは買うと思うので、まとめのページを作っておこう。

Jz4770 機の魅力

    Android端末を選ぶ基準』の記事とダブルのだがいま一度書いておこう。

  • カーネルのソースコード や xburst(= MMX/SSE 拡張のようなもの) 対応の jpeg6b, mplayer のソースコードが公開されている。さらには、GPU の SDK も公開。

  • USB からブートする機能があり、文鎮にはならない。

    自分でビルドしていじりたいような人間にとって、この 2 つの特徴は非常に魅力があるのだ。まずは、ソースコードが公開されていないと話にならないが、USB からブート または SDカードからブートする機能も重要。動くかどうかわからないものでも安心して実行させられる。-- 簡単に文鎮になられてはたまらないのだ。

    ほかのいくつかの CPU もカーネルのソースコードは公開されているし、USB or SD ブート の機能があるものもある。だが、チップの付加機能を使えるとは限らない。Jz4770 は、そういう意味で楽しいチップなのだ。

    中華MIDは、一般的に言って 基本機能がこなれていない。ソースコードを見てデバッグするような人が出てくると、使えるマシンに成長していく可能性がある。

  • MIPS であり ARM でない。

    一般の人にはデメリットかも知れない。NDK を使ったアプリは動かないからだ。だが、使うほうより作るほうに楽しみを求める人間にとっては、逆に魅力があったりする。他には、Andoroid MIPS のメーカが少ないために情報が発散してしまわないというのも魅力だったりする。

  • 1 GHz で安価な CPU。

    1 GHz というのは、いまや最高の性能ではない。だいたい普及帯の性能レンジになってきている。 だが、MIPS としてはようやく手に入れられるようになった 高性能 -- 長い間 Ingenic の CPU は 400MHz 程度だった。 他に比べて見劣りしないというのは、動機という観点では重要だ。

    安価というのは、推測。だが、今までの Ingenic CPU は安価だったし、NOVO7 の 2 機種の価格差からみて実際に 安価であろう。ひょっとしたら RK2918 (Cortex-A8) より随分安いのかも知れない。

    これは、Jz4770 機が実際に 多数でてくれば、あきらかになっていくだろう。

  • 十分な動画性能

    Android 機には、動画性能が十分でないものがあるようだ。そして普通それはソフトの問題。開発に十分なコストを割けないために 起きている問題だ。

    Ingenic の Jz47xx では、あまりそういう問題は起きておらず CPU の能力を使えている。ただ、今までは CPU の能力が低く 他と比べて見劣りしていた。Jz4770 でようやく H.264 1080p を再生できるようになった(はず)。

    ちなみに 再生の処理のほとんどは、CPU が持つ xburst 命令(MMX/SSE のような拡張命令 ただしデータ幅は 32bit しかない)で行っている。VPU というハードウェアアクセラレータがあるが、これも中身は MIPS xburst 。これで間に合うのだから たいしたものだ。逆に 他の処理で xburst で高速化できるようなものがあるかも知れない。そういう意味で xburst に、ちょっと期待している。

NOVO7普及版(GC860) のスペック

    OS: Android 2.2.1
    CPU: Jz4770 (1008 MHz) / GPU GC860 (444 MHz)
    RAM: 512MB
    Storage: 4GB (SD Card interface , ext4)
    バッテリー容量: 4000mAH (1 cell)
    動作時間: 10 時間 (4000 mAH / 400 mA )
    サスペンドでの持ち時間 : 285 H (4000 mAH / 14 mA )
    液晶: 7inch 800x480 静電式 multi-touch
    価格: 〜599元 (〜8386円 : 14円/元換算) -- (※)
    ファームウエアの入手: ?

    ※) 時間は、中華流サバ読み計算方法による
    ※) 実際に買う場合、手数料と国際送料が加算される。


    追記: 分解写真を見付けた

    http://tabletrepublic.com/ainol-novo7-basic-disassembled/2011/10/07/

    ここ。

    まずは、この写真をチェック。

    http://tabletrepublic.com/wp-content/uploads/2011/10/024500hbnn45ubq827u7bb.jpg

    CPU を見ても変わり映えはしない。注目すべきは、回りのチップ。

    左上の IC は、おそらく SDカードの中の IC と同じもの。Ronzi A3, IQQ M1 と同じ仕組みのはず。生の NAND Flash のマシンと比べれば、いじるのが楽で嬉しい特徴。(MicroSD が内部に載っている方が嬉しいが、それはさておく)

    ひょっとしてファームウェアを作っているところも同じだったりして...

Jz4770機は安いのか?

    NOVO7普及版 は、599元だそうだ。静電式マルチタッチで RAM 512M でスペック的には遜色ないものが 599元だから、これから出てくるものものの中にはこれより随分安いものがあるかも知れない。

    でも、日本で売られるとすれば、これぐらいでないとウケない。静電式マルチタッチ + RAM 512M を条件として ライバル機と比べてみよう。

    まず、559 元 を 8386円 と書いたが国内のショップで売られる場合こんなに安くならない。450 元の Bopad Q500 9480円になった。ここから逆算して 21円/元換算 ぐらいが妥当そうだ。

    ... だとすると 12580円 あたり。

      赤札天国というところで 『Ainol NOVO7 Basic 4GB 予約受付中』だそうだ。価格は、10980 円。

      思ったより安い。こんな価格付けなら、国内のショップの方が良い。思わず買ってしまいそうだ。... だが少なくともファームウェアがダウンロードできてから。サスペンドまわりも気になる。それに.. 5inch の方が欲しい。まだまだ待つのだ。

      追記; 予約が終わったら、11780 円になっていた。ファームウェアは、ここ に置かれるらしい。(novo7 basic は、まだ)

    http://www.geocities.jp/aesthetic_music/memo/android.html

    Androd 機をまとめているページがあったので見たのだが、RK2918 や TCC8803 は、一般にもっと高いようだ。TCC8803 機のほうが若干安めで Dawa D8 が 14980円。あと サムソン S5PV210 というのもあるが 似たような感じ。

    まぁ 最新だから安いというのもある。CPU の差だけで 価格が随分違うのもおかしな話ではある。だが、ファームウェア・メーカとライセンス料の存在がある。カスタマイズするにも開発コストがかかり、その分をなんらかの形で徴収しないといけない。単なる推測だが、Jz4770 だと Ingenic が結構負担していることになるかも知れず、その分安くなるのかも知れない。

    適当なのであんまり参考にならないのだが aliexpress.com で検索してみた。静電式マルチタッチ + RAM 512M を条件にしたのは同じ。

    追記: aliexpress に 出てきた。

      novo 7 cortex a10 tablet pc android 2.2 1GHz Xburst capacitive $113.50($96.84 + $16.66)

      これだと、8800 円ぐらい? 十分安いが ... Paypal 使えなくなっているし。

        $129.29($112.63 + $16.66) に値上げされている。-- 10100 円ほどか。まぁ妥当な価格っぽいが、格安感はなくなった。

      novo 7 cortex a10 tablet pc android 2.2 1GHz Xburst capacitive (lina zhang's store)

      ここは、超あやしい。$155 / 3個 Freeshipping なんて 違うものが来そうだ。上のリンクも cortex a10 なんてデタラメ書いてあるが、買っている人がいるから freedback で分かるはず。下は買っている人もいない。さすがに嘘っぽいからか。

      追記: 上記のショップは、"Shenzhen Eternal Technology" というらしい。で、下のショップは、画像も含めてまるまるコピーしている。画像には、Eternal という文字が見えるし ... 怪しいどころではない。

      Ainol Novo 7 (basic version) 4G tablet PC Android 2.2 7 inch capacitive screen A10 xburst dual camera HDMI $117.89 (free shipping)

      微妙に安いところが出てきた。まぁこれからも出てくるかも知れない。いまのところ、"novo 7 basic" では引っかからず xburst で 引っかかるところもある。

    ドキドキ堂 で

      9990 円(送料無料) になっていた。

      送料無料だし、相当な格安感がある。599元に対して 3.3 割増し の計算 (12.5円/元換算)。
      ひょっとして、在庫処分? あるいは中国本国で既に値崩れしているとか?

      私としては、安く購入できて良いが、Ingenic は大丈夫なのだろうか? Jz4770 も Novo7 basic しか採用していないし。

追記: 2011/10/11 所感

    最初に注目を集めた中華パッドは EKEN M001 だった。

    1万円で買える超激安Androidタブレット「EKEN M001」が登場

    なんて記事が出たのが 2010年04月末のこと。

    CPU は WM8505 330 MHz(?) メモリ 128MB あれから一年半 -- その間に RK2808 (600MHz) / メモリ 256 MB の Moose E7001 が注目され、TCC8902, WM8650 の マシンなどが出た。

    その後の話は、なんだか良く分からない。が、WM8650 / メモリ 256MB 程度のマシンは、まったく注目されないようになった。

    いまは、1GHz , メモリ 512MB , 静電式マルチタッチ が普及帯? かつて、ドッグ・イヤーという言葉があったが、それを久々に体感したような気がする。

    こういう流れにあって、 Ingenic から ようやく 普及帯 レベルの CPU が出てきた。半周ぐらい遅れている感じはするが、チップを自社製造しなくなったと思うので、RK29xx の RockChip 社 などとチップの性能で良い勝負を繰り広げていくのかも知れない。

      Jz4780 をググるとなにか出てくる。ガセかも知れないが 次は 1.3GHz だそうだ。そして 来年には 2.0GHz 。自社で製造しないし、シュリンクが基本ならそれも可能なのだろう。
      Ingenic に有利な点があるとすれば、130nm で 600MHz を叩き出している点(Jz4760)。プロセスルールに対して 周波数が高い。ちょっと期待してしまう。

    でも、中身はまだまだという気がする。ソフトの開発は時間がかかる。Ingenic は、ソースコードを積極的に公開している。その努力がいずれ実ると思いたい。

    個人的には、どこまでも自由に使えるマシンというのは夢なのだ。そのためには、ソースコードを積極的に公開しているようなところが、競争に淘汰されずにタイムリーにマシンを供給してくれないといけない。

    あと、自分の開発力には限りがある。あれもこれもやる余裕はない。そういう意味で Ingenic に注目している。 ARM を選ぶと選択枝が多すぎて目移りする。MIPS なら、選択枝はない。しかも、ひとつの CPU の製品寿命が比較的長い -- 末永く楽しめそうなのだ。

    とりとめがなくなったが、言いたいことはひとつ。Jz4770 がんばれ。

追記: 『詳しい記事』があった。

まずは、気になる消費電流。

    サスペンドで 14mA , (明るさ 50% での) 動画 370mA - 450mA だそうだ。バッテリーは 4000 mAH。
    USB からも充電できる(500mA)けれども、AC アダプタなら 5V 2A なので早く充電できる。

    4000 mAH で 14 mA なら IQQ M1 流計算方法だと、サスペンド 284 時間。こんなには無理だろうが M1 の 1.5 倍持つ計算。-- 3 日は大丈夫そうだ。

    (明るさ 50% での)Angry Birds は、500 mA 。動画では、VPU などを駆動するが CPU を 100% は使わない。だが、Angry Birds は、常に CPU を 100% 使う (はず) 。ずっと Angry Birds を動かしてどれぐらいバッテリーが持つかというのは、基準として使えるかも知れない。

    サスペンドでの消費電流は、IQQ M1 の 9 mA より多い。これは、メモリが 2 倍載っているためかも。ところで、サスペンドとずっと書いてきたが、スタンバイと記事には書いてある。2段階の処理になっているようなので、もう少し消費電流が減るかも。

カーネルは、2.6.32.9-svn9261 zyliu@ubuntu3

    IQQ M1 は、2.6.32.9 clvia@ubuntu -- ここからも FW は、同じ所で作っていることが分かる。

CPU は、1008 MHz (BogoMips 1005.97)、GPU GC860 は、444MHz 動作。 あとメモリは、DDR2 504 Mhz 。

    CPU 性能は、 Cortex-A8 (2.0 DMIPS) and Cortex-A9 (2.5 DMIPS) に対して 1.5 DMIPS と書いてある。

    MIPS24k のデータから取ってきた値のような ... 2次キャッシュ付きというのを考慮してないかも知れない。Cortex-A8 程度はありそうな気がするのだが ...

分解写真もある。

    ストレージには、SK6617 (SD card controller) が付いている。Ronzi A3 や IQQ M1 も同じようなチップが付いている。Write 11 MB/sec と書いてあるが、SLC での最速ケースかも知れない。MLC では、1/2 だと思っておいた方が無難。あと、ウェア・レベリングはしているのだろう。そうでなければ、ext4 を使うのに不安が出てくる。

リモコン付き

    リモコン? そんなものが必要になるような使い方が出来るということ?

    ... HDMI があるから 大画面で楽しむことができるのか。Jz4770 の TV BOX が出るのもそう先の話ではなさそう。

ベンチマーク

    Nexus One 2.2+ (Cortex-A8 1GHz) との比較でわずかに負けている程度。だが、MIPS-optimized virtual machine のためだと記事には書いてある。Dalvik Turbo が入っているのか?

    2D, 3D は、RK2918 (Cortex-A8 1GHz / GC800 550 Mhz) に負ける。あともうひとつの CPU である VPU は、500 MHz だそうだ。

    Quadrant Advanced というのを使っている。 MIPS でも動くベンチマークがあったのか。

      Total: 1270 CPU: 4377 Mem: 816 I/O: 431 2D: 201 3D: 527

      と出ている。

      NDK ではないが、GPU がないと動かないらしい。Ronzi A3 でやってみたかったのに。残念。

        追記: Quadrant が A3 で動かないのは、"stencil buffer" がないため。 CPU とか GPU が関係ない項目を計りたいだけなのだが、計らせてくれない。この "stencil buffer" は、アプリケーションでは、glGetIntergerv(GL_STENCIL_BITS) で チェックするらしい。

      追記: ちょっと RK2918 の結果を拾ってきた。

      Total: 1246 CPU: 2341, Memory: 986 I/O: 2119 2D: 175, 3D: 607

      Arnova 10G2(2.3) という機種らしいが詳しくは知らない。値のバランスを見ると、Novo7 は、CPU がやたら高く、I/O が低い。やはり CPU そのものの性能は反映していない。なにを動かしてもこの性能であれば良いが、動かすものが増えると遅くなってくるらしい。

      思ったのだが、もし Dalvik Turbo を使うなら、キャッシュサイズは、大きくすべきではないか。

      # busybox du /data/dalvik-cache
      35731 /data/dalvik-cache

      キャッシュは、こんな風に Flash に書き出す。小さいと頻繁に入れ替えが起きるかも知れない。そうなるとFlash の寿命が心配になってくる。とはいえ、大きすぎるとメモリを圧迫するのかも知れない。

      キャッシュサイズを 128 MB に設定してみて どうなるか見てみるべきかも。

      # cat /proc/*/maps | busybox grep dalvik-cache

      こんな風にしてどう使われるか見てみたのだが、mmap して使うようだ。

        2cf6c000-2cff9000 r--p 00000000 b3:02 3331 /data/dalvik-cache/system@framework@ext.jar@classes.dex
        2d292000-2d8c8000 r--p 00000000 b3:02 3332 /data/dalvik-cache/system@framework@framework.jar@classes.dex

      map のしかたは、copy-on-write でたぶん書き換えるからメモリは消費する。ただ、動かすものすべてをキャッシュに作るような制御なら キャッシュサイズを大きくしても 消費メモリは変わらない。そうではなく、存在するものだけ mmap するなら キャッシュサイズが小さい方が消費メモリが減る。ただし、キャッシュを頻繁に書き換える恐れが出てくる。いずれにせよ、書き換え頻度が多いようなら Dalvik Turbo の使用を諦めるべき。

    Vellamo だとひどい結果だ。Nexus One にだいぶ差をつけられている。

      半導体大手のQualcomm 社の Vellamo というベンチマーク で新しいもの ?

      Ronzi A3 にインストールだけは出来るようだ。だが、3D グラフィックは 見られたものではなかった。
      あと、オンラインでないとテストできないような項目も多数。

メモリ


    cat / proc / meminfo
    MemTotal: 375512 kB
    MemFree: 77060 kB
    Buffers: 27940 kB
    Cached: 142212 kB

    384 MB か -- frame buffer とかに 128 MB も取っているのか。まぁ HDMIの解像度なら、これぐらい必要か。

動画

    再生が失敗する画面が出ていた。... ronzi A3 とかと同じ問題を抱えているかも。

    いまのやつは、間に合わなければ、エラーにしてしまう。(性能が低い)ronzi A3 で 720p を見ると、数秒表示してエラー。それは良いのだが、解像度が低い場合でも すぐエラーになることがある。ファイルからの読み込みが間に合わなくともダメらしい。


追記 2011/11/1: Novo 7 basic のファームウェアが出てきた。(osakanataro氏の記事)

ファームウェアは、2種類

  • Android 2.2 アップデート版 Novo7Basic_android2.2_20111029

    これは、update.zip を microSD に入れて volume-up ボタンを押しながら立ち上げ、最初のロゴが出た所で離すとインストールされるものらしい。

    最初のロゴなら、xboot のはず。ブートローダ(mbr-xboot.bin)が あれだけ大きかったのは、この機能を含んでいたためかも。

    追記: 中国語なのでよくわからないが、ユーザ登録が必要なような...

  • Android 3.2 ? Android3.2_Novo7_Basic_1029

    こちらは、USBboootTool - 9.6_card_burn_tool---chyuan.zip を使って書きこむタイプ。

    system.img など 7 つのファイルに分かれている。2.2 の方も zip を ばらぜば、USBboootTool で書き込めるらしい。( 両者の mbr-xboot.bin が同じなら大丈夫 )

    ファームウェアが出てきたことで novo 7 basic は、薦められる機種になった。2.2 の方は Ronzi A3 でのカスタマイズのやりかたが効くはずだし、使うのには苦労しないだろう。

    逆に Ronzi A3 に取り込めるものがあれば嬉しい。Flash 10.1 が入っているはずだし、動画再生の問題も直っていそう。あと切水果 ってアプリがあるが .. Fruit Ninja のこと?

    追記: こちらは、登録がいらないようなので ... まずこれからダウンロード ... してたら 切れた。再度つないだら要登録に。

追記: ようやく購入することにした。

osakana 氏から ファームウェアを ダウンロード させてもらったので、購入条件成立。

http://dokidokido.com/category/ainol/novo7basic/index.html
ドキドキ堂 で 9990 円(送料無料)になっていたので、ここにした。

ところで、ファームウェアの 2.2 は、update.zip の形式で、3.2 は USBbootTool の形式。
update.zip には、mbr-xboot.bin が含まれていない。

ひょっとしたら、3.2 のものが 使えない恐れが... とりあえず バックアップを取って比較しないと。
posted by すz at 21:20| Comment(2) | TrackBack(0) | Jz47xx

2011年10月02日

IQQ-M1について

IQQ M1 は、Jz4760B を採用した Andoroid 2.2 タブレット。こいつを購入したので、いろいろ情報をまとめておこうと思う。

なぜ IQQ M1 を選んだのか?

    前記事 『Android端末を選ぶ基準』の条件をクリアしているのが理由のひとつ。特にサスペンド状態でのバッテリーの持ちが良いというのが、決め手。価格が安く 800x480 の 5inch モデルというのも気に入った点。

    もちろん Jz47xx に注目しているからという理由も大きい。ただ、普通に使おうと思っているので決めてにまではならない。

    IQQ M2 というのもある。M1 のデザインを良くしたもの。消費電力など機能の改良があるかも知れない。ただし、購入時には入手できなかった。また、ファームウェアが 入手できるものの 完全なものでない疑いがある。(2011/9/8 版)

スペック

    OS: Android 2.1
    CPU: Jz4760B (660MHz)
    RAM: 256MB
    Storage: 8GB
    バッテリー容量: 1800mAH (1cell)
    動作時間: 4.6時間 (1800mAH / 390mA) -- (※)
    サスペンドでの持ち時間 : 200H ! (1800mA / 9mA) -- (※)
    液晶: 5inch 800x480 dual-touch
    価格: 369元〜399元 (5166円〜5586円 : 14円/元換算) --(※2)

    ※) メーカ側の 公称値 (実測値ではない)
    ※2) 実際に買う場合、手数料と国際送料が加算される。

メーカサイト

購入方法(1)

    未だ taobao でしか変えないので、代行業を通すことになる。

    今回使用したのは、『タオバオ新幹線』。

    IQQ M1 を 369元 で 買うとする。中国国内送料は出品者負担で 0。日本への送料は、商品の重さ + 500g で計算。( IQQ M1 は 400g なので 900g として計算 )

      どうも 130元 + 40元(+500g) の 1/2 で 85 元らしい。

    為替手数料 は、1元につきプラス 1.5円 (レートは、12.5 円で 14.0 円 -- 手数料の割合は、12% )
    代行手数料 は、9,000円以下の商品を買い付けた場合 980円。(それ以上は 9% )

    計算すると 7336 円。一方、商品自体の値段は、369 x 12.5 = 4612.5 円。

    おおむね、送料込みで 6 割増しで買える計算になる。

購入方法(2)

    同じ代行だが、http://taobuy.jp/ が多少人気があるようだ。

    ここで IQQ M1 を検索しても ちゃんと出てくる

    「一括直送プラン(簡易検品なし)」 だと
    369元の本体 5,535円 + 送料 1,386円 + 手数料 100円 = 7021円?

    まぁあまり変わらないといえば変わらない。

    ただ特記すべきこととして、taobuy など普通は 2 回の振込が必要。ちょっと面倒。タオバオ新幹線の場合、1 回で済むのだが、大雑把な 重量計算で算出するので 国際送料がだいぶ高くなる。


購入方法(3)

    SmartQ5 のときお世話になった ジャスティン というところもある。改めてみたら 10/1 から年内休業だそうだ。

    休業中だが、いくらぐらいになるかちょっと計算

     元/円レート 12.2 円
     商品価格の合計が800元未満=一律130元
     中国国内の基本送料として、一律30元 (後で清算)
     検品手数料 商品10点まで=25元
     航空便書留小包
      400g〜500g未満 58元
      900g〜1000g未満 103元

    369 元 + 130元 + 送料 60元 = 6819 円。

    まぁこれも結果は、似たようなもの。レートに手数料はかからないが、これぐらいのものだとあまりメリットが出ない。

評価(その1)

    たいして使い込んでいないが、とりあえず。

  • 動画

    Jz4755 の PMP で 720p の mp4 はハネられて再生できなかったのだが、再生できている。
    フレームスキップもあまり感じられず、いい感じ。ただ、1080p は未評価。Jz4770 からのはずで、たぶんダメ。

    使っていてわかったのだが、再生でエラーになることが結構ある。一度は再生できたものが、エラーになるので、フォーマットの問題ではない。再起動したばかりでもエラーは起きる。ファイルのロードが間に合わなかったときに問答無用でエラーにしている感じ。

    動画再生ソフトは、3 種類はいっている。"ES Video Player" , "Media Player" , 動画。
    "ES Video Player" ,は、例によって G-センサに連動する。

    エラーについては、どれも同じ。エラーが起きたファイルは、他のプレイヤーでもエラーになる。
    ... ひょっとして、SDカードのドライバがバグっているのか? ... とも思ったが USB接続で PC から読み書きしても問題ないし... いったい何が原因なのだろう?

    動画は、ES エクスプローラでファイルを選択して見ている。専用ソフトでないので、ちょっと使いづらい。
    あと、付属の動画再生ソフトでは、アスペクト比の調整だとか細かい調整は無理。

  • pdf

    Quickoffice が入っていて QuickPDF で読める。日本語もちゃんと表示される。ただ、読めることは読めるが、字がつぶれて見えなかったり、表示が遅かったり... 常用するのは、なかなか難しいように感じた。


動画ソフトの考察

    MIPS なので、NDK で作った ARM 用のものは使えない。RockPlayer を試したかったがインストールできなかった。

    ただ、汎用のものは、CPU の付加機能を利用できないので使えたとしても遅くて使い物にならないはず。-- ARM でも付加機能は、CPU 毎に違う。どうやって付加機能を使うのかの情報を公開していないものも多いから、付属の再生ソフト並みの性能にするのは、一般的に困難。

      Cortex-A8 などは、Advanced SIMD (NEON) 命令を持っているそうだ。

      64ビットと128ビットのSIMD命令セットだそうで、これを使いこなせるのなら、汎用でも結構なところまでいけるかも知れない。

    いろいろ探したところ

    [APP] [15-June-2011] MPlayer for android V2

    なんていうのが見つかった。Jz47xx には、mplayer の パッチがある。自分でビルドできるなら、これは使い物になるかも知れない。ちなみに V2 は、NEON 対応だそうだ。

    あと GUI だけの動画プレイヤーも多いらしい。こういうのは、NDK とは限らないので 良いものがあるかも知れない。

評価(2) -- しばらく使った感想

  • サスペンドでの持ちが微妙

    ちゃんと調べてないのだが ... どうも 2 日ほどしか持たないような..
    サスペンドしたまま持ち歩けるので最低限の条件はクリアしているのだが、気がつくとバッテリーがないことがしばしば。

    まぁこんなもんだろう。

      追記: 満充電の状態から、サスペンドで まるまる 2 日+α ほおっておいたのだが ... 電源が切れていなかった。充電すると 充電 % が出てくるが、65% ぐらい。

      200H (8.3日)は、さすがに無理だろうが、4 日程は持つかも知れない。

  • スピーカーの音が小さい。

    アラームであまり役に立たない。スピーカー用のアンプIC は定番のものを使っているはずで、たぶん抵抗1つ付け替えるだけで、解決するのだろうが... 中をみてみないことには。

  • microSD がのみこまれた。

    ケースの口が大きく、ソケットの上部に入れてしまった。これで分解する理由ができてしまった。

    で、分解しようとやってみているのだが、うまくできない。Ronzi A3 は簡単だったのに...

  • ちょっと、もっさり。

    だいぶ程度がわかってきた。このマシンは、BogoMips 598.01 とでる。メモリも 185404 Kb で 64MB 分を 別の目的に使っている。

    EKEN M009S は、BogoMips 約 800MHz で実際に 800 MHz で動いているが、どちらも Angry Birds で背景を Off しないとまともに遊べない。Ronzi A3 は、480x272 で 1/3 程度の画素しかないから問題なかったのだった。

    ちなみに、/proc/cpuinfo , /proc/meminfo を ファイル・ブラウザを使って直接みている。

  • タッチパネルの反応が悪い。

    付属のプロテクト・シール?を貼っている。... なにも貼らなければ、問題ないのかも知れないが ... 誤操作を結構するので苦しい。

    気泡が随分あるからこれが原因のひとつかも。

アプリ開発

分解できた。

    USB などコネクタが並んでいるところから浮かせられた。あとは、ツメを差し込んで ...

    中をみると小さな基板が ... Ronzi A3 などより小さく 全体の約半分。のこりの半分はバッテリーで、1800mAH と確かに書いてあった。

    microSD が飲み込まれたのは、液晶と基板の間に隙間があるためで、ストッパーとして、ゴムの両面テープ をつけた。

    Wifi モジュールは 基板に直接取り付けられている。1.5cm 角ぐらいの小さなもの。

    あと、液晶のコネクタが 2 組みあった。7 inch とか 別の種類の 液晶 を付けることを想定しているようだ。

    音が小さい理由のひとつは、スピーカー に付けられた パンチング・メタル(?) かも知れない。ついでに外してみた。

追記 : M1 が壊れたっぽい。

      USB を つないだ状態で使いながら寝てしまったのだが、起きて気がついたらハングアップしていた。(画面は表示されていた)

      しょうがないので、リセットしたのだが立ち上がって来ない。

      ブートローダーが動きさえすれば 画面が出ると思うのだが、暗いまま。

      不審に思いながら、再インストールを試みたのだが、インストールできない。

      USB Boot は出来る。が、先に進まないのだ。

    この状況から推測するに、メモリが死んだっぽい。USB Boot は、最初のプログラム(stage1) を キャッシュ
    に読み込む。stage1 メモリを使用可能にして、stage2 を読み込む。stage2 は、USB の制御コードを持っていて、ここから色々なリクエストに応答できる状態になる。

    stage1 が動いて stage2 は動かないみたいなので、メモリが死んだと判断したわけだ。

    普通メモリは死なない。壊れたとすれば、配線の方だろう。運が悪いことにハンダ付けが十分でなかったのかも知れない。

    諦めが肝心だが、どうしよう。

    • どうせ いつかは Jz4770 の 7inch か (未だ存在しない) 5inch を買う。(解像度は、たぶん 800x480) 。

    • Novo7 basic も良いが、初物だし未だファームウェアも出ていない。もうちょっと様子を見たい。出来たら 5inch が欲しいし。

    • では当面 Ronzi A3 だけを使うのか?

      CFW を自分で組むようになって、A3 が気に入ってきている。小さいし、持ちやすい。ポケットに入るし。ただ、実用面では、ボリュームボタンがないとか、画面の回転が自由にならないとか、イヤホン使っても音が悪いとか、サスベンドのまま長時間もたないとか、いろいろ不満はある。

        ついでに書くと、動画 -- Jz4760B (600 MHz) だと 720p が再生できる。が、Jz4760 (526 MHz) だと間に合わない。

        あと、V65Pro が Jz4760B とは限らない。勘違いしていて Jz4760 かも知れない。Gセンサも あるような ないような -- レビューにはあるようなことが書いてあるし、Ramos のページも縦画面を 出していた。.... が、Gセンサがあるという記述を見つけられていない。

    • というわけで

      V65Pro を買いたいという理由が強化された。ちょっと検討してみよう。

      Aliexpress だと

      http://www.aliexpress.com/product-fm/502750015-Freeshipping-RAMOS-V65PRO-4G-720P-4-3-inch-Android-2-1-Tablet-PC-with-WIFI-wholesalers.html
      Freeshipping RAMOS V65PRO 4G 720P 4.3 inch Android 2.1 Tablet PC with WIFI
      $78.95 (FreeShipping)

      これか。今 の Paypal のレートは、78.2 だから 6200 円ぐらい? これを 299 元だとすると 20.6 元/円あたり。

      同じ Aliexpress なら、Novo 7 basic が 送料込み8800円だから、ちょっと割高に感じる。もし国内のショップで売られてもこれより安いかも知れない。

        追記: 上記のサイトは値上げして 1万円になった。それはともかく、V65Pro はやっぱり欲しいので、買ってしまった。Novo 7 basic は、M1 が復活したこともあってまだ待ち。

      なら Novo 7 basic を買えば.. とも思うのだが、持ち歩くのは厳しいし。あと aiiexpress は Paypal が使えなくなっている。返金を受けることもあるから、リスクや面倒が増えたかも知れない。

M1 が生き返った

    うんともすんとも言わなかった M1 だが、一回分解して基板を浮かせたところ USB BOOT が 立ち上がってきてインストールできた。基板が歪んでいたとかそういう理由かも知れない。(M1 の基板は相当薄い)
    microSD が喰われてしまわないように入れた プチルゴムのストッパーが だめだったのかも。
    で、再度組みなおして、インストールしなおしたら、ちゃんと立ち上がった。
    まぁ、とりあえずは良かった。

posted by すz at 16:08| Comment(22) | TrackBack(0) | Jz47xx

2011年08月28日

Jz4755を使った装置




Jz4755 でイメージ検索をしていたら、こんなのが見つかった。

Jz4755 と SDRAM/NAND FLASH が載っているのに、デバイスは USB device と MicroSD だけ。

使い道が ほとんどない。これは一体何だろう? と思ったのだが、P3GO GT-break という もので、PS3 の Jailbreak 用のデバイスだった。

確かに、それなら納得できるのだが、なんでわざわざ Jz4755 のようなオーバースペックのチップを使うのだろう? 意外と開発環境が整備されていて、安いという条件を満たすものは少ないのかも知れない。

    taobao で検索すると、チップを1個単位で買っても 20元〜40元ぐらい。(1元 12.5円換算だと 250円〜500円 ) -- 中華オリジナルチップは、機能のわりに安いのだ。

    それでも Jz4725B はそれより安いし、Jz4725B でいいじゃないかとも思う。NAND FLASH をつけずに MicroSD から ブートするようにすれば コストはさらに下げられるのに。

どうせなら、LCD や audio 関係のピンをサイドに出して、いかにも開発用ボード風にしてくれたら、大歓迎だったのに ....

まぁ値段は、4000円弱と それなりにするみたいだから興味を持つだけで終わったかも知れないが。

    ところで、これを他の目的に使うとしたら、どういう使い方ができるのだろう? これで出来ることは jz4755 PMP や Jz4760 の Ronzi A3 でも出来るから 実際にこれでやりたいというわけではないのだが、ちょっと考えてみる。

  • 動画エンコーダー? チップ自体は、カメラ入力をリアルタイムエンコードするぐらいの能力はある。
    ファイルを置くとエンコードしておいてくれる.. といったものは実現可能。

    ただ、性能は PC より劣る。せいぜい Atom の 1/2 ぐらいか。最新の CPU を使ったり、GPU エンコードを使っていると 1/10 とかそれ以下。 どこでも出来るのと、PC が空くのがメリットか。

      Jz4755(Jz4760 も) は、Dual プロセッサで 1 つは DSP 的に使う。プログラマブルではなく、DCT や 動きベクトル探索(Motion Estimation)など動画関係の機能をいくつか持っている。また IPU というデバイスもあって、YUV RGB の相互変換ができる。汎用プロセッサのほうも MMX/SSE のような SIMD 命令をもっている。これらを全部動員すれば、それなりの性能にはなるのだ。

      消費電力は、すくない。電力あたりの性能はかなりのもののはず。あと性能を上げるのに USB に沢山挿すという手が使える。面白そうな気もするが、逆立ちしても GPU エンコード にかなわないなら魅力はあまりないかも知れない。

      ちなみに、Jz4760 の エンコード性能は、VGA (640x480) を 20 fps までだそうだ。エンコードフォーマットは MPEG-4 と書いてあり H.264 とは 別かも知れない。Jz4755 はほぼ同じ機能を持っているがクロックが 2/3 と考えると VGA を 13.3 fps まで 720p なら 6 fps ぐらい? 一方 GPU だと 1080p が実時間の 1/3 だとか。ううむ、1/10 どころではなさそうだ。

  • Linux サーバマシン

    いちおう、ストレージ もあるし、PC とは USB を介して Network で接続できる。Network があれば画面を PC で表示して 操作することも出来る。

    ただ、PC がないとなにもできない。PC を使っている間だけ使えるもの ... という制限が付く。
    Network があるといっても PC が routing して面倒見ないと 外部とはつながらない。

    まぁ VM のような位置づけ。VM が有用ならば これもなにか使い道があるかも知れない。開発など MIPS であることが重要なら有用だったりするのだが、一般の人には関係ない。

    独立したマシンだから インストール不要の VM みたいな特徴はある。ただ 外部と接続したい場合は インストール不要 というわけにはいかない。

    いろいろ制限はあるが、使い道はあるような気はする。

    たぶん この2つに集約されるのだろう。この条件で使える特殊なハードは、ビデオ系の演算しかないし、それを使わないなら MIPS が動く VM のようなものという特徴しかない。

    ちなみに Ronzi A3 になると タッチパネル液晶、AV 出力 、 USB 1.1 Host (無線LAN or 改造して外部出力)、バッテリー動作 とハードが増え、使い道も圧倒的に増える。



こちらは、カッパドキア研究室で Dingux が動くかもと話題になった GAMEBOX (の中身)

普通の PMP はヒートシンクなど付けていないのに、これは やたらでかいヒートシンクが付いている。オーバークロックで常用するためだろうか? それにしてもここまで大きくする必要はなさそうだし、ファンも不要 -- 単なるデザインなのか?

これは、ちょっと興味がある ... お手軽なビデオ再生用マシンとしても使えそうだし。ただ、いまどき NTSC のみというのは どうなのだろう? ... といっても Jz47xx で HDMI 出力は Jz4770 しかないから当面期待できない。かといって 他のチップだといじる楽しみがない。

    VGA ぐらい付けてくれれば .. とも思うが LCD 出力を D-A 変換しないといけないから、コストが上がってしまうのかも。

      ちょっと、データシートを見たら、チップ自体は VGA 出力が可能だった。LUMA/CHROMA_U/CHROMA_V という 3 つのアナログ出力がある。だが、コンポジット出力では LUMA しか使わないようだ。

    USB device (左下の mini-B) が付いているのはポイントが高い。 PC につなげて microSD とか FLASH を書き換えるために付いているのだろうけど、いじるためには必須。

    USB Host が 4つもあるのも良い。キーボードやマウスが繋げられそうだ。USB メモリも付きそうだが、12Mbps までだから 遅くて使ってられないはず。

まぁ DealExtreame だと 4100円ぐらいだから、ひとつ入手しておいてもいいかも 。

追記: 2012/4/15

いまさらなのだが ...

http://club.dealextreme.com/forums/Forums.dx/threadid.1160125

Linux が動いたらしい。こんな古いものを .. という気もするがなんか楽しそう。

追記:

    ところで、なぜ Jz4755 を気にかけるか ...

    チップが購入可能で、BGA でないため 電子工作の範疇にかろうじて入ってくるのだ。

    Jz4760 も購入可能ではあるが、BGA だから自作はとても無理。メモリも DDR2 だから BGA が一般的。これで好きなものを作るのは、あまり考えられない。

    Ingenic のカーネルも 対応しているし、高性能でないことを許容できれば面白いチップなのだ。

    ただ、Ronzi A3 のような ものが出てくると それを流用してなにか作ったほうが良いかという気がしてくる。ただし、旬のものなので時期をすぎると入手できなくなる。せっかく苦労してソフトをいじっても対応するハードが既にないという事態になりそうだ。カーネルとかをいじる時はこれが怖い。

    一応気に入ったハードが出たら、同じものをいくつか買い込むようなことをしている。なにか作っている間に壊れたら努力が無駄になる。ものを作る努力に比べたらハードの値段など安いものなのだ。ただ、他の人に成果を分けるのは難しい。できた頃にはハードが入手できないからだ。

    そういうわけで、ハードの自作が可能なもの が気になるわけだ。

そういえば ... Jz4755 の PMP は、今いくらぐらいなのだろう? 2010年11月に購入した際は、T552 265 元、T555 180 元 だった。

    麦迪 T552 はもう扱っているところは、ほとんどない。

    麦迪 T555 ならまだある。安いところで 145 元。ものは悪くないのだが、欠点がある。
    ケースの透明の部分が薄いガラスで、液晶との間に空間があるため割れやすいのだ。

    紫光 T816 というのが、T552 に近いかんじ。(4.3 inch 480x272) 安いところで 145 元 とだいぶ安くなっている印象。取引もぼちぼちあるようだ。

    ちなみに 紫光 T950 という Jz4725B を採用したタイプ(3inch 400x240?) もある。こちらは 結構取引があって 100元ぐらいからある。

    やはり、いまさらという気はするのだが ... USB Boot で いろいろ動かすなら、お手軽な方が良いかもしれない。T555 や T950 の液晶は コントローラ付きなので手軽に操作できる。

    Jz4725B は、扱いにくい。が、100元なら現地価格で 1200円しかしない。7割増しで入手しても 2000円ちょっと。この値段でいろいろやってみることが出来るなら、すごく有用な気がしてくる。いろいろやってみるためには、開発環境がポイントになる。

    Jz4755 で 150元ほどなら、同じ条件で 3000円ちょっと、あんまり大差ない感じがする。また、Jz4755 は、カーネルがちゃんと対応しているので、Linux だけを動かすなら 4.3inch のスキャンタイプの LCD でもなんとかなりそう。

    ただ、いずれにしても PMP ベースだと I/O が足りないので PMP で出来ること以上のことは難しい。音を出したり、画面になにか表示するみたいなことで満足せざるを得ない。

      PMP だと FM ラジオ が付いていたりする。ついてなくともパターンがある場合が多い。ここから I2C は引き出せる。あと、デバッグ用に シリアルの TX のみパターンが付いている場合がある。普通ならこれぐらいしか I/O が使えない。

      Jz4755 は、TV-Out がある。画面はここに出力することにして、LCD を外してしまえば、一気に 20本ほどの I/O ピンが得られる。ただし、LCD 用のピンは他の機能をもっておらず GPIO としてしか使えない。

      あと、Jz4755 はタッチパネルのインターフェイスを持っているが、PMP ではほぼ使われない。カメラインターフェイスも同様。-- PMP には miniOS というのが使われるが最後までサポートされなかったようだ。

      ちなみに、miniOS は、Jz4725B/Jz4755 で共通のものがあるようだ。それ以前のものは、Jz4725/Jz4740 対応で互換性がないみたい。

    やはり Jz4760/Jz4760B を使った Ronzi A3 のようなものが、良いのかも知れない。12M bps ではあるが、USB HOST を使うことで 応用が広がる。
posted by すz at 14:10| Comment(0) | TrackBack(0) | Jz47xx

2011年07月06日

JZ4760 Android MID

基板設計や FPGA で遊んでいたので、こちらはしばらくお休みしていたのだが... 久しぶりに JZ4760 を検索してみたら、なんと Android 2.2 の MID が出ている。

Android の主力は ARM だから MIPS の android を出すには相当がんばらないといけない。

どんなものか見るために買ってみたいような...

想像では、tcc89xx と同じような感じではないかと思う。MIPS の 600 MHz は、普通の ARM11 の 800 MHz と同じような性能だろう。動画の能力は tcc89xx ほどはないが、H.264 720p ぐらいはなんとかしているはず。

まぁいまどき買うようなマシンではないのだが ... Linux のソースが手に入ったりするし、いじるには面白そう。

さて、見付けたのは次のもの

aliexpress:


E430 1 個 $66.98 (freeshipping)
E430 2 個で $131.96 (freeshipping)

いま Paipalのレートは、83.3 円ぐらいだから、5600円ぐらい。2 個だと 11000円で ほんの少し安くなる。

スペックは、

  • OS Andriod 2.2
  • Memory 256MB DDR2
  • Storage 4GB NAND Flash
  • LCDSize 4.3 inch LCD (480*272)
  • Camera NO
  • WIFI IEEE 802.11b/g
  • ports Mini-USB , MicroSD, 3.5mm headphone , TV OUT
  • Battery 1400mAh
  • Weight 140g


PMP に毛が生えたようなスペックと値段だが、WIFI があるのと RAM が多め なのが PMP とは違う点。あと、G センサは付いてない。

taobao:


KTMID 480元

Yahoo!ファイナンスでは、1元 12.56 円。代行を通すことで 4割り増しになるとすれば、8440 円。

こちらは、7 inch で (たぶん) 800x480 。WIFI は、802.11 b/g/n。DDR II 256 MB/Nand flash 4GB なのは同じ。
あと G センサが付いているようだ。

バッテリーは 3000 mAH で 8H 使えるらしい。

ちなみに Jz4760 は、600 MHz 。USB OTG が付いたので 外部の装置が使える。キーボードやマウス、3G のドングルは使えるらしい。

実はこれも aliexpress で買える。が、少々高めのようだ。

追記: E430 というのは、『ronzi A3』というものだった。

    OSAKANA TAROのメモ帳:ronzi-a3関連』が詳しいようだ。

    taobao で『溶智』を検索すると 299元ぐらいらしい。『ronzi A5』 というのもあって 5 inch でマルチタッチになっている。

      299 元の 4割り増しだと 5260円ぐらい。taobao で買っても特に安く手に入るわけではなさそうだ。

      ronzi A5 は 399元。まだ入手できないようだ。

      去年買った T552 が 265元だったことを考えると 299元の ronzi A3 は随分お得な感じがする。CPU 周波数が 1.5 倍でメモリが 8倍。USB HOST機能付き!

      ronzi A5 は、その前に買った SmartQ5 (889元) のようなものか。半額以下でメモリも増えている。(ちなみに、解像度は 800x480 らしい)

      OS の出来の問題があって無視できない -- というより重要なのだが。それにしても 安くなったものだ。

このマシン(ronzi A3/A5)の魅力

    OSAKANA TAROのメモ帳:ronzi A3 その4 firmwareアップデート
    に詳しいが、USB Boot が可能なので、firmware をおかしくしてしまっても 元に戻せる。tcc89xx と同じようなものだが、使うためではなく、いじるために買うので重要な要素なのだ。

    Linux カーネルも Ingenic 社が Open Source として積極的に公開している。うまくすれば、Andoroid マシンではない ものに仕立てることも可能。

    Andoroid マシンではないもの の候補のひとつは、dingux。うまく移植できれば dingux アプリを動かすことができるはず。

    あと、携帯できるサーバマシンとか。32G MicroSD とか USB メモリ とかを付けて ネットワークに WIFI を使うとか。-- 3G のドングルを付けてルータにするとか。他のものでも同じようなことはできる。だが安いというのは大きなメリットで気軽に専用機にできる。据え置きのサーバでもメリットがある。UPS 付きでかつ低消費電力だ。DISK は 外部電源付きの USB DISK が使える。

    電子工作レベルの専用機も楽しいかも知れない。OS は入れない or Free の RTOS ぐらいにしておいて、自分で MicroSD や LCD を操作する。

      これ、ライブラリを作って放置中。USB Boot でロードして、LCD に文字を表示する程度なら動いた。ただ LCD はコントローラ内蔵の いわゆる SmartLCD だから簡単だった。4.3 inch タイプは VIDEO みたいにスキャンしないといけないので、ちょっと難しい。

      USB Boot も実は具合がわるかった。原因は libusb で扱えないような仕様が一部あったため。android の ツールを利用するなら なんの問題もなさそう。

      ライブラリは、Jz4760 には対応していない。対応させるのは可能なのだが、デバイスが膨大にあるので、すごい手間。だが、この手間をかけると Jz4755 とどこがどういう風に違うのか分かってくるので、いずれはやっておきたい。

    あと、内蔵 Flash が SDカードインターフェイス(デバイスは不明)というのも良い。Nand Flash だと扱いが面倒なのだ。ちょうど SmartQ5 の MIPS 版のような感じで root イメージの解析や置き換えが楽そう。

    A3 vs A5 という観点でみると、A5 のメリットは タッチパネル と 解像度。android として 使うなら 明らかなメリットだが、改造したり開発したりする場合のメリットではない。もしメモリが 512MB あれば 開発マシンとして大きなメリットだが、そうでなければ入手しないかも。

    前にも書いたが メモリが多い 安価な MIPSマシン など他にないのだ。256 MB あって Disk がつながりネットワークにもつながれば 立派な開発マシンとして使える。MIPS マシンには思い入れがあるので、かなり嬉しい。

      Disk がなくとも 高速なネットワークがあれば良い。それは、Hi-Speed の USB device があればクリアできるので、Jz4725B/Jz4755 でも OK なのだが、メモリ 256MB というのは無理。

      玄人箱HG の経験からいうと、メモリ 256MB は開発マシンの最低ライン。128MB でも出来ないことはないが、スワップしまくりになったりして、相当に厳しい。

      追記: MIPS の Android 機として使える CPU なぞ他にないと思っていたが、riverRunner さんのコメントより、ATM7001という CPU があることが分かった。

      採用機種は、歌美(gempei) HD8800PRO(4.3インチ) とHD8900PRO(5インチ) だそうだ。

      CPUの情報や Linux のカーネルソースが手に入らないと興味がわかないのだが、一応メモ。

追記: aliexpress のやつをポチった。

    まぁ安いし。いじるのは、気が向いたとき。(今は電子工作のほうがホットなので)
    急いてはいないので、freeshipping にした。たぶん 2-3週間かかる。

    記録: 2011/07/05 ぽちり。(2個セット)
    2011/07/10 shpping のステータス

    7月13日 15:24 引受 HONG KONG (日本郵便でトラッキング可能になった)
    7月16日 17:18 国際交換支店から発送 HONG KONG
    7月17日 14:16 国際交換支店に到着 NARITA
    7月18日 9:00 通関手続中
    7月19日 15:34 国際交換支店から発送
    7月20日 7:27 到着 (最寄りの支店)

追記: 分解写真発見


    (tjw2700c的空間 より)

    基板の裏には、部品が一切なく LCD が載る。LCD の型番は、KD43G18-40NB-A1

      LCD のケーブルは、40極だが タッチパネルが付くので 一般的な 4.3inch LCD とは配列が違うようだ。

      aitendo で扱っている液晶モジュール [QD04300] と同じ配列ではないかと思う。

    FLASH は普通の NAND FLASH (29F32G08CBABA)。 SDカードインターフェイスというのは、間違いだった。 (さらに訂正: 後述)

    WIFI は、USB ドングル がベース(右上)。Jz4760 には Hi-Speed 対応の OTG と、12 Mbps までの USB Host が 1つづつある。USB Host を WIFI に割り当てているのだろう。

    OS から改造する前提で、WIFI を外してしまって、USB の線を引き出したいところ。HUB を付ければ いろいろなデバイスを付けられそうでもある。

    あと、円筒型の水晶がない。... これだけで なんとなく高級感がある。

      円筒型だと手はんだになる。そして、だいたいは、ひどいつけ方になっている。固定するための 処置も必要なのだが、これもひどいのが多い。それがないので基板が美しい。ちなみに、水晶のひとつは、LCD コネクタの左上でたぶん メインクロック。あと RTC 用の 32.768 kHz がどこかにあるはずだが分からない。

    インダクタ(円柱状のパーツ)が 5つも使われている。(LCD ケーブルの下に 3つ)

      普通は電源の数 -αで CORE と LCD バックライトの 2 個の場合が多い (3.3V はレギュレータで済ます)。CORE 電圧は 1.2Vだそうだ。DDR2 に 1.8V が余計に必要だとして +1 。あと 2 つは何だろう? USB に出力する 5V と 充電用?

      大きめのインダクタが付いているのは、少しばかり頼もしい。電源の安定性に貢献しそうだし。中華PMP の中をみると 欠けていたりすることも多いので、大きいやつだと安心感がある。

    LCD ケーブルの下、NAND FLASH の右の IC は何だろう? こんなにピン数が多い IC が必要になるとは思えない。

      約2GB の /mnt/sdcard の正体なら嬉しいが.. 違うのだろうなぁ。
      ライセンス IC ? これも、まさかという気がする。ライセンス ICは、普通ファームウェアメーカの利益保護のためにあるようなのだ。これは、Ingenic 社が直接提供しているように思うし、ライセンス 料を払っていたらこんなに安く作れないような気もする。
      少なくともセンサの類ではない。-- センサにこんなにピンは付いていない。

    基板は、安物とは思えない印象。

    改造とか電子工作の観点でみると結構ポイントが高い。普通は改造する必要もないが、WIFI 用 USB に コントローラを付けたりするのが容易にできる。

      Jz4725B,Jz4755 の PMP を改造したりすることを今まで検討していたのだが、I/O を付けられないのがネックだった。これだと USB OTG を使って Disk を繋げたり、WIFI 用 USB の先にいろいろ付けることができて、応用できる範囲が広がる。

      オシロとかロジアナといった専用機を作ることもできそうだし、USB カメラを付けてドライブレコーダを作ることもできそうだ。

      別のケースに入れることが出来ると、さらに楽しそうな... 。

        PSP のリプレース用ケースに入れられるかも知れない。それが出来るとボタンを入れるスペースが手に入る。USB キーボードのようなものを電子工作で作れば、結構楽しめそう。マイクロコントローラは、(例えば) AT90USB162/ATMEGA32U2 といったものを使う。

        だが、クラムシェルにしてみたい。DS の リプレース用ケースには入らないのだろうか?

    ... といっても Linux を自分でビルドして 仕込むとか が出来ないと。いままで調べてきたが、tcc89xx なんかよりは敷居は低い。最新のソースコードが入手できる。チップの扱い方のドキュメント(programming manual)は、公開されていないようだが、Linux を使う限り 必要ないかも知れない。Linux を使わない場合でも ソースコードを見ればだいぶわかる。

      jz4760_pm.pdf で検索したら落ちていた。リンクは提示しない。ググルヨロシ。

      jz4760_pm.pdf を少し見てみた。まず、これを見ても全ての機能の詳細が分かるわけではない。分からない機能は、

      • MXU 命令 の詳細

        MMX/SSE のような SIMD 命令があるが、詳細 はこれではわからない。いまのところ jpeg や mplayer に対応したコードを見る他ないようだ。

      • GPU の詳細。

        これは、分かっても使いこなせない。ライブラリなどは入手できるので良しとしよう。

      • VPU の詳細。

        Jz4755 からあった ME/MC/IDCT/DBLK の機能の他に CABAC という bitstreame を扱う機能が追加されている。ME/MC/IDCT/DBLK については、Jz4755_pm.pdf に詳しく書いてあったので 合わせて見る必要がある。

      こういう込み入った機能は、あまり分からないが、あとは大体記載されているようだ。

      気になる機能

      • MDMA , BDMA

        2 つも DMA 関係の機能が増えている。一体何だろうと思ったのだが、ディスクリプタで制御できる DMA だった。ディスクリプタというのは、メモリに置いたDMA の指示で、リンクでつなげることが出来るもの。

        普通の DMA と比べオーバヘッドを減らせるのが特徴で、少し大きなメモリブロック(数KB のオーダー) なら memcpy を使ってのメモリコピーの代わりに使え、CPU の負荷を減らせる。珍しい機能ではなく、かなりの 種類の組み込みCPU が同等の機能を持っている。Intel でも そういう機能があって IOAT という名前が付いている。

        これは、Linux だと DMA Engine として利用できる。(対応した場合)。

        2 つもあるのは、何だろうと思ったのだが、MDMA は、memory-memory を含む一般的なもので、BDMA は、NAND Flash の制御(BCH) も扱えるタイプらしい。

        BDMA は 3ch , MDMA は 2ch ある。BCH を 3多重でパラレルに使えるとは思えないので、単純に 5ch あると思っても良いのかも知れない。

          そういえば ... デバイスと CPUキャッシュとの間のコヒーレンシは、サポートしていないような ... そうなるとディスクリプタのありがたみは、ちょっと減少する。まぁキャッシュスルーのレジスタにいちいち値をセットするよりは、メモリに書いて キャッシュフラッシュ一発の方がオーべヘッドは小さいのだが...

      • PMON

        CPU の機能で、キャッシュミスヒットの回数などをカウントするレジスタ。Intel でパフォーマンスカウンタと呼ばれる機能。

        本気でチューニングするには、この手の機能が必要で、Linux だと oprofiler という機能で利用できる。(対応した場合)

      • SPI-Boot

        Jz4760 から SPI-Flash からのブートが可能になった。NAND Flash, MMC/SD , USB からのブートは従来どおり。

        ひょっとしたら、SPI-Flash に ブート ローダを置いて USB ブートをサポートしない装置が出てくるかも知れない。たぶんそんなことはしないと思うが、要注意。

      • USB コントローラ

        今まで手に入れた Programmers Manual には、USB コントローラの詳細が載っていなかった。今回拾ってきた jz4740_pm.pdf jz4725b_pm.pdf jz4760_pm.pdf には、詳細がある。以前拾った jz4755_pm.pdf には載っていないが、たぶん jz4725b と同じではないかと思う。これで不明だったことが分かる。
        (どうも jz4740 と jz4725b の USB は同じようだ -- jz4760 の USB は、ホスト機能をサポートしただけあって、全然違う。)

        使えるエンドポイントは、EP1-15 (EP0 は、control) 。DMA も 8 チャネルサポートしている。

        このチップ DMA は全部で何チャネルあるのだろう? IPU や VPU , LCDC 他のメモリ転送機能まで DMA にカウントすると 32 ぐらいじゃ済まないような ...

        それはともかく、jz4755と比べ随分進化している。使いこなすのがなかなか大変そうだ。MDMA/BDMA も使っているのかどうか? DMA Engine をサポートしていたら使っていると言えそうだが、後回しになってそうなきがする。USB の DMA もサポートしているのかどうか。


    とっつきやすいのは、Dingoo Linux と互換にするようなもの。NAND Flash は デュアルブートのためにいじるだけだし、ボタンはキーボードで代用できる。LCD は フレームバッファがあればよいはず。解像度とか色数を合わせるのはやっかいかも知れない。2D アクセラレータが使えればなんとかなりそうだが... オプションで使える IPU というものもあって 仕様を合わせるのは面倒そう。

    いじって遊ぶのは楽しいのだが、今は時間が取れない。だが、いずれはやってみたい。

    あと、ビューワー系のソフト。オリジナルのサイズで展開して 2D アクセラレータ (or IPU ?) で転送を指示するだけ。jpg の展開も SIMD を使うことができる(改造した jpeg6b のソースコードが入手できる)。
    ファイルのロードが遅いかも知れないが 次のページを先読みすれば事足りる。

    普通に作ればもっさりなんかにはならないと思うのだが... android では難しいのかも知れない。

追記: Jz4770 も発表されていた。

    Ingenic のホームページを見ていたら Jz4770 が載っていた。180nm プロセスの Jz4740 -- 160nm プロセスの Jz4725B -- 130nm プロセスの Jz4760 と来ていたが いきなり 65nm プロセス。Ingenic はついに手に入れたようだ。CPUは 1GHz で 256KB の L2 付き。

    Jz4770 の機能自体は、Jz4760 を拡張したもののようだ。-- 気がついた拡張は、3Dグラフィックスと 100M Ether MAC 。あとクロックが上がったおかげで 1080p に対応できるようになった。USB は変わっていない。

    これが出れば だいぶ、ARM と張り合えるかも知れない。... といっても Cortex-A8 クラスとなんとか という感じ。

作ってみたいもの

  • NAS (のようなサーバ)

    必要な装置 : USB HUB , USB Disk , USB Network (WIFI or 100M Ether)

    基本普通に Linux でサーバを作るだけだが、UPS 機能を活かすにはだいぶ改造がいる。
    停電になったりすると USB Disk の方は電源が落ちる。で、ライトバックキャッシュを NAND Flash などにセーブしてからシャットダウン。再起動したときに USB Disk に書き戻す。

    ちなみに本体の WIFI は 12Mbps の USB に接続されているからサーバ向けには遅すぎる。WIFI にしたいとしても Hi-Speed の方にするべきだろう。

    Linux でサーバを作るというのも簡単ではないかも知れない。MIPS のディストリなどあっただろうか?
    まぁ ディストリがあろうがなかろうが、気にいったものに仕立てるのはおお仕事。玄人箱HG 向けに 自分 ディストリを作ったことはあるのだが、結構骨がおれた。

      Fedora も MIPS に対応してたのか。できたら、これをベースにしたい。... と思ったがすべて mips64el だった。

      rpm にしたいのだが、今なにがあるのだろう?

      ftp://ftp.linux-mips.org/pub/linux/mips/mipsel-linux/

      ここに RedHat-7.0 の mipsel.rpm があることは分かった。しかし .. 2001 年だ 古い!

      一応 rootfs の tarball はあるから chroot で動くかどうか試してみることは出来そう。

    LCD タッチパネルは、必須ではないのだが、せっかく付いているのだから 有効には使いたい。

  • PCにUSB接続して使うサブマシン

    必要な装置 : なし

    Linux の設定で、PCに USB 接続すると (USB ストレージではなく) Network でつながるようには出来る。これは、SmartQ5 で実験した。

    Network といっても PC とつながるだけ。PC 側でルータを動かさないと PC を経由して外部とはつながらない。これは、そういう使い方は想定しない。PC との接続のためだけに Network の仕組みを利用する。

    で、なにをするかというと なにはともあれ ファイルサーバ。そうしておいて PC からプログラムや 手順を書いたメモなどを読み込めるようにする。

    次の段階として、PC でアプリを動かして なにかの目的に使う。簡単なものだと フォトフレームとか、サブコンソールとか。あと、HTTP 経由でのメモ帳とか。

    わりとなんでも出来そうだが、PC 単体でできることなら意味が無い。USB メモリで事足りるものも意味はない。

  • dingux アプリを動かせるもの

    必要な装置 : キーボード

    dingux そのものといっても良いかもしれない。違うのはカーネル。(とブートローダ)

    ディストリは用意する必要はない。dingux 自体がディストリ。

    最初の 2 つは、別に これでなくても出来るのだ。SmartQ5 でも良いし tcc89xx の android マシンでも良い。だが、dingux 互換にするには Jz47xx でないと無理。

    以前 Jz4725B などでやろうとしていたが、途中で放置してしまった。当時は Jz4725B/Jz4755 は、Ingenic のカーネルはサポートしていなかった。(今はどうか知らない) 。一方 Jz4760 は ものが出来る前からサポートされていた。この差は大きい。 Jz4760 なら安易に作れるかも。

  • オシロとかロジアナとか。

    必要な装置 : 計測デバイス (USB)

    USB Host or OTG の先に キャプチャするデバイスを付けて コントロールする。ー 要するに PC の代わりにする。別に オシロとかロジアナみたいな高級なものでなくとも良い。arduino でデータを取って表示してログするだけでも有用な場合がある。

    PC でできることをこれでやる意味はある。ひとつは消費電力。あとは設置の自由度。PC が専有されないというのも魅力。

    それは良いのだが、電子工作のネタにしたい。できたら、USB 装置をケーブルでつなげただけというものには、したくない。もっと一体感があって専用装置と見紛うようなもの --- なんて考え出すとなかなか 進まなくなる。

クロックアップとスワップ

    携帯総合研究所:クロックアップとスワップでHT-03Aの動作を軽快に

    こんな記事をみつけた。スワップON/OFF するツールはあるようだ。... といっても ただのランチャーみたいなもので、動作させるスクリプトは仕込んでおかないといけない。

    クロックアップの方は使えるのだろうか? Linux でのクロック取得/変更の API はアーキテクチャ非依存で Jz47xx も対応していたような気がする。(うろ覚え)。たしか 最大周波数はブートローダから受け取った値を使っていて、それ以上に上げられないよう制限をかけていた。

    これを試してみる価値はあるかも知れない。

    ちなみに、SWAP ファイルは MicroSD に置いた方が良い。NAND Flash が壊れると いろいろ具合が悪い。 MicroSD なら壊れても交換可能だし、メーカと 全体容量にもよるが、なかなか壊れない。NAND Flash は良品が付いているとは限らない。中古品の可能性もある。壊さないよう大事に使うに越したことはないのだ。
    (ジャンクの PMP の基板を見るとたいがい NAND Flash だけがない。外して再使用されているとしか思えない。そして再使用先は、こういった安物の PMP/MID であろう。)

    注意!) これらの操作はシステムを壊す可能性があります。試してみるなら自己責任でお願いします。

注意!

    OSAKANA TAROのメモ帳:ronzi-a3関連』より:

    Market関連:
     Android Marketがあるが、おそらく非公式対応。このため時期により使えない場合あり。
     その他にHiApk(安卓市場)もインストール済み。
     Android Marketで検索すると、いろんなアプリが出てこないが、様々な要因があるようだ。
     OpenWnnやATOK系が出てこないのは、NDKを使っているためで、回避しようがない。

    MIPS なので ARM native のアプリは動かない。そこは割り切る必要がある。

    ファームウェアの完成度が低く 不安定でもっさりという情報もある。android として使いたい人にはお薦めできない。せめて PMP としての完成度が高ければ、とりあえずの使い道もあるのだが、それに関しての情報はまだない。

    一般の人にとっては、安いだけの android マシンで いまのところ魅力は少ない。カスタムファームウェアが出回るような状況にでもなれば魅力が出てくるかも知れない。

ファームウェアについて

    ちょっと アップデートファームウェアに含まれるファイルをチェックしてみた。

    ツールエントリ 実際のファイル名 サイズ ファイルタイプ
    mbr-xboot.bin mbr-xboot-60_rz43_1104280101.bin 862820(B) MBR
    boot.img boot_rz.img 2678(KB) ANDROID!
    recovery.img recovery.cpio.img 2984(KB) ANDROID!
    system.img system.img 219805(KB) ext4
    userdata.img userdata.img 67312(KB) ext4
    cache.bin cache.img 30724(KB) ext4
    vfat.bin vfat.img 8(KB) ZERO

    boot.img と recovery.img の先頭は、ANDROID! で始まっている。そういうファイルは、tcc89xx の Android マシンの アップデートファームウェアに含まれていた。

    tcc89xx (E7002とか)』の記事から抜粋すると

      boot.img と recovery.img は同じ形式で ANDROID! で始まる。たぶん ブートパラメータ+カーネル+initrd

        boot.img/recovery.img 詳細

        split_bootimg.pl を使うと kernel と initrd (と ブートパラメータ) を 取り出せる。
        kernel 自体は boot.img/recovery.img で同じものを使っている。
        initrd は、ASCII cpio + gzip のファイル形式。
        これを 展開すると ... init.rc やら init.tcc92xx.rc やらが出てくる。
        初期化でなにをやっているかは、これをチェックすれば良い。

        逆に 作り直すには、mkbootimg を使うらしい。これは未チェック。

    これらは、たぶん /dev/mtdblock に直接書き込まれる。それ以外は、たぶん ウェアレベリングを行う UBI が提供する ブロックデバイス 上に置かれるデータだろう。ファイルタイプ MBR としたデータは そのブロックデバイスの先頭に書かれるパーティションデータ。

    単に /dev/mtdblock に書きこむデータでも NAND FLash の OOB も合わせて更新しなければならない。そして更新するプログラムには、Linux カーネルそのものを使うのが理にかなっている。


      Linux で更新するのであれば、USB は一旦リセットされて違う ID に切り替わるのではないか? と思える。更新ツールのドライバは一体どの ID に反応するようになっているのか?

      このあたり、後で調べてみたい。

    まだ単なる推測に過ぎないが、boot.img/recovery.img のどちらかを USBBOOT で直接メモリに書きこんで Linux を起動して、ファームウェアを アップデートする仕組みなのだろう。

    (訂正) この推測は相当に間違っていた。USBbootTool.exe だし、今までにあった USBBOOT のツールの延長線上のもの。USBBOOT でしか動かないし Nand Flash などに書きこむ機能しかない。当然カーネルも送り込まない(はず)。で、書きこみ先も SDカードインターフェイスのストレージで Nand Flash ではないようだ。(後述)

    それはともかく、system.img を書き換えることで済むカスタマイズは割と容易だ。
    カーネルを置き換えたり、dual boot 化したり、ブートパラメータを変更したりするには、boot.img/recovery.img を編集する ことになりそう。


    $ perl ../split_bootimg.pl ../boot_rz.img
    Page size: 2048 (0x00000800)
    Kernel size: 2052096 (0x001f5000)
    Ramdisk size: 687722 (0x000a7e6a)
    Second size: 0 (0x00000000)
    Board name:
    Command line:
    Writing boot_rz.img-kernel ... complete.
    Writing boot_rz.img-ramdisk.gz ... complete.

    $ perl ../split_bootimg.pl ../recovery.cpio.img
    Page size: 2048 (0x00000800)
    Kernel size: 2052096 (0x001f5000)
    Ramdisk size: 1000538 (0x000f445a)
    Second size: 0 (0x00000000)
    Board name:
    Command line:
    Writing recovery.cpio.img-kernel ... complete.
    Writing recovery.cpio.img-ramdisk.gz ... complete.

    split_bootimg.pl はそのまま使えた。

    さて、initrd の方を見てみると...

    init.rc: # mount yaffs2 mtd@system /system
    init.rc: # mount yaffs2 mtd@system /system ro remount
    init.rc: mount ext4 /dev/block/mmcblk0p1 /system
    init.rc: mount ext4 /dev/block/mmcblk0p1 /system ro remount
    init.rc: mount ext4 /dev/block/mmcblk0p2 /data nosuid nodev
    init.rc: # Do this before we mount cache so eventually we can use cache for
    init.rc: #mount yaffs2 mtd@cache /cache nosuid nodev
    init.rc: mount ext4 /dev/block/mmcblk0p3 /cache nosuid nodev
    init.rc: socket vold stream 0660 root mount

    こんな風になっていた。... 変だ。予想と違う。UBI も見えない。... どうも 例の ピンの多いデバイスは、SmartQ5 で使っていた SanDisk の iNANDのような デバイスのようだ。

    4GB の Nand Flash が存在するが、たぶん使っていない。 (間違い: 後述)

    これは嬉しい誤算だ。Nand Flash の扱いは面倒で 自由に使うのは難しい。Android を捨てて別のシステムを入れるとしても、Nand Flash なら書き換え回数とか の仕様を 同じにしておかないとマズイところを 全く自由に使えるのだ。SmartQ は 1GB しかなく不足ぎみだったが、一応 2GB あるようだし、ひとつのシステムを入れるだけなら十分な容量。

    さて、UBI を使っていないなら、MBR のファイルは 物理的にパーティショニングしていることになる。どんなものなのかちょっと見てみると

    Device Boot Start End Blocks Id System
    /dev/block/mmcblk0p1 4162 12484 262144 83 Linux (/system)
    /dev/block/mmcblk0p2 13004 29648 524288 83 Linux (/data)
    /dev/block/mmcblk0p3 30298 31338 32768 83 Linux (/cache)
    /dev/block/mmcblk0p4 33289 254213 6959104 b W95 FAT32 (/??)

    ちょっと変。cache.img が 30724KB なのから考えると Blocks は 1KB 単位。system.img も 210905 KB だからちゃんと入る。... だが、FAT が 7GB も取っている。... これはとりあえず取っておいて、後ろは使わないということ?

    あと、Start がずいぶんずれている。大きな隙間だが ここに boot_rz.img とかが入っているのだろう。

    ところで、NAND Flash と SDカードインターフェイスの Flash の両方付いているのはなにか変。いったいどういう接続になっているのだろう?

    ようやく分かった。ieronziからダウンロードした ファームウェア のアップデートツールに SK6633 , SK6811 とかのキーワードが含まれていた。SK6633 というのは、NAND FLash を MMC/SDカードインターフェイスに変換するコントローラ。SDカードの中身みたいなもので、あんまり高価なものではないのだろう。

      正確には、JEDEC eMMC4.41 対応 だそうだ。(SK6633 は eMMC4.4) バス幅は、x1,x4,x8 だが、MSC0 から ブートするためには x4 である必要がある。

    直接 NAND Flash を扱えるのに わざわざこのチップをいれているというのは、扱いやすさを狙ったものだろう。ただ、ウェアレベリングがどのレベルで実現できているかは不明で、アテにするのはマズイかも知れない。


      不明だったチップはこの写真の右。


      shindoのブログ:SDカードの内部 より引用

      SDカードの中に入っているのはこれ。--- 見たことがある チップの形だと 思ったのだが、思い出せなかった。これですっきりした。

もうすぐ

    ぽちったのが、日本郵便のトラッキングに出るようになった。あと 1週間前後だろう。

    adb で接続すれば、root で操作できるらしい。とりあえず /proc をチェックしたり どんなドライバが使えるかチェックしたりするつもり。

    あとは、MIPS 版 RedHat 7.0 を chroot で動かしてみる。うまくいくようなら、これで自分ディストリをビルドしてみる。

      ビルドするだけなら、chroot の環境があればなんとかなる。(メモリが足りなくなるはずで、swap は必要)

      どのディストリをビルドするかについては、悩ましい。Redhat 7.0 だと古すぎるのだ。それに どのディストリも膨大だ。

      実は、玄箱 HG 向けに 自分ディストリとして、RHEL 4.0 を シュリンクしたもの(GUIなし) を作っている。 これも新しいわけではないのだが、一旦これを作ることを目標としようかと思う。

      同じものが出来たら、これを元に さらに新しいものをビルドするかも。新しくするときの やりかたは、arch にあまり関係ないので そのときは 玄箱 HG も合わせてバージョンアップするつもり。

      こういう古いものから作っていくのは、けっこう難しく面倒。挫折するかも知れない。

追記:7/20 到着 とりあえず記録

  • MID とのみ書かれた箱が, プチプチに包まれて 外箱?(箱じゃないかも) にはいっていた。

  • 備品は、USB 型 AC アダプタ (5V , 1A) と USB ケーブルのみ。

  • 本体右下 ロゴが入るところは、MID とのみ刻印 (写真とおなじ)。

    削った痕跡もない。

  • 充電は 82% ぐらいで即電源が入った。

  • Welcome が出て android

    Ronzi A3 そのものではないということ。正規の OEM品ということだろう。

  • 言語は日本語に設定してあった。

    これは、ちょっと好印象だった。そこまでの動作確認が出来ているということで、初期不良の可能性がかなり減る。-- 海外通販で一番嫌なのは初期不良での交換だから、嬉しい対応。

  • 日付はあっていたが、タイムゾーンは GMT のまま。

  • 端末情報:

     モデル番号 RK43
     Androidバージョン 2.2.1
     カーネルバージョン 2.6.32.9
     ビルド番号 RK43_60WFRT_RZA3_20110504_1

  • いまのところ、adb に接続できていない。

    SDK が古いかもということで、ダウンロード中。

    ところで、Linux から 見える USB の情報

    T: Bus=01 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 12 Spd=480 MxCh= 0
    D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
    P: Vendor=18d1 ProdID=dddd Rev= 2.16
    S: Manufacturer=Ingenic
    S: Product=USB Mass Storage
    S: SerialNumber=INGENIC108A
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
    I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
    E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=125us
    I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms


    Product名が、"USB Mass Storage" になっているので勘違いしないよう注意。USB のインターフェイスは 2 つあって、#0 が USB MassStrage Class 、#1 が Android adb 用。

    adb 用といっても 専用の USB デバイスという気がしない。Linux の USB Gadget の 1 つを 使っているだけに思える。

  • adb が使えるようになった。原因は、inf の編集をする所を間違えたためだった。(amd64 の所を書き換えていた)


    # cat /proc/cpuinfo
    system type : JZ4760
    Hardware : lynx
    processor : 0
    cpu model : Ingenic Xburst V4.15 FPU V0.0
    BogoMIPS : 525.92
    wait instruction : yes
    microsecond timers : no
    tlb_entries : 32
    extra interrupt vector : yes
    hardware watchpoint : yes, count: 1, address/irw mask: [0x0fff]
    ASEs implemented : mxu
    shadow register sets : 1
    core : 0
    VCED exceptions : not available
    VCEI exceptions : not available


    そうそう、Jz4760 から FPU が付いたのだった。
    BogoMIPS 525.92 ... ってことは 526 MHz ?
    microsecond timers がないから MIPS32 互換じゃなくて準拠だとか。


    # cat /proc/meminfo
    MemTotal: 184792 kB
    MemFree: 6228 kB
    Buffers: 3116 kB
    Cached: 47776 kB
    SwapCached: 0 kB
    Active: 67200 kB
    Inactive: 76676 kB
    Active(anon): 44040 kB
    Inactive(anon): 50584 kB
    Active(file): 23160 kB
    Inactive(file): 26092 kB
    Unevictable: 1352 kB
    Mlocked: 0 kB
    HighTotal: 0 kB
    HighFree: 0 kB
    LowTotal: 184792 kB
    LowFree: 6228 kB
    SwapTotal: 0 kB
    SwapFree: 0 kB
    Dirty: 0 kB
    Writeback: 0 kB
    AnonPages: 94348 kB
    Mapped: 29360 kB
    Shmem: 288 kB
    Slab: 6896 kB
    SReclaimable: 1620 kB
    SUnreclaim: 5276 kB
    KernelStack: 1960 kB
    PageTables: 3792 kB
    NFS_Unstable: 0 kB
    Bounce: 0 kB
    WritebackTmp: 0 kB
    CommitLimit: 92396 kB
    Committed_AS: 2705840 kB
    VmallocTotal: 1015800 kB
    VmallocUsed: 76316 kB
    VmallocChunk: 934396 kB

    MemTotal 184792 kB ということは、256 MB から 77352 kB も抜かれていることになる。
    フレームバッファとか TV 出力とか 2D アクセラレータとか IPU とかで使う最大サイズを割り当てていくとこういうことになるのかも。
    184MB の内訳で注目するのは、(anon) と (file) 。
    (anon)の合計が 94624 kB 。Swap の対象はここ。
    (file)の合計が 49252 kB 。これは、ファイルのキャッシュ。

    Swap を設定していなければ、(anon) は減らない。アプリを起動していくと (file)を食いつぶしていき、それでも足りないと Linux が 適当に選んだプロセスを kill していく。ここに至れば正常動作ではなくなるが、その前に (file) が少なくなりすぎると 異常に遅くなる。

      ちなみに、プログラムのコード(text) は、(file) -- ファイルのキャッシュに 含まれる。遅くなるのは、再ロードが頻発するため。

    特にアプリを起動してないのに anon が 94MB もあるのは、相当に厳しそうな感じ。

    追記: 立ち上げ直後の Meminfo を再度チェックしたら (anon) の合計は、57 MB だった。あと、総メモリは、command line で mem=192M と指定していた。

    64MB ものメモリを何に使っているのか? 昔見たソースだと IPU 用のメモリなどは カーネル管理のメモリから割り当てていたのだが...

    ところで、dmesg をみていると SDカードを認識する前で

    JZMMC: CMD5 error report--Timeout while responsing
    mmc:jz_mmc_stop_dma
    JZMMC: CMD5 error report--Timeout while responsing
    mmc:jz_mmc_stop_dma
    JZMMC: CMD5 error report--Timeout while responsing
    mmc:jz_mmc_stop_dma
    mmc:jz_mmc_stop_dma
    JZMMC: CMD5 error report--Timeout while responsing

    というメッセージが出ている。stop_dma が 2 個連続で出ているところを見ると システム用と 挿した microSD の 両方とも 同じ現象のようだ。 JZMMC のドライバがバグっているのでは?と思えてくる。

    あと、ソースコード自体は、cpufreq をサポートしているはずだが ...

    /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

    とかは確認できなかった。

    Linux を見ると arch/mips/jz4760/cpufreq.c がソースコード。

    MAX_FREQ = __cpm_get_cclk() / 1000;
    /* in kHz. Current and max frequency is determined by u-boot */

    というコメントがあり、boot のパラメータで 最大周波数が決まることが分かる。さらに付け加えておくと、好きな周波数にできるわけでなく、 MAX_FREQ の 1/2 , 1/3 , 1/4 ,1/6 ,1/8 にできるだけのようだ。 そうなると BogoMIPS の 526 MHz が MAX_FREQ で 600MHz には決してできないように思えるのだが ...

    コードや jz4760_pm を見ると、boot 時の クロック の設定をそのまま使い、CCLK(= CPUクロック) の 最終段の分周器 を変更するということらしい。PLL は 2 つあるのだが、デバイスにも供給するので、動的に変更したり、好きな値を設定するものではないようだ。

    ちょっとオーバークロックにしてみるとかが出来なくて残念。ただ、クロックをどういう風に供給するかちゃんと設計した上で、安全な PLLの設定変更の方法が分かれば 動的に変更できるようになるかも知れない。

電源Off で充電できるか確認

    Jz47xx の 中華PMP だと USB に電源を接続すると必ず 無意味な充電アニメーションを表示していた。
    こいつは、USB に電源を接続してもなにもおきない。充電ランプもないから充電しているかどうかはハッキリとは分からない。

    もし本体で充電制御していたら、電源Off では充電できないことになる。不安なので一度確認してみることにした。

    結果は OK 。問題なく充電できた。

    実を言うと、2台買ったうち1台液晶を割ってしまった。結局、他のものに使うしかなくなったのだが、それは望むところでもあって液晶がないことは大きな問題ではない。ただ、本体で充電制御していたら厄介なのだ。これで野良カーネルでも動かせそうで安心した。

    ちなみに、ボタンだとか、USB,MicroSD の detect,スピーカーON/OFF 等 GPIO の割り当てを発見しないといけない。-- Jz47xx はピンが多いから単純な 1:1 の割り当てだと思えるのでそれほど苦労しないと思うが面倒ではある。

    話題が飛ぶが、Jz47xx 自体は、ハイバネーションやサスペンドをサポートする機能を持っている。例えばSDRAM を セルフリフレッシュモードにして、消費電力を押さえるとか.. だが Ronzi A3 とかは サスペンドにしても消費電力が多いようだ。まぁ Note PC でもイマイチだし、他の中華 Android でも事情は同じようなもの。大メーカが作ったスマートフォンだけがまともに対応しているような気がしてくる。

    中華 Androidは、いろいろ出ているが、チューニングという点では、ほとんど期待できない。コストをかけられないのだから、そういう傾向になるのは、必然と思える。だから、CPUの開発元がカーネルソースとかドキュメントを公開しているものを選ぶべきだろう。さらにいうと、カーネルの 置き換えに失敗したりして、動かなくなっても再インストール可能なものが望ましい。そういうものでないと カーネルを改造しようとする人が現れない。

    Ingenic は、Android としては 遅いのが難点だが、メーカが頑張っているし 今後は期待できそう。Jz4770 の機種が出るころには、買いというレベルになっているかも知れない。

追記: Jz4770

  • ftp://ftp.ingenic.cn/3sw/01linux/tmp/

    を見てみたら、

  • jz4770-20110610.rar 96465 KB 2011/06/13

    こんなものがあった。ダウンロードして覗いてみたら、vivante gpu の SDK やらそのドキュメントなどが含まれていた。カーネルや U-Boot のパッチなども含まれ、jz4770 の開発に必要な一式が入っている感じ。

    何時 Jz4770 が出荷されるのか知らないのだが、このぶんだと意外に出荷が近いのかも知れない。2次キャッシュ付きの 1GHz だが、RK2918 などの Cortex-A8 と同じようなもの。ARM でないというハンデがあるから、 RK2918 より高いということはないはず。きっと求めやすい価格帯で Android マシンが出てくるだろう。楽しみだ。

追記

ronzi A3 は、bigpad でも 扱っている 価格は、5300 円前後と安いが、別途送料がかかる。日本語のサイトだが 場所は中国。aliexpress のようなものみたいだが、Paypal やクレジットカード以外に、デビットカード、またはE-チェック(お客様の銀行普通口座を使用する)が使えるとのこと。

日本語は怪しいが、怪しいサイトではないようだ。中国のbigpad.jpからタブレットPCが無事届きました。 というレポートがあった。

追記:

G500 が 9480円で発売された

5 inch 800x480 で GPS 付き。マウンタがあるように、カーナビを意識したつくりで、G センサはたぶんない。

GPS に価値を見出すなら、良さそうな感じ。ただ、感圧式タッチセンサーはイマイチらしい。

値段的にはどうなんだろう? 450 元 なら x12.5 で 5625 円。4 割増しなら 7875円。ショップで買えるのならこんなものかな。

MIPS Androidの簡単なまとめ によると jz4760 android が中国で続々出ている。良いことだ。

ちょっと taobao を検索してみた。

  • IQQ M1 (溶智 A5) は、だいたい 399元。だが、最も売れている所は、369元。

    これ、カラーバリエーションがあるようだ。

  • IQQ M2 369元。M2 が既に出ている。値段も変わらない。辞書が付いたのが違い? -- 日本人にはメリットではないが ...

    消費電力が少ないことを謳っているようだ。1800 mAH で 4-5 時間使え、サスペンド(9mA 消費)で 200時間持つみたいなことが書いてある。ライバルは、RK2818 (not RK29xx) -- まぁそうだろう。

    改良したのなら、A3 のファームウェアも出して欲しい。

    追記 メーカーページ http://www.soiqq.com/

    ここを見ると M1 も 辞書がある。消費電力についての記述も同じ。(動画再生時 390mA で 4.6時間、サスペンド 9mA で 200時間保持)。また、両方とも JZ4760B で 660 MHz だそうだ。

    さらには、M? なんて機種も載っているのだが ... これまた同じ。いったいどういうことなのだろう?

    ところで、メーカーページには、ダウンロードのコーナーがある。firmware がダウンロードできるものしか選ばないつもりなので、firmware が出たら購入を検討するかも。

      firmware がないと、いじった後、元に戻せない。CFW も出る可能性がないわけで、いくら良さそうでも買うつもりはないのだ。

  • 博派 Q700 (カメラ付き / GPS なし) は、399元

  • 博派 Q720 (カメラなし / GPS 付き?)は、450元

  • 博派 Q500 (カメラなし / GPS 付き 5inch)は、450 元

  • 山水 V608 は、368元前後。-- これカラーバリエーションがある。よくみると、RK2818 なんて書いてある。

  • 山水 V616 は、結構ばらつきがある。488 元としておく。

    これ、FLASH 10.1 なんて書いてある。本当? CPU は、、ちゃんと JZ4760B と書いてあるんだが...

      ... ググると ヒットする。FLASH も MIPS 版が出ているのか。

  • 山水 V618 は、500 元。

  • KTMID 390元

    なぜか安くなっている。Q700 の値段を見れば、こんなものなのかも。

    ところで、カメラ付きのモデルの魅力に気がついた。もちろんカメラを使うのではない。-- カメラ用に出ている I/O を別の目的に使うのだ。

      ほとんどの製品は、製品に不要な I/O は線を引き出しておらず使えない。カメラインターフェイス(CIM) と共用になっている機能は結構あるので、なにか拡張するのに使えるかも知れない。

      データシートを見ると CIM と共用なのは、TSSI/SSI1/MSC2/EPD だそうだ。あと すべてのピンは GPIO にも使える。カメラ用インターフェイスはあまり知らないのだが、D0-D7 , PCLK/HSYNC/VSYNC/MCLK の信号線がある。これらを全部使うものなら、TSSI/SSI1/MSC2 といったシリアル系の機能 が使える。TSSI は、TS Slave Interface だが TS のストリームを出力する装置などないだろうから無視。EPD(Eink ディスプレイ?) は Display のインターフェイスらしいが、他のピンと合わせる必要があり使えない。SSI は、SPI を含むシリアルインターフェイスで、MSC2 は MMC/SD カードインターフェイス。

      MSC は、USB device の次に高速なインターフェイス。SDIO や SD カードに使う手もあるが、電子工作的には、FPGA をつなげたりすると面白いものが作れるかも知れない。

      ちなみに、カメラ付きは、Q700 と KTMID のようだ。

  • ronzi A3 の液晶 65元

    関係ないが、ronzi A3 の液晶だけ売っているところを見つけたのでメモ。ただ、わざわざ買いたいとは思っていない。taobao で買う機会があれば、これも買っておこうという程度。

    65 元 x 12.5 x 4割増し = 1137 円。随分安いようにも思えるが、単品で買うなら 4割増しでは済まないし、なにより面倒。

  • VX530LE/VX570/VX585HD 用液晶 46 元
  • 麦迪 T953 M17FHD M15L M16HD M16HD T955 T951用液晶 45元
    なども見つけたのだが、どれも同じに見える。ただ、タッチパネルを付ける端子はあるもののタッチパネル自体はついていない。
  • VX580R VX575 VX620 VP30 VP40 用タッチパネル 18元
  • VX530T VX530VX570T用タッチパネル 13.5元
    タッチパネルは、別売のようだ。同じに見えるのだが、この微妙な価格差はなんだろう?

    それはともかく、液晶まるごとなら、65 元の方が無難そうだ。タッチパネルのみなら、
  • Repair Parts Replacement Touch Screen/Digitizer for 4.3" GPS $4.92 (dealextreme)
    というのもある。ケーブルがすこし長いようだが、付けられないわけではなさそう。

    4.3inch の調査はこれぐらいにしておこう。

    ところで、原道N5 内屏 で検索すると、原道N5 の液晶が出てくる。よくよくみると 40 pin で 4.3inch のものとピン数が同じ。-- ひょっとすると 互換性があるかも。(注意: 800x480 なので接続できたとしても、カーネルその他の 再ビルドが必要。-- 普通手に負えない。)

    メモ: 40 pin タイプの信号線

    (参考: PSP Type)
    1 : LEDK GND
    2 : LEDA GND
    3 : GND VCC(2.5V)
    4 : VCC VCC(2.5V)
    5-12 : R0-R7 ←
    13-20 : G0-G7 ←
    21-28 : B0-B7 ←
    29 : GND ←
    30 : CLK ←
    31 : DISP (Display On/Off) ←
    32 : HSYNC ←
    33 : VSYNC ←
    34 : DEN (Data Enable) N.C.
    35 : N.C. AVCC(5V)
    36 : GND AVCC(5V)
    37 : XR (touch panel) N.C.
    38 : YD (touch panel) TEST1
    39 : XL (touch panel) TEST2
    40 : YU (touch panel) TEST3

    注意) PSP 用の液晶も 40pin だが、一部共通のところがあるものの、互換性はない。

おまけ、本当に 4割増しで買えるのか?

    タオバオ新幹線』が、明朗そうなので、ちょっと検証。

    上記の IQQ M1 を 369元 で 買うとする。国内送料が書いてないが、12元かかると仮定しておく。日本への送料は、500g 以内なら 130 元。 半額セール中で 65元のようだ。

      商品の重さ + 500g だそうだ。IQQ M1 は 400g で、170 元。これの 50% だから 85 元が正しい。

      ちなみに、369元のところは、中国国内送料は無料。


    為替手数料 は、1元につきプラス 1.5円 (レートは、12.5 円で 14.0 円 -- 手数料の割合は、12% )
    代行手数料 は、9,000円以下の商品を買い付けた場合 980円。(それ以上は 9% )

    計算すると 7336 円。一方、商品自体の値段は、369 x 12.5 = 4612.5 円。

    倍率は、1.59 倍で とても 4 割増しに収まらない。さらに Paypal だと +3.5 % で 1.65 倍まで上がる。

      4 割増し というのは、それ以下で買うのは難しいという基準のつもり。もし、国際送料を無視できるなら、Paypal 込み でも 1.42 倍に収まる。

    これぐらい余計にかかるのなら、aliexpress や dealexpress といったところで発売されるか、国内で発売されるのを待った方がよさそう。(あれこれついでに買うものがあれば別)

    例えば 450 元の G500 が 9480円なら 1.69 倍。あんまり変わらないように見えるが、初期不良の対応がまったく違う。

    追記: 結局 ここで M1 を買うことにした。

      M2 を買いたかったが、予約みたいなので諦め。ちなみに M2 はボタンが銀色。-- それ以外の違いは分からない。ちなみに、液晶とかいろいろ一緒に購入している。

        あ、ボタンの位置や数も違う。筐体の厚みも違うかも。

      中国人スタッフもいて、電子部品のような面倒そうなものも扱ってくれるようだ。

      重量を先方に聞いて国際送料を計算し、払込は 1回で済ますようだ。ただ、IC 1個 100g で 9個で 900g となってしまう例もあった。(トレイ付きとはいえそんなはずは ...)

      そうそう。振込先は、楽天銀行 or 東京三菱UFJ 。

追記 2011/9/29 IQQ M1 入手

    これは、普通に Android として使うために購入。別記事を立てようと思うがとりあえず。

    デザインは、無骨でただの直方体のよう。ボタンも白で目立たない。

    電源ボタンは、イヤホンジャックの横。上面左側に、キャンセル、メニュー、ボリューム +/- の 4 つのボタン。

    電源 Off のまま USB で接続すると ... PMP で良く見るような充電のアニメーションが表示される。カーネルを立ち上げていないようで結構凝ったつくりになっている。(ちなみに、サスペンド状態ではなにも表示されない)

    さて、起動。起動時間は、Ronzi A3 と似たようなもの。画面上部にガチャピンのようなアイコン。-- これは、Advanced Task Killer というものだそうだ。

      こういうのを標準として入れてくる。

    ホーム画面?は、Gセンサーに追従するが、アイコンとかパーツ毎にリドローしているような...でももっさり感はあまりしない。

    もっさり感バリバリなのが、Angry Birds 。スクロールもガタガタだし、紙芝居的。背景を表示しないようにすると、まぁ遊べるようになる。ほおっておくと画面が暗くなって 最後にサスペンドするので要注意。

    それに比べて動画は問題ない。付属のものしか見ていないが、まぁ良いかんじ。ちなみに アプリは、Media Player

    サスペンドでは、サウンドの回路も Off しているようで、ポップノイズのような音が聞こえる。問題は、サスペンドでどれぐらい持つかだが、200 時間は無理でも結構持つヨカン。
    Wifi を 自動 Off してくれるかどうかは、ちょっと疑問。M1/M2 のファームを比較してみたのだが、M2 で入っていた off するプログラムが M1 では入っていない。

      サスペンドは、問題ないようだ。全然バッテリーが減らない。

      時計のアラームをサスペンド中に設定しても、ちゃんと鳴る。ただ、スピーカーの音が小さすぎて目覚ましにするのは厳しいようだ。


    たぶん、もっさりと評される部類だが、私はサスペンドの方を評価する。もっさりは、Dalvik turbo で多少改善するかも知れないし。あとは、安定していたら、とりあえず合格。

    ところで、持ち運ぶためのケース

    Stylish 4.3inch Protective Leather Case for SmartQ V5 - White $3.54

    というのがぴったり。Smart Q5 とほぼ同じ外見だから当然だが、4.3 inch の Ronzi A3 でもフィットする。

追記 液晶交換

    液晶を割ってしまった 1号機 の液晶を交換した。

    交換に使ったのは、これ -- VX570R用(58元)。Ronzi A3 用のものが 65 元であるのだが、つい安いのを選んだ。

    結果は OK 。タッチパネル のキャリブレーションに不安があったが 問題なし。

    これで復活はしたのだが、いじっている間に バッテリーのケーブルが外れてしまった。

    もともと開発用だし、バッテリーは交換用として 保存しておき、常に USB ケーブルから電源元を取って動かすことにしよう。常時電源をつないでおいてもバッテリーのことを心配する必要がない -- まぁ、これはこれで メリットがないわけではない。

    ケースに収めるかどうかも未定。ネジが 5 つあってケースに基板を固定している。ネジをつけなくとも ケースがしっかりホールドしてくれそうなのだが ... ついでに無線LAN を外して USB HOST を引き出したいし。しばらくは裸のままにしよう。

    ついでにメモ バッテリーのプリントは、

    P325080
    KY 20110426

    50 mm x 80mm x 3.2mm 厚 -- 1400mAH とのことだったが、容量は書いてない。  

    オリジナル液晶

    KD430G18-40NB-A1
    20110331=1

    タッチパネル BB253C<U>

    バッテリーがない場合の不具合

  • 日付が元に戻る -- これはしょうがない
  • サスペンド状態になると 終わる。REBOOT するしかない。

    充電中はスリープモードにしない -- というのは効いているかも。

追記: Ramos V65pro

    Ramos の V65Pro というのも Jz4760/B らしい。taobaoで検索してみたところ、Ronzi A3 とほぼ同じスペックだが、数が出ているように思える。価格も 299元とか。あと、Gセンサがあるようだ。

     参考記事: http://pad.zol.com.cn/248/2489410.html
     メーカーページ: http://en.mumumusic.com/v65pro/spec.html -- Jz4760B だった。
     ファームウェア: http://www.ramos.com.cn/support.php?product_id=58
         RK43A_60BWFRT_RAMOSV65_20110817_1 (2011-09-13 , 244MB)

    Onda VX570R も似たスペックで 250元とか少し安い。だが、肝心の CPU は 何か分からない。RK28xx ?
    まぁ関係ないのだが、液晶を流用したので、どんなものか知りたかったのだ。

    ところで、ファームウェアを書き込むツールは、Ingenic が公開している。

  • ftp://ftp.ingenic.cn/3sw/00tools/usb_boot/

    バイナリだけでなく、ソースも公開されている。ソースコードを見てみたのだが、すなおにファイルのデータを書いているような...

    bin ファイルは 1 つで 400 MB ぐらいある。このファイルに含まれるのが、system までならこれぐらいのはず。もし、system に 他のパーティションの tar ファイルが含まれているのなら、system までがあれば良いようにも思える。ちょっと解析してみたい。

      だいぶ分かった。

      00: 4e 49 42 00 07 00 00 00 34 00 00 00 07 00 00 00 NIB
      01: bc e8 5c 18 88 07 00 00 fc 1a 0d 00 fc 42 39 00
      02: fc 32 6a 00 fc 92 a8 0c fc fa ac 0f fc 0a 8d 11
      03: c0 dd cf 06 88 07 00 00 74 13 0d 00 00 00 00 00
      04: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

      先頭は、"NIB" で始まっている。-- これから NIB ファイルと呼ぶことにすr.
      NIB 以降は、little-endian で 4 バイトづつの 値が入っている。

      最初の 0007 は、セクションの数。mbr-xboot.bin,boot.img,recovery.img, system.img, userdata.img, cache.bin, vfat.bin の 7 つのファイルに対応している。

      0x10 の 185ce8bc ファイルサイズで、次からの 7 つのエントリが それぞれのセクションの オフセット。

      これだけ分かれば、取り出すことができる。だが、その次のデータは何なのか?
      たぶん書き込み位置を示す情報だと思うのだが、0 が多い。また、先頭が 0x788 で、ファイル上のオフセットと一致する。いまのところ、これだけしか分からない。

      個々のファイルを取り出す コード をとりあえず作った。

    • split_nib.c



posted by すz at 01:11| Comment(19) | TrackBack(0) | Jz47xx

2010年10月19日

Jz4755(T552とか)

いままで、JZ4725B の話題ばかりだったので、ここで JZ4755 の話題をまとめておこうと思う。

CPU について




0.4mm ピッチ LQFP176 pin パッケージで、内部のブロック図はこんな風になっている。

JZ4725B とこが違うのかというと...

  • SIMD2 :

    SIMD 命令は JZ4725B にもある(60命令)が、命令が追加されているらしい。(SIMD2: 114命令)

  • SDRAM :

    JZ4725B は 16bit 幅だが、16bit/32bit 幅を選択できる。

  • MSC1(SD/MMC インターフェイス):

    JZ4725B は、1bit データ幅 で SD/MMC の性能を使い切れない。JZ4755 は 4bit データ幅。
    ちなみに、SDHC の最高周波数は 50MHz だが 80MHz まで使える (SDHC UHS-I対応?) 。
    MSC0 というのもある。(JZ4725B も同等機能 , 4bit 最大80MHz) ... のだが NAND FLASH と排他で使うもので boot 用。

  • SPI/SSI インターフェイス(最大 50MHz):

    JZ4725B にはない。MSC1 とピンが共用なので実質使えないかも。

  • タッチパネルインターフェイス:

    JZ4725B にはないが、その他の Jz47xx チップはたいがい持っている。

  • UART :

    JZ4725B と同等の 1ch だが、JZ4725B は GPIO に使われてしまうケースが結構ある。JZ4755 は実質使える。

  • サウンド出力 (カップリングコンデンサレス) :

    よくわからないが、BTL 出力ができるらしい。JZ4725B には BTL はない。

  • CS2/CS3 :

    NAND FLASH/SRAM の チップセレクト 要するに NAND FLASH/SRAM を合計 4 つまで付けられる。JZ4725B は 2 つまで。

  • AC97/I2C 出力: JZ4725B にはない。
  • カメラ入力: JZ4725B にはない。
  • TV 出力: JZ4725B にはない。
  • TS インターフェイス: JZ4725B にはない。


Jz4755 のチップは taobao で買える。たとえば ここなら 1 個あたり 25 元 (1元=15.5円として 390円)。パッケージは、0.4mm ピッチとはいえ LQFP176 で 個人の電子工作で扱える範囲には入る。
 あと こことか。

    DINGOO A320 などで使われている JZ4740 は BGA で、電子工作でどうにもできないので、あまり興味がなかったりする。

    JZ4760 には興味があるが、LQFP176 あたりの PMP向けチップが出た上で買えるようにならないと。

さて、このチップは、Dual-Core だが、1 つは VPU で DSP 的に使う。キャッシュのかわりに SRAM が 32KB 。-- どうやって そのもうひとつを使うのか分からないのだが、どうも qi-hardware のメーリングリストに入って ある人にリクエストすれば NDA なしでもらえるらしい。

    qi-hardware が入手しているドキュメントには、

    • XBurst Microprocessor Core, Rev 1.0, Apr 2007, 62 pages
    • Jz4725B Data Sheet, Rel July 7, 2009, 37 pages
    • Jz4725B Programming Manual, Julz 14, 2009, 529 pages
    • Jz4720 Data Sheet, Rev 1, Jun 2008, 37 pages
    • Jz4740 Data Sheet, Jun 2007, 35 pages
    • Jz4740 Programming Manual, July 22, 2009, 539 pages
    • Jz4750 Data Sheet, Apr 2009, 40 pages
    • Jz4750L Data Sheet, July 17, 2009, 37 pages
    • Jz4750L Programming Manual, July 14, 2009, 570 pages
    • Jz4755 Data Sheet, July 7, 2009, 33 pages
    • Jz4755 Programming Manual, Jul 22, 2009, 732 pages

    というのがあるそうだ。この情報は、google のキャッシュに残っていたもの。Jz4750L 単独で Data Sheet やら Programming Manual があるのが興味深いが、それはさておき Programming Manual がないと VPU は扱えなさそう。

    そもそも、Jz4725B の Programming Manual ですら入手できていない。Linux のソースコードがあるので、たいがいの機能は使えるわけだが、VPU は どういう使い方をするのか 分からない.. と思う。

      追記: なんと jz4755_pm が入手できた。VPU が出来ることは、IDCT, Motion Compensation,Motion Estimation,De-Block の 4つだけで レジスタに値を書き込むことで制御する。

    ところで、Jx4755 とかの Xburst core は、MIPS32 4K core あたりとだいたい互換らしいのだが、4K core (5段パイプライン)だと 180nm プロセスで 167MHz ぐらい。Xburst(8段) は同じ 180nm プロセスで 360MHz まで行っている。なにげに結構すごいのかも。

Jz4755 が載った PMP -- Mahdi T552


今は Jz4725B の PMP ばかり集めていて Jz4755 が載った PMP は持っていない。Jz4725B が自由に扱えるまで手を出さないつもりだが、一応調べてみた。

このなかで、Mahdiが結構 Jz4755 の製品を出している

そのなかでも気に入ったのは、T552



こんなやつ。4.0 inch (480x274) 。

気に入ったのは、ここのレビューに分解写真があるのも理由。





  • メモリは、W9812G6GH-6(16MB) x 2 。
  • 例によって FM ラジオのパターンもある。
  • LCD は 0.5mm ピッチ 50pin ? -- RGB インターフェイスか?
  • 裏面に部品がほぼないのは、嬉しかったり。

面白いことに KO Digital HD-300 というのも同じ筐体のようだ。



これは一体なんなのだろう? ProjectXA の文字が見えるところから、ChipRise というところが設計・製造しているのだろう。.. ということは、両方 OEM ?

    KO Digital (可欧) というところも 大きなメーカーっぽい。http://www.kocode.com (FLASH / サウンド付き注意)
    HD-300 はだいぶ古い製品のようで現行は、HD900A とか。ここ見ると 明らかに Jz4755 。画面が例のもの + 720p対応。
    ... どうもよくわからないが、HD系は Jz4755 が多そう。(ただし HD800系は RK かも)


それはさておき、これはどこで買えるのだろう?

ひとつは、ownta.com で、$79.80 -- 84円換算で 6700円。
Free shipping だが、 Registered Airmail $15.74 というのを見ると不安になる。送料を払うなら Express Shipping (3-5 days) - $16.74 が良さそう。

もうひとつは、taobao で、例えば ここここだと 送料込まずで 265元 -- 15.5 円換算で 4100 円。
随分と安いように見えるが、代行業者を通さないと買うのは無理そう。

    例えば taobao 代行業者の グッズエイト を通すと ...
     ( 265元 + 中国国内送料 約20元 + EMS送料 60元 ) x 15.5(元→円)
       + 手数料 500円 = 約 5800円。( これ以外に +振込料金x2回 )。

    代行業者にもいろいろあって、上記は一例。利用したこともないし別にお薦めというわけではない。
    だいたい 元→円のレートは、12円ちょっと。明示されている手数料は 5% だが、レートが 30% 増しに近い。そしてそれは、手数料や送料にもかかる。それでも高くなければ良いのだが、なにか釈然としない。


まぁこんな感じなのだが、 T552 だと Camera インターフェイスもタッチパネルも使っておらず .. 線も引き出せない。(自分でビルドした Linux を動かす前提で VPU が使えないとすると) Jz4725B の PMP と比べて メモリと SD/microSD が速いだけで 機能的にはあまり変わらないことになる。

これではちょっと面白くないのだ。... というわけでパス。

追加: T555




T552 が高いのは、液晶のせいで Jz4755 が高いせいではない。たとえば ここの T555 は、3.0 inch 400x240 , 4GB で A-32 の Jz4755 版という感じだが、170元(本体のみなら 150元)しかしない。... ただ 小さいのはメモリも 16bit かも知れないし、やはり T552 のほうが良さそう。
 あと ここ は、180元。

追記:
パスと書いたが、Jz4755 の Programmers Manual 手に入ったし、買ってしまうことにした。

なにを買うかだが、T552 は、まず欲しい。理由は Jz4755 で 本当にちゃんと H.264 が見れるのかどうかを チェックするため。ちゃんと見れるのならば、画面も大きめだし 実用としても使えそうだ。

ただ、プログラムを動かしたりするのならば、LCD がネック。Smart LCD ではないと思うので制御がたいへん。電子工作で LCD を 外すとかするなら 0.5mm ピッチ 50 pin なのは 嬉しい。フレキとかコネクタの入手性は、54pin の Neo Slim 3000 より良い。

T555 も良いように思えてきた。たぶん Smart LCD で デバッグとかするのに都合が良いし、電子工作で使うにしても LCD を外して線を引き出すのは 楽なはず。ただし、メモリが 32bit でない可能性が高く その点ではイマイチかも知れない。 jz4755 でないということはないはず。720p 対応を謳っているし、TV-out がある。Jz4725B に TV-out の機能を付けると却って高くなりそうだし。

届いたらレポートする予定。

    追記:2010/11/16 なかなか来ない。T555 は、生産中止・希望色 在庫切れだそうで.. 色変更するだけで 2 週間かかってしまった。今製造しているのは T556/T557 らしい。




ところでこれは何だろう? Mahdi が出している M18 Touch という製品らしいのだが、タッチパネルの上に(有線だが)コントローラが付いている。これが、Jz4755 だと面白いのだが ... Jz4755 とは限らない。

Jz4755 が載った E-Book -- EB70




aliexpress.com で 唯一 jz4755 でヒットするのは この 電子ブック EB70

値段は、$89.47 x 1 + $16.96(@EMS) = $106.43 。

液晶は普通の 7inch TFT LCD 800x480 だがタッチスクリーン 。メモリは 32MB , FLASH は不明(8GB まで)。バッテリー容量も不明(3300mAH まで)。 Wi-Fi: 802.11b/g が付いている。他の外部インターフェイスは microSD , イヤホン , スピーカー (マイクも? ) 。leather case が付属。

.. なんというか Android 端末を Jz4755 までダウングレードした感じ。

開発・テスト用ならこういうのも良いかも知れないのだが... 実用として使うならどうなのだろう?
CPU のクラスとしては、RK27xx よりは速いと思うが、RK28xx には負ける。そして、VPU や SIMD を使いこなしてはじめて本来の性能になるから、ファームウェアの出来が重要。
だが、肝心のファームウェアの出来が分からない。

Jz4760


ついでに Jz4760 について書いておこう



前に JZ4760 が出るらしいと書いたが、データシートから転載したらしいブロック図を発見。(url)

日付は、2010-08-20 で随分前の情報だ。ingenic のコードにも随分前から Jz4760 の対応が入っている。出るのは確実なのだろうが、いつになったら出るのだろう? 来年?

それはともかく、ありがたいことに英文の説明も付いている。たぶんこれもデーターシートからの抜粋。


  • XBurst Jz4760 is a mobile application processo targeting for multimedia rich and mobile devices like Smart phone, PMP, mobile digital TV, and GPS. This SOC introduces an innovative dual-core architecture to fulfill both high performance mobile computing and high quality video decoding requirements addressed by mobile multimedia devices.

  • The CPU (Central Processing Unit) core, equipped with 16K instruction cache and 16K data cache operating at 600MHz, and full feature MMU function performs OS related tasks. At the heart of the CPU core is XBurst processor engine. XBurst is an industry leading microprocessor core which delivers superior high performance and best-in-class low power consumption.

  • A hardware floating-point unit which compatible with IEEE754 is also included.

  • The VPU (Video Processing Unit) core is powered with another XBurst processor engine. The SIMD
    instruction set implemented by XBurst engine, in together with the on chip video accelerating engine and post processing unit, delivers doubled video performance comparing with the single core implementation.

  • The memory interface supports a variety of memory types that allow flexible design requirements, including glueless connection to SLC NAND flash memory or 4-bit/8-bit/12-bit/16-bit/24-bit ECC MLC/TLC NAND flash memory for cost sensitive applications.

  • On-chip modules such as audio CODEC, multi-channel SAR-ADC, AC97/I2S controller and camera interface offer designers a rich suite of peripherals for multimedia application.
  • TV encoder unit 10-bits DAC provide composite TV signal output in PAL or NTSC format.
  • The LCD controller support up to 1280x720 output, as well as external HDMI transmitter.
  • WLAN, Bluetooth and expansion options are supported through high-speed SPI and MMC/SD/SDIO host controllers.
    The TS(Transport stream) interface provides enough bandwidth to connect to an external mobile digital TV demodulator.

  • Other peripherals such as USB OTG and USB 1.1 host, UART and SPI as well as general system resources provide enough computing and connectivity capability for many applications.

    ざっとみて、Jz4750 から変わったのは、

    • CPU の周波数 360MHz(400MHz?) → 600MHz
    • FPU (浮動小数点演算ユニット)
    • DDR/DDR2 のサポート (SDRAM は未サポートになった?)
    • USB Device (HI-Speed) の OTG 対応。
    • 2D グラフィックスエンジンの追加。
    • MMC/SD/SDIO の数 2 → 3 等高速シリアル系の強化

    といったところか。機能的には Jz4750 のちょっとした強化版 のように見える。プロセスルールが 180nm → 130nm になるようだ。

    まぁ、最近の Android 向け 高性能 ARM チップには太刀打ちできない。だいたい RK2808 クラス。.. だが MIPS で カーネルソースや情報を公開しているということに意味がある。
    それに(おそらく)値段も安く、あまり高価でないPMPに採用されるはずで、開発して遊ぶには嬉しいポイント。

上にも書いたが これの PMP向け LQFP版 がでると嬉しい。.. だが、これを使いこなすには VPU の使い方がわからないと...

    追記:VPU の使い方は判った。Jz4755 で判らないのは、SIMD(60命令) → SIMD2(114命令) の差分ぐらい。

    2D グラフィックも判った。(Jz4760 データシート入手! ただし pm はない。)

    ― Up to 100M pix/s
    ― Up to 1080P
    ― Line/Rectangle
    ― ROP4/Alpha blending/Filter
    ― Rotation (90/180/270 degree)/Mirror
    ― 1 Rectangle Clip

    だそうだ。ようやく Rotation が出来るようになったわけだが ... キャッシュラインサイズ(32 byte) x 画面縦分の SRAM を持って 変換してから メモリに書き戻すとかしないと メモリ負荷がとんでもないことになりそう。いったいどうやっているのだろう?


追記: VPU の使い方が判ったと書いたが、Linux のソースには、説明がないものの定義が含まれている。VPU が出来ることは、IDCT, Motion Compensation(MC),Motion Estimation(ME),De-Block の 4つだが、MC/ME は定義がある。

よくよく見ると Programmers Manual にすらない OTP (One Time Programmable Module) の定義まである。
OTP には、(どのCPUかが分かる)プロダクトID や (ユニークなIDを作れる)ウェハのIDと位置が入っている。
.. これは嬉しいかも。

追記 20101122: New console in prototype stage
という記事が出てきた。

  • Ingenic 4755 (Dual Core Clocked at 400 MHz but can be overclocked to 550Mhz The second core is a VPU similar to a GPU)
  • 4.0 TFT LCD (Brand: King Display KD43G16-40NC-A3 Resolution: 480x272 Active area: 95.04mm x 53.86mm 262K color, 24bit parallel RGB interface)
  • 64MB SD Ram (Winbond W9825G6EH-6 (2 pieces) 4M words x 4 banks x 16 bits = 32 MB 166MHz/CL3 or 133MHz/CL2)
  • 2GB NAND (Samsung K9GAG08U0E 16 Gb = 2GB MLC, large block 8-bit interface)
  • MicroSD Memory Slot
  • D-Pad and Analog Nub on left
  • Standard A,B,Y,X on the right and L1 R1 Shoulder buttons on top
  • 4MP Video Camera/Camera
  • OS will be Dingux with hopefully a new menu system the fall back will be Gmenu2X



    プロトタイプ基板の画像も出ている。

    外観は、ありきたりな PSP タイプになってしまうようだ。
    (写真は他の人が予想したものだが、基板の形をみれば判る)

    基板だけ見ると Neo Slim 3000 とよく似ている。Hold スイッチがなかったり、カップリングコンデンサの容量が少なかったり デザイナーが同じじゃないかと思えるほど。それに加えて P5-5 のようなマイクロコントーローラも付いている。

    値段は、Estimated price $80 to $85 USD 。ファームウェアの開発にお金をかけていれば 妥当な気がするが... そうでなければ、ちょっと高めのイメージ。

    売れるかどうかは、オリジナルのファームウェア次第か。それが Dingux なら結構期待できるかも知れない。ただ Jz4755 用にカーネルを移植するのは 骨が折れそうなんだが、大丈夫なんだろうか?

    -- 勘違いしていたが、dingoo-digital から出ている情報らしい。本物の次機種?
    なら ファームウェア は期待できそうだ。だが、550Mhz までオーバクロックするのは本当なのだろうか? Jz4740 と同じ 180um なのに?

    -- dingoo-digital も dingoo-tech も関係ないと書いてきた。... ならファームウェアの問題は厳しそう。

    11/24 ウォッチしているんだが、Jz4760 モデルの話も出てきた。今から 9ヶ月後 .. そうかその頃か。



    まさか ... Get-Arcade Pocket Console (RMB320) のことだったりするのだろうか?

    4.3 inch で カメラ付いているし、2GB しかないし。写真さがすと microSD だし TV-OUT あるし。
    A320のチームが作れば Jz4755を選びそうなものだが ... 同じ形状の ものは 無数にある。

    やっぱり違うかも。
posted by すz at 21:04| Comment(0) | TrackBack(0) | Jz47xx

2010年09月19日

MinGW環境でmipsel-gccをビルド

MinGW環境でLinux をビルドするつもりはないのだが、USBBOOT は動かせるようにしたいし、stage1/stage2 とかぐらいはビルドしたい。

で mipsel-gcc をビルドしてみることにした。

ちなみに、使っている MinGW/MSYS 環境はずいぶん古い。最新の環境なら少し楽できるかも。

1. binutils-2.19

    $ ./configure --target=mipsel --prefix=/mingw
    $ make
    これで良いはずだが、info が作れずエラー。
    bfd/Makefile SUBDIRS から doc を除くことでビルドできた。

    $ make install

2. gmp-4.3.2

    gcc をビルドするには、gmp と mpfr が必要だが、古いのでない。

    $ ./configure --prefix=/mingw
    $ make
    $ make install

3. mpfr-2.4.2

    $ ./configure --prefix=/mingw
    $ make
    $ make install

4. gcc-4.2.4

    最初に gcc-4.4.4 を試した。-- make-3.80 以上が必要なのだが、古い環境なので 3.79 。新しい make をビルドしても動かなかったので、gcc-4.2.4 に変更。

    $ ./configure --target=mipsel --prefix=/mingw --enable-languages=c
    $ make

    libgcc2.c の _muldi3.o の make で

    ./tm.h:9:27: error: config/elfos.h: No such file or directory
    ./tm.h:10:31: error: config/mips/mips.h: No such file or directory
    ./tm.h:11:30: error: config/mips/elf.h: No such file or directory
    ./tm.h:12:23: error: defaults.h: No such file or directory

    なんてエラー

    gcc/Makefileの LIBGCC2_INCLUDES

      LIBGCC2_INCLUDES = -I/d/AVR/gcc-4.2.4/gcc

    なんて風に MinGW 流のパスを付けたら先に進んだ。

    次に libssp/ssp.c で O_RDONLY や ssize_t がないとエラー。

    gcc 自体の ビルドは終わっている。無視して

    $ make instll

    使わないはずなので、configure に --disable-libssp を追加しても良い。

確認

    linux は、scripts の HOSTのプログラムのビルドでエラー。-- mmap 使っているので無理だった。
    usbboot の xburst_stage1 は OK 。

ファイルが足りないかも知れないのだが ... 最小限のバイナリを置いておく。→ 再作成したので削除 。再作成版は後ろに記述。

... そういえば、PIC32 も mips 。役に立つのだろうか?

    "MPLABо C Compiler for PIC32 MCUs User's Guide" (pdf) に説明がある。汎用なので、PIC32 用のマクロが定義されていないぐらい? そういえば mips16/mips16e は気にしていなかった。.. チェックしたら binutils も含め mips16/mips16e は、使えなかった。

    MIC32用のビルドは、--prefif,--enable-language に加えて、
     --target=pic32mx --with-dwarf2 --enable-multilib --disable-libssp
    ぐらいを付ければ良さそう。


再度ビルドに挑戦中。

ここみて、オプション変更。

1. binutils-2.19.1

OpenWRT のパッチ集が ここにある。

200-mips_non_pic.patch というのが気になる。関係ないのも多いが 一応数字の順に全部あてる。



    $ mkdir build; cd build
    $ ../configure --target=mipsel --prefix=/mingw --disable-nls \
    --without-included-gettext
    $ make
    (info が作れずエラー) → bfd/Makefile SUBDIRS から doc を除く。

    gas でも、info が作れずエラー。
    gas/Makefile SUBDIRS から doc を除く。

    ld も引っかかる。どうやら余計なパッチを当ててしまったようだ。

    $ make install


gmp-4.3.2/mpfr-2.4.2 は上記参照

4. gcc-4.2.4

OpenWRT のパッチ集が ここにある。

随分多いのだが、当たらないものもあるし、c++ 用のものも多い。ビルドは、c だけにすることにして

    820-libgcc_pic.patch
    910-soft-float.patch
    920-soft-float.patch
    930-eabi_fixes.patch
    951-bug_37014.patch
    952-bug_34762.patch

だけにする。


    $ mkdir build; cd build
    $ ../configure --target=mipsel --prefix=/mingw \
    --enable-languages=c \
    --disable-multilib --disable-decimal-float --with-float=soft --with-abi=32 \
    --with-tune=mips32 --with-dwarf2 \
    --disable-__cxa_atexit --disable-libssp --disable-tls --enable-static \
    --disable-nls --disable-threads
    $ make
    (libgcc2.c の _muldi3.o の make でエラー) → gcc/Makefileの LIBGCC2_INCLUDES 編集
    $ make
    $ make install


パッチは、tar+gzip で固めたのを 次に置いておく。


バイナリ (最小限 -- 作成中)
posted by すz at 05:09| Comment(0) | TrackBack(0) | Jz47xx

2010年08月20日

jz47xx 開発計画(計画の修正)

Neo Slim 3000 or A-41 で Linux を動かすつもりなのだが、全然進んでいない。

理由は面倒だから。動いたときの満足感がイメージできていなくて面倒だとばかり感じてしまう。

ここで、なにが一体面倒なのか書いて(そうすることで実は面倒じゃないじゃないかと思える場合が多々ある)、 実現できると何が嬉しいのかについても書いてみる(動機の強化)ことにする。

なにが面倒なのか?

Linux は既にあるのだ。コンパイルもできている。面倒なのは、シリアルコンソール。これがないと動作の確認も最初のオペレーションもできない。だが、0.4mm ピッチの IC から線を引き出さなくてはならず、自分のスキルでは実現ができない。

そうなると、シリアルコンソールに代わるものを用意しないといけない。で、usbboot のプロトコルを改造して メッセージのやりとりが出来るようにしようと考えている。

    こうなると u-boot - linux の通常起動は無視して、usbboot - linux の直接boot をすることになる。

    面倒1: メモリマップ

    どこにロードしてどうやってパラメータを渡すのかをちゃんと設計しなければならない。そして障害になるのが、xburst_stage2 ブートローダの ロード場所と 使用しているバッファ(1MB もある)

さて、メッセージのやりとりは、PC 側のプログラム(usbboot) がポーリングすることで 行うことになりそうだ。

面倒2:ポーリングの方法

普通ポーリングする場合 select システムコールを使ったりするのだが、USB を使うための ライブラリ libusb には select を支援するための機能がない。

timeout を使ってビジーループにすれば実現できるのだが、作法的にどうか? というのがあって躊躇している。マルチスレッドにするのも手なのだが、Windows でも動かしたいし OS の違いを吸収するのもまた面倒だったりする。

面倒3:Linux のシリアルコンソール代替ドライバ

いま考えている方式だと、xburst_stage2 で usbboot が動いている状況を USB をリセットすることなく Linux に引き継いでもらわないと うまくいかない。

なので、xburst_stage2 相当をつくり直して Linux に組み込むことになる。これが面倒で面倒で。

    xburst_stage2 を破壊しないようにして、 xburst_stage2 に callback のエントリーを加えたほうが楽でスマートなように思えてきた。

    メモリは無駄に使うことになりそうだが、ここは目をつぶろう。

    ちなみに、Linux のメッセージの出力は、メモリに書いて callback を呼び出すことになりそう。入力は ポーリングになると思う。シリアルドライバもポーリングできるようになっていたと思うので、たぶんあまり悩まずに作れる。

これができると何が出来るようになるのか?

まず、シリアルコンソールだけが使える Linux が出来るわけだ。

これで何ができるかというと 立ち上げメッセージが見える。だが、root を mount するところで panic することになる。

panic するところまで確認できたら、initrd を作って root にして いくつかのコマンドを用意すれば、デバッグができるようになる。

SD カードは ドライバが動くと思うので、次の段階では SD カードを mount して ストレージが使えるようにする。

次に LCD のドライバ。LCD の初期化の問題さえクリアすれば、LCD もまた動かせるはず。LCD が動けば、シリアルコンソール以外にメッセージを見る手段ができたことになるから、xburst_stage2 を開放して、usg-gadget で Network を通す。

    詳しく書くと、
    1) Linux から callback しないようにする。
    2) xburst_stage2 が使っていたメモリを linux が使うように組み込む。
    3) usg-gadget ドライバを組み込む。
  • 1) - 3) を連続実行する手続き(スクリプト?)を シリアルコンソールから実行するとともに usbboot を 終了する。(切り替えに失敗するとなにも出来ないので shutdown か?)
  • Jz47xx 側で dhcpd を動かすと PC 側の設定なしで、(ローカル IP を使った)Network の接続はできる。

ここまでくると普通に Linux が動いているのに近くなる。login もできるだろうし、nfs を使ったりもできる。

で、このあたりから始めるのが、Neo Slim 3000/A-41 固有のドライバの作成。.. といってもボタンぐらいのはず。

装置固有のドライバが捗らなくても、やれることは多い。システムをつくり上げるために色々ビルドしなくてはならないし、サスベンドとかもある。

それに、正規の boot も やらないと。u-boot についても 同じように シリアルコンソールの代替をすることからやれば良い。

これができると何が嬉しいのか?

とりあえず最終形態ではなく、usbboot から Network が使える前後まで来たらなにが嬉しいか。

まず嬉しいのは、開発できるものが複数になること。あきたり、行き詰まったりしたら別のことをやれば良い。

性能を調べても良いし、オリジナル ファームウェアがどう FLASH を使っているのか調べたりしても良い。u-boot の移植でも良いし。

あと、ここまで来れば立派な開発環境になるというのも嬉しい。メモリを付け替えて 64MB にして ビルド三昧とか。-- 64MB でも全然足りなさそうだが、足りないのは gcc の CPU パワーと ld(リンカ)のメモリが第一。これを 外の IA マシンにやらせればなんとかなるはず。(ただ、それの前提として nfs でファイル共有が必要なはず)

あと、USB-gadget での Network は Windows でも出来る。SD が使えさえすれば、PC でも動かすことは出来るようになる。cifs を入れれば PC との共有(PCがサーバ)もできるし 箱庭のようなシステムを構築することも出来る。

    SDL 1.2を使えば Windows でも グラフィックの表示は簡単にできそうだ。
    Jz47xx のフレームバッファを抜いてきて Windows で表示させれば、LCD が動かない場合でもデバッグは出来そうだ。こういったのは機種依存がないので、意外と便利かも知れない。

    あと SDL は、スレッドを提供している。SDL に全面依存して作ると楽かも知れない。-- Jz47xx 自体も SDL つかうことになりそうだし。

    では最終形態ではなにが嬉しい?

    まぁものを作るネタがあればそれだけで嬉しいのだが、どういうものにつながっていくかイメージしておけないと ..

    デバイスを追加したりする改造をしない前提ならば、入力は マイクと USB device しかないのだ。マイクを無視すると、PC と接続してデータを取り込むような使い方が第一。PC と接続している間は PC を使えばよいわけで、持ち歩く前提なら、データを見ることしかできない。動画や音楽はそれなりのレベルになっているわけで、嬉しい点を見つけるとすれば、がんばって不満な点をなくせるということになる。
    あと、中華PMP の EBOOK 機能は貧弱なので、それが充実すると 嬉しいかも知れない。
    PDF viewer とか その他 viewer を充実できると まぁ嬉しいから そのあたりが嬉しい点。

    あと、PC と接続して PC だけではできないことをする という可能性が残っている。
    追加ディスプレーというのが そのひとつ。嬉しくないかも知れないが要素の1つ。
    あと、セキュリティーの理由などで PC ではできないことをできるようにする観点がある。PC のセキュリティーをすり抜けるとかそういうことではなく、共用PC におきたくないデータを置くとか .. 共用PC にはインストールしなくないアプリケーションを動かすとか ... まぁそういうもの。Linux を動かすこと自体も この範疇かも知れない。こういう使い方では、PC でできることをあえて PMP 上で動かす必要はない。また、画面を PC に出すなど、PC のリソースを利用できる。

    マイクも なにか利用できるアプリケーションがあるかも知れない。音声認識するには十分なパワーがあるはず。音紋とかで誰と会っていたか/何をしていたか記録するとか .. で、秘書ソフトと連携させて ... なんてのは難しいだろうか。

    もし、Jz4755 などで カメラが利用できるなら、スタンドアロンでできることが増えるかもしれない。マイクよりカメラはさらに難しいと思うので、マイクさえ十分な利用ができないなら、なくても別にかまわないかも知れない。


追記: メモリマップについて


    0x80000000
    割り込みベクタとか
    0x80002000
    (8KB) xburst_stage1
    (stack)
    0x80004000
    0x80010000
    0x80100000 (offset 1MB) :
    u-boot : kernel(vmlinux.bin)
    : + initrd
    0x80600000 (offset 6MB) 0x80600000(max)
    kernel (zImage)

    0x81c00000
    (4MB) xburst_stage2
    (stack)
    0x82000000 (32MB の場合)


    xburst_stage1 は、0x80002000 (先頭 +8KB) にロードされ、xburst_stage2 は、後ろ 4MB にロードされる。メモリのサイズは、SDRAM の設定情報から計算している。

    xburst_stage2 のスタックは、start address + 0x3ffff0 (4MB の終わり) に設定。1MB のバッファ(Bulk_buf) は、配列で 普通に BSS 上に取られる。

    ちなみに、xburst_stage1/stage2 共に 先頭は jump命令 + nop。
    その後の 32バイトにパラメータが設定される。

    こういう構造をしているので、Linux は 先頭の方にロード可能。usbboot のプロトコルでシリアルコンソールを使う場合は、後ろの 4MB は使わないようにする。

    使わない場合は、全部のメモリを使えるが HOST側 が usbboot 使えなくなったことを知っていないと まずい。

    あとは、linux に対するパラメータを (u-boot が)どのように渡すのか調べないと。

    これは、普通の関数呼び出しと同じで a0-a3 にパラメータをいれて jump する。文字列を渡すからその領域は 割り当てておかないといけないが。

      prom_argc = (int) fw_arg0; // a0
      prom_argv = (char **) fw_arg1; // a1
      prom_envp = (char **) fw_arg2; // a2

      だそうだ。envp は jz47xx では未サポート。prom_init_cmdline() で argc,argv を元に、arcs_cmdline に cmdline を再構築する。スペースでくっつけていくだけだから アーギュメントは command_line のイメージ 1 個でも良い。
      なお COMMAND_LINE の最大サイズは 256 バイト。


    ロードするアドレスは、ビルドするときに決まる。

    dingoo-linux だとどうも 0x80600000 らしい。

      zImage は、0x80600000 にロードされ、先頭アドレスから実行する。実行すると、0x80010000 〜のアドレスに vmlinux.bin と initrd を展開して制御を渡す。パラメータは、セーブしておいて、同じパラメータを vmlinux.bin に渡している。

    ちなみに u-boot は 0x80100000 。

    ところで、xburst_stage2 とかのメモリを Linux に渡して使えるようにするには、どうしたら良いのだろう。
    initrd のメモリを開放するとかは出来るから、方法はあるはずだが、スマートな方法を取りたい。

      reserve_bootmem(__pa(initrd_start), size, BOOTMEM_DEFAULT);
      free_bootmem(__pa(initrd_start), size);

    こういう使い方をするらしいのだが、

      void __init free_bootmem(...

    と __init 属性が付いているから 初期化終了後は、free_bootmem は使えない。まぁ initrd も後で開放できるからなにか方法があるのだろう。
    重要なのは、usbboot のときは、後ろの 4MB について reserve_bootmem しておくこと。メモリーサイズ自体を -4MB とすると再利用するとき困る。

追記: シリアル コンソールドライバ

    多くの SoC の シリアルは、8250 の拡張の 16550A と互換性を持っている。linux では、8250 ドライバが一手に引き受けているようだ。

    Jz47xx でも

    CONFIG_SERIAL_8250=y
    CONFIG_SERIAL_8250_CONSOLE=y
    CONFIG_SERIAL_8250_NR_UARTS=2
    CONFIG_SERIAL_8250_RUNTIME_UARTS=2

    なんて定義をして、汎用ドライバを使っている。

    さて、シリアルのふりをして CONSOLE にも登録できるドライバを用意しないといけないわけだがどうしよう。

    とりあえず drivers/char/Kconfig を見て CONSOLE になれる変なドライバをさがしたところ bfin_jtag_comm.c というのを見つけた。どうも kthread を作ってポーリングしているようだし、マネして作れば良さそうに思える。ライン数は 365 行であまり規模が大きくなさそうだし、いけそうだ。

    これを drivers/char/jz_char に移し、jz_usbboot_comm.c とかにして 変更していけば、良さそう。

    ところで、コールバックのエントリをどこに置くか?

    stage2 の先頭 の jmp 命令の次に 4x8 のエリアをパラメータエリアとして使用している。ここには、fw_args 構造体をコピーするのだが、fw_args 構造体のサイズは 4x7 分。もう 1 エントリ付け加えることができる。また、start, size というメンバがあって、これは未使用。-- すくなくとも 初期化は不必要にできる。
    このあたりに callback 関数のアドレスを入れておけばよさそう。

追記: SDL 1.2

    ソースコードをダウンロードして configure するだけで MinGW 版はビルドできた。

    これが、libusb と MSYS コンソールの stdout をスレッド環境で使えるなら言うことはないのだが...

      ちなみに SDL 自体は グラフィックを提供するだけで、メニュー 、ダイアログなどは提供しない。それどころか フォントの描画すら提供していない。

      でも Jz47xx のフレームバッファを表示するだけならそれで十分。
      メッセージは出力したいが、MSYS コンソールに出力できるなら、それでもいいかと思う。log とか取るの楽だし。

      もし、フォントを表示するなら、DINGUX と 互換になるようにしたほうが良さそう。これは別途考える。


    試してみると全然だめ。

      gcc -o testkeys.exe testkeys.c -g -O2 -I/usr/local/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main -DHAVE_OPENGL -L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows

    こんな風に testkeys はビルドされるのだが、なにもメッセージがでない。

    ... 調べてみると Windows は、stdout.txt , stderr.txt に出力されるものらしい。で、環境変数を SDL_STDIO_REDIRECT=0 としておくと reopen されないみたいに見える。

      あ、できた。環境変数設定することで MSYS コンソールでも コマンドプロンプトでもちゃんと stdout が出力された。
      あとは、スレッド使って usbboot と SDL 画面の 両立ができればいけるか。

    • ちなみに、使用している qi-hardware 版 usbboot は、Linux 以外で コンパイルできることを考慮していないから 先に移植しないと。
      さらに、ちょっと面倒なことに confuse も 入れないといけない。
      mingw での confuse の ビルドは、ここ参照。
      とりあえず ... ここまでの環境を usbboot-wk4.tar.gz に置いておく。
      Linux だと動くけれども MinGW だとビルドできるものの usb_claim_interface で エラーになったりするのが現状。
      ( ちなみに inf ファイルは 0x4750 も通すように修正)


追記: ちょっとメモ

    Linux 2.6.30 あたりのカーネルは、mm/migrate.c が含まれている。なにをするものかというと、ページを動かして連続領域を確保しようとするもの。今までは 4KB のページの数倍 -- 16KB でも厳しい状況があったのが、取れるようになる。ただ、128KB とか 数MB (システムの 10% とか) とかの連続領域を作ってくれるのかどうか? ちょっとわからない。目的が違うから厳しいような気もする。
    MB クラスの 連続ページが取れると、IPU用メモリの動的アロケートができるのだが ... そうすると動画を使わない場合は メモリが多少増えて嬉しいのだ。 360p -- 仮に 640x360 だとすると IPU を使うには たぶん 256KB/64KB/64KB の 3 つの連続領域が 取れる必要がある。720p なら 1280x720 として 1MB/256KB/256KB が必要そう。PMPみたいなシングルタスクに近い使い方なら取れるような気もするし無理なような気もする。--- うーんわからない。

    最後の 4MB を HIGHMEM にできないかな。HIGHMEM だと slab 置けないから 確実にメモリを追い出せるような気がする。

    ちなみに、オリジナルの処理は、初期化時に __get_free_pages() を使って 4MB を予約している。予約したエリアは jz_imem_base に保存される。
    ここから メモリ領域を 割り当てるのは proc を使って行う。

    ... usbboot を使ったときは、当初は使えず Network でつないだ後に 使えるようになる ... といった仕様で十分そうな感じ。
    そういうふうにすれば、jz_imem_base の設定ぐらいで事足りる。

    こういう風に しておいて、後で migrate の機能を使って動的に確保できないか試す ... のほうが手順的に楽そう。

usbboot (stage2) → Linux への制御の渡し方

    どうやって Linux に制御を渡すのか について整理しておく。

    stage2 は初期化が終わると 無限ループで udc4740Proc() を実行する。その延長で いろんなコマンドの処理を行う。コマンドの中には VR_PROGRAM_START1(未実装) と VR_PROGRAM_START2 がある。

    VR_PROGRAM_START2 は、渡ってきたコマンドパケットに含まれる アドレスを パラメータなしで call する。( アドレスは USB の wValue , wIndex を使っていて パラメータを入れる余裕はない )。

    もしリターンしてきたら、処理を続行する。Linux に処理を渡したとすれば、もちろんリターンせず Linux がスタートすることになる。

    で、Linux のドライバで (USB Device ドライバを 使うことなく) udc4740Proc() をポーリングしてやれば、Linux が動作しながらも USBBOOT のプロトコルを受けられることになる。

      Linux のカーネルは 仮想アドレス を使う。stage2 の アドレスが変わってしまうと 暴走する。.. のだがたぶん大丈夫だろう。(未確認)

      udc4740Proc() は、再帰的に call されることになる。再帰自体は問題ないが、一回リターンして 再度 call されるのと比べると いくつか実行されない処理が出る。

      • rx_size = 0 が実行されない。

      両方 2 度 同じ処理をしても問題なさそうなので、処理をする前に 実行しておいたほうが良いかもしれない。( 不要かも知れないのだが、面倒なので調べていない )

    さて、ポーリングするだけだと、メッセージをやりとりすることはできない。メッセージがどこに置いてあるか の情報を Linux が知る必要がある。それも登録しておけば ... Linux から メッセージの送受信のコードが書ける。

    ついでなので、パラメータとして渡すコマンドラインも 同じように登録しておいて あらかじめ送り込んでおき、a0,a1 に常に設定するようにしたら良いかも知れない。(ただし、登録エリアが少ないので、メッセージの置き場所を構造体にしておく)

追記:を !


    Subject: [PATCH v2 00/26] Add support for the Ingenic JZ4740 System-on-a-Chip
    Date: Sat, 19 Jun 2010 07:08:05 +0200
     (中略)
    This patch series adds support for the Ingenic JZ4740 System-on-a-Chip.

    The JZ4740 has a mostly MIPS32 compatible core (no on cpu timers) and many on
    chip peripherals like RTC, NAND, MMC, OHCI, UDC, ADC, I2C, SPI, AC97, I2S, I2S
    Codec, UART and LCD controller.

    The JZ4740 is mostly used in eBooks, PMPs and hand-held consoles.
    This series contains patches for the Qi Ben NanoNote clamshell device as the
    inital supported device.
     (後略)

    こんなメールを見つけた。JZ4740 用のコードを メインストリームにマージしようとしているのか?
    Ben NanoNote とか の名前が出ているし ingenic 版から jz4750系とかをザックリ切り捨てた qi-hardware 版みたいだ。(dingoo-linux とも違う)

    まぁベースとして入ってくれると 差分が分かるから jz4740 は今のところ 関係なくても 嬉しいかも。


MIPS のマシンについて

ARMと比べて MIPS のマシンは種類が圧倒的に少ない。安価でLinux を動かすのに向いているものは、さらに少ない。

Jz47xx の 中華PMP と比べてどうなのか..ちょっとチェックしてみた。

  • linkstation HD-HLANv2

    バッファローのNAS 。CPU IDT 79RC32H434-400BC (MIPS32 4Kcコア, 400MHz)、メモリ 64MB (DDR, 16bit)。

    玄箱でNetBSDを動かす Linkstation-mipsel に情報がある。ブートログをみると キャッシュは、8KB/8KB で小さい。


      total memory = 65536 KB
      avail memory = 60584 KB
      mainbus0 (root)
      cpu0 at mainbus0: 400.00MHz (hz cycles = 2000000, delay divisor = 200)
      cpu0: MIPS 4Kc (0x1800a) Rev. 10 with software emulated floating point
      cpu0: 8KB/16B 4-way set-associative L1 Instruction cache, 16 TLB entries
      cpu0: 8KB/16B 4-way set-associative write-back L1 Data cache


  • La Fonera

    La Fonera wiki に機種の情報がある。

    FON2100E/FON2200/FON2201
     Atheros AR2315 183 MHz , Memory 16MB (SDRAM 16bit)

    FON2202
     Atheros AR5315 183 MHz , Memory 32MB

    FON2305E/FON2405E(FONERA SIMPL) -- iphone のおまけ(非売品)
     RT3050(24KEcコア,320MHz), Memory 32MB(SDRAM 16bit), FLASH 2MB(SPI-FLASH mx25l1605d)

     -- Hot Tuna Labsでは、FON2405E を解析しているようだ。
     -- FON2405Eの中身

     シリアルが付いているのがいいな。FLASH は裏の 16pin っぽい。.. 見覚えがあるマーク -- シリアルFLASH じゃないか? 

     シリアルFLASH なら 8pin-DIP ソケット付けて差し替えなんてのが可能かも。
     FON2202 もシリアルFLASH だった。裏の 16pin の IC

     ETHERNET はあるけど ストレージ がないのは厳しいな。FON2305E だと USB のパターンがあるらしいけど。

      FON2305E の写真を見たら... USB 以外に NAND FLASH のパターンもある。載せ替えできる シリアル FLASH/NAND FLASH/SDRAM 全部持っている。これも楽しいかも。


     これで遊ぶなら SeevaPlug のほうがはるかに良さそう。


      U-Boot 1.1.3 (Jan 6 2010 - 07:10:30)
      Board: Fonera
      DRAM: 32 MB
      relocate_code Pointer at: 81fac000
      spi_wait_nsec: 3e
      spi deice id: c2 20 15 c2 20 (2015c220)
      find flash: mx25l1605d
      raspi_read: from:41030000 len:1000
      Using default environment
      ##### The CPU freq = 320 MHZ ####
      SDRAM bus set to 16 bit
      SDRAM size =32 Mbytes
      Please choose the operation:
      1: Boot system code via Flash (default).
      2: Load system code then write to Flash via TFTP.
      3: Entr boot command line interface.
      booting from flash
      ## Booting image at bf020000 ...
      :
      :
      mx25l3205d(c2 20160000) (4096 Kbytes)
      mtd .name = raspi, .size = 0x00400000 (4M) .erasesize = 0x00010000 (64K) .numeraseregions = 0
      ramips_mtd: kernel size is 613787
      padded kernel is 00096000
      Creating 6 MTD partitions on "raspi":
      0x00000000-0x00010000 : "uboot"
      0x00010000-0x00020000 : "boardconfig"
      0x00020000-0x00200000 : "image"
      0x00020000-0x000b6000 : "linux"
      mtd: partition "linux" doesn't end on an erase block -- force read-only
      0x000b6000-0x001f0000 : "rootfs"
      mtd: partition "rootfs" doesn't start on an erase block boundary -- force read-only
      mtd: partition "rootfs" set to be root filesystem

    ... シリアルFLASH でも MTD 使っているのか。

  • OpenMicroServer

    49800円? (2006年 当時)

    CPU Alchemy Au1550 400MHz
    Memory 128MB(PC133 SDRAM), FLASH 16MB

... CPU 的には遜色ないようだ。(MIPS でも 高価なものだと GHz 以上の CPU とか SMP dual-core とかあるが、ここでは対象にしない。)

Jz47xx の 中華PMP はネットワークがないのが弱みだけれども、FLASH が多いのは嬉しい特徴なのかも知れない。

    ホストがあれば、USB (Device) 経由でネットワークをホストにつなげられるのだが、スタンドアローンで動かすサーバ用途は厳しい。

メモリはどれも少なく開発マシンとしては厳しい。意外にも Jz47xx の Netbook (128MB)がまともな方かも。

-- 128M化改造は、意味がありそう。あきらめないでおこう。

    ARMなら SheevaPlug とか 玄柴(SATAつきSheevaPlug) が 512MB 積んでいるから開発もできるのだが ...SDRAM で 256MB とか 512MB はコスト的にとても厳しそうだ。

    一応 128MB + SWAP があれば、自力で (まともな)ディストリビューションをビルドできる。64MB だと無理かもしれない。

いま現在 MIPS で高性能かつ安価なマシンとして、Jz47xx の中華PMP , Netbook は有力な存在のようだ。

もうしばらくすれば、次世代の Jz476x とか Jz48xx とかが出てくる。(Linux に入っている)。Jz47xx は当面遊べそう。
posted by すz at 23:02| Comment(0) | TrackBack(0) | Jz47xx

2010年06月20日

SDRAMの換装方法(案)

Neo Slim 3000 でいろいろ遊ぶ計画はちっとも進んでいないのだが、また横道にそれて、メモリを増やすために SDRAM を換装する方法を検討してみた。

Neo Slim 3000 では 16bit 幅の 256Mbit SDRAM を 1つ使っている。

メモリを増やすためには、もとのを取り除いて 512Mbit SDRAM を付ければ良いわけなのだが、生憎 16bit 幅のメモリは高価(1個3000円以上)なうえに入手が難しい。NOTE-PC 用の PC133 SO-SIMM 512MB なら 3000 円程度で 入手できたのだが、8bit 幅。

これをなんとか使えると 32MB を 128MB まで増設できるのだが、どう配線するのか?



配線を示したのがこれ。赤と青のピンが 16bit 品の データバス。青のピンが 8bit 品の データバス。-- 親子にして、上になった SDRAM の 青を 赤のところにジャンパすれば良い。

具体的には

  • まず下になる SDRAM は、そのまま普通に付ける。

  • 上になる SDRAM の青のピンを水平になるように曲げる。
  • >のこりのピンは下と接触するように ランドを垂直にする。
    注意: 根元から曲げないこと、簡単にもげてしまう。ニッパで挟んで曲がっているピンを伸ばす。あと、曲げなくても出来そうなら曲げない方が良い。

  • 青以外を 下のピンにハンダ付け

  • 青を 赤のところにジャンパ


たぶんこうすれば OK 。SDRAM は 0.8mm ピッチで他と比べれば工作が容易。配線も単純だし、私でも出来そうな気がしている。

追記: あ、ダメかも知れない。DQM を無視していた。これでいけるのは、16bit 単位の read/write しかしない場合。(8bit 単位でアクセスできるようにするには ちょっと面倒)。 データシートを確認しなくては。

    と言うか普通にダメだ。これで無理やり動かすには、DMA を含めてすべてのバイトアクセスを排除しないと。-- メモリのキャッシュ経由のアクセスだけはバイトアクセスがないことを保証できるから、不可能ではないかも知れない。カーネル内部の(DMA を含む)メモリアクセスの範囲に限られるはず。

    でも、Low バイトと High バイトを分けて配線するのは極端に難しい。上、下、基板の3層を引き出して全部違うところに配線しなければならない場所がある。-- 私には無理だな。

    ではカーネルの方をなんとかする方針で検討してみよう。

    ところで、DQM は、UDQM の方に接続されている。16bit アクセス時は LDQM = UDQM だから read/write ともに問題ない。

    High バイトの Read では Low バイトのデータが 出力されてしまうが問題ないはず。Low バイトの Read では出力されないわけだから 正しく読めない。
    あと、High バイトの Write は Low バイトに違うデータが書きこまれ、Low バイトの write はデータが書き込まれない。

    こんな感じで、Write は、16bit 単位で書くしかない。ただ read はどうだろう。無駄にデータが出力されるだけだから 8bit アクセスが出来るようにできないだろうか? データシートを読んでいてもよくわからないのだが L 固定ではダメなのだろうか?

    なぜ気にするかと言うと IPU 。RGB の output は 16bit/32bit で問題ないはずなのだが 入力が 8bpp なので バイトアクセスが発生する心配がある。最適化してあれば 32bit アクセスしかしないと思うが分からない。

    ううむ。これは実験して確かめないとマズそうだ。

    -- ちょっとデータシートをチェックしてみた。

    DMA コントローラ:
     転送単位 8/16/32 bit, 16/32 byte (TSZ)
    利用する装置:UART,SSI,MSC(MMC/SD),AIC(AC97/I2S),TCU(タイマ),SADC(オーディオADC),SLCD(Smart LCD)

      転送幅が 8bit のものだけ grep してチェックすれば良さそう。
       DMC コントローラを利用しないのは、IPU。

      8-bit が関係するのは、DP/SP/TSZ のみ で、DP/SP は装置のポート幅だから関係ない。

      Linuxでの定義は、DMAC_DCMD_DS_8BIT 。

      これを使っているのは、ヘッダファイルの中では、
      DMA_8BIT_TX_CMD , DMA_8BIT_RX_CMD , DMA_16BYTE_TX_CMD, と __dmac_channel_set_transfer_unit_8bit() だけ。

      DMA_8BIT_TX_CMD/DMA_8BIT_RX_CMD はシリアルだからちょっと置いておいて .. __dmac_channel_set_transfer_unit_8bit() を使っている装置は、... sound/oss/jz_pcm_tlv320aic1106_dma.c だけだった。

      C ソースコードの中で、DMAC_DCMD_DS_8BIT を使っているのは dma.c で jz_set_dma_block_size() 。

      この関数を使っているのは、sound/oss/jz_ac97.c

      これは、AIC(AC97/I2C) を使うから Jz4725B は関係ない。

      シリアルは、ちょっと複雑。モードによって 8bit を使ったり使わなかったりするようだ。... たぶん、使うのだろう。

      結論としては、シリアルを使わないように config を設定した カーネルなら大丈夫(だろう)



ところで、こうやってメモリを増やしても 自動的に認識するわけではない。使えるように SDRAM の設定をして やらないといけない。なにもしないと(立ち上がらないということはないと思うが)、換装前のメモリしか認識しない。

SDRAM の設定をしているのがカーネルならカーネルを対応したものに置き換えないといけない。

この改造を 分解したり、文鎮になったりした Neo slim 3000 1号機にたいしてやってみようと思っている。

    その前に PMP-3100 で実験するかも。 あと A320/A330 などは 2 つの SDRAM を使っているので 256MB になる。 やってみて簡単ならトライするかも。



ところで、IC を外すには、サンハヤトの表面実装部品取り外しキット SMD-21 を使う。このキットも高価だが興味から既に買っていて死蔵しているので問題ない。

ただ注意点がある。

「ハンダ付け(半田付け)職人の はんだ付けblog」を見ると、低温ハンダで使われているビスマスは、もろくてクラックの原因になるそうだ。できればコテ先も使い分けした方が良いとのこと。当然だが、取り外した部品に付いた低温ハンダもできるだけ取り除いた方が良い。

なかなか面倒な話だが、まぁやってみようと思う。

追記: K4S511632D-UC75 2 個 と EM63A165TS-6G 10 個入手。

K4S511632D-UC75 は、64MB 133MHz 。 EM63A165TS-6G は 32MB 166MHz 。

SDRAM の数は十分になった。8bit x 2 の換装は諦めていないが、Linux を動かして よく理解した後にしようと思う。

最初は、簡単そうなので練習したい。使うのは当然 32MB の方。



Neo Slim 3000 は、ピンの周りが空いていて 簡単そうなのだが .. すでに 32MB だから除外。(しかも EM63A165TS-6G が既に載っている)



PMP3100 または P5-5 は、ピンのそばのチップが邪魔。裏蓋を開けただけの状態で 換装ができそうなのがメリット。

唯一の Jz4725(無印) である PMP3100 は カーネルを作るつもりはなく、換装しても無意味。P5-5 は いずれ Linux を動かすつもりなので、意味はある。

    P5-5/PMP3100 では、ボタン用に専用の IC を使っている。通信プロトコルの解析は、ファームウェアが動いている状態でロジアナをつなげないと無理(なはず)。

    ... そうなると ロジアナを当てるまでは無理なことはできない。
    後回しにするか ... もしくは PMP3100 で練習だけするか。

    あと Linux の P5-5 対応が終われば、PMP3100(Jz4725) 対応は、難しくはないのかも知れない。オリジナルカーネルの機能で変更するのは、MSC1(MMC/SD) の 1 bit インターフェイス対応ぐらい。でも、プライオリティは最低なのだ。



A-41 は、片方が基板の端だし 簡単そう。邪魔なバッテリーは LCD に貼りつけてあって剥がすのがやっかいなのだが、裏蓋を開けた状態で 換装できそう。( ちなみにボードを外しても液晶が付いてくるので 特に換装が簡単にはならない ) 。それに、Linux の移植は、A-33/A-41 を優先する予定で 意味もある。



A-41 も一見簡単そうに見える。が、ケースが邪魔なので 一旦ボードを外さないといけない(と思う)。... 経験を積めばあるいは簡単なのかも知れないが。

リスクについて

16MB しか載っていない PMP だと アドレス線 A12(pin 18) が配線されていないかも知れない。多分そんなことはないと思うのだが ... 確認してみないことには安心できない。

    たぶん、Jz4725B(pin 18) から (とにかく)線が出ているか、SDRAM に (とにかく)接続されていることが確認できれば、よいはず。


あと、8bit x 2 だと オリジナルの ファームウェアは動かない。それは良いのだが .. 電力的にも不安がある。

SDRAM は結構大食いで、EM63A165TS を例にとると operating current(burst mode) が 160mA も使う。Active Stand by でも 30mA (?) 。Self Refresh Mode に入ってようやく 3mA 。power-down mode にすると 1-2 mA 。2 chip になると x2 。A-41 に使われている (W9812G6PH に近い) W9812G6IH だと operating current(burst mode)が 120mA 。160mA でも随分増えているのに 320mA にもなったら果たして供給できるのだろうか?

K4S511632D-UC75 も調べてみた。operating current(burst mode) が 220mA と大分増えている。さらに refresh の瞬間は 400mA だそうだ。

入手した SO-DIMM に載っている 8bit 幅 512Mbit の SDRAM は、HYB39S512800A 。データシート(HYB39S512800AT) では、burst 145mA / Refresh 300mA @133MHz で少し少ないようだ。( ただし、burst は同じ測定項目ではない。1bank 4burst。 )

    A-41 の写真を見ると 小さめのコイルが 1 つしか見えない。それは 1.8V の core 用 のはず。 バックライト用がないことになるが、昇圧が必要ないのかも知れない。SDRAM も使う 3.3V は レギュレータなのだろうか?

    A-33 は、大きいのと小さいのが1つづつ。表示面積が大きいからバックライト用も 普通のタイプになったのだろう。やはり 3.3V はレギュレータだと思う。

    Neo Slim 3000 は裏に 2 個のコイルだが、core 用と バックライト用なのは ほぼ明らか。PMP3100 もコイルは 1 個。-- バックライトは昇圧が必要なかったような気がする。

    いずれも SOT23 サイズのレギュレータだとすると ... 200mA あたりが上限かも知れない。-- かなり不安になってきた。8bit x 2 など不安定でまともに動かないかも知れない。

    上記の電流値はすべて、4 bank 同時アクセスの最大電流。Jz47xx は、バンクを切り替えての使い方しかしないと思うので、少し減る。(EM63A165 だと 130mA/160mA) ... あまり安心材料にはならないが。
    ちなみに、上記は メモリ負荷最大のときの消費電流。平均消費電流は、メモリ負荷が下がれば減るし、クロック(Linux で負荷に応じて動的に変更できる)が下がっても減る。 

計画を見直す

    まず、8bit x 2 について

    -- 3.3V 電源 を強化しないといけないかも知れない。それができるスペースがあるのは、P5-5/PMP3100 と Neo Slim 3000 だが ... 放熱まで考慮するなら P5-5/PMP3100 が良さそう。

    64MB 化

    -- A-33/A-41 に対して 1 回試してみたい。

    32MB 化が成功したら、もうひとつの方でトライする。

    使ってみて不安定なら、外して Neo Slim 3000 に付けてみる。

    32MB 化 -- 上記の予定がないものに対して行う。A-33/A-41 でまずやってみる。(練習なし)

    EM63A165TS-6G を使う 32MB 化のマシンが 一番オーバクロック耐性が高いはず。持ち歩いて 動画を再生したい A-33/A-41 に向いている。

    64MB 化すると メモリは増える。開発マシンとして使うが、8bit x 2 の 128MB 化ができればそちらに移行する。だからつなぎかも知れない。


追記:入手した SDRAM を アルミホイルに貼り付けた。



左下の 2 つが 512Mb(64MB) 右下の 1 つは、静電気たっぷりな所に 一回落とした。

よく見ると、足が曲がっていたりするし、先端が欠けているように見えるところがある。(根元から取れているのはないようだ)。-- 写真では分からない。

矯正しないとまずそうだし、なくなってもかまわない (NC もしくは電源 PIN) かどうか確認しておかないと。

ちなみに、矯正できたかどうかは、変換基板 AE-SOP-56に当てて確認しようかと思う。




追記: 換装用 SDRAM の 入手について

512Mbit(16bit 幅) -- 高価か入手が難しい

  • デジキーで買うと ... MT48LC32M16A2P が 3317円。

  • バッファローの microDIMM MS133-128MY



    これが、K4S511632D を使っているらしい。ただ、最安値でも 6000円ぐらい。(価格上のメリットがない)

    (一般的に言って)最近は 容量が少ない BGA タイプ を多数載せるようになってきている。モデルチェンジしているかも知れないので 注意。

  • aliexpress

    一時期 aliexpress で 512Mbit の SDRAM を安く売っている shop があった。

    という値段付けで、2 個までなら $9 で入手できた。が、今は店を閉じているようだ。

  • taobao

    taobao を見ていると MT48LC32M16A2P を安く 扱っているところはある。だが、海外発送とか送金の点で利用が難しい。

512Mbit(8bit 幅) -- SO-DIMM から外す

    256MB PC133 の SO-DIMM は、8 chip しか載っていないから 8bit 幅で 512Mbit なのは確実 (ただし BGA 搭載タイプを除く)

  • これを日本で買うと 最安値が 3000円ぐらい。

  • ebay だと 送料無料で 20ドルぐらいである。

256Mbit(16bit 幅) -- 一般的で入手可能

    SDRAM のクロックは、普通 CPU_CLOCK の 1/3 。400MHz なら 133MHz 。CPU を 400MHz 以上に オーバクロックさせて動かすなら 143MHz 品か 166MHz 品が安心で、256Mbit は、143MHz/166MHz 品も入手できる。

  • デジキーで買う
    IS42S16160B-7TL が 143MHz で 951 円。-- 結構高い。

    US なら W9825G6JH-6 が 5ドル弱である。

    ただ、HYB39S256160FE が買えると 安いはず。(買えないが)

  • aliexpress
    チップを扱っているショップが 1つだけある。

posted by すz at 00:56| Comment(0) | TrackBack(0) | Jz47xx

2010年06月04日

E705Aというのをポチってみた

世の中 iped だの apad だの アンドロイド MID が人気だが、それとは全く関係ない 7inch Linux mini laptop E705A というのをポチってみた。

    追記: これは dealetreme でも扱いだした free-shipping 127ドル。



スペックは、

CPU JZ4750 XBurst CPU 32
Operation system LINUX
Memory 128MB DDRII
Storage Device 2GB NAND Flash ( 512MB/1GB optional )
LCDSize 7" PANEL
M+D36atrix 800*480
VGA NO NEED
LAN 10/100M Ethernet Access
WIFI 802.11b/g
Keyboard standard enlish 84 key,support external keyboard
Mouse&Touch pad build-in touch panel, set two shortcut key,and support usb port mouse
USB Port USB 1.1 *3.0
Card Port SD CARD
Build-in camera NO
Sound effect In focus Audio
Build-in stereo speaker
External Microphone,but only for record
Battery 1300MAH

値段は、$130.93 (送料無料)

CPU は MIPS(JZ4750) なので アンドロイド はどうやっても動かない。Lyumo Book のようなもの。

    ... というのは厳密に言うと間違い。
    http://bbs.imp3.net/thread-832943-1-1.html
    をみるとプロトタイプはあるようだ。

    ftp://ftp.ingenic.cn/3sw/01linux/tmp

    May 05 2009 00:00 37037418 android-demo-jz.tar.bz2
    Feb 20 2009 00:00 7387614 ingenic-linux.tar.bz2
    Mar 20 2009 00:00 514445940 mid-src.tgz
    Jul 14 2010 16:06 69811279 mipseltools-gcc412-lnx26.tar.bz2

    ... といってもコレ用じゃないし、放置されているところを見ると諦めたのかも知れない。

開発用に MIPS というか Jz47xx の マシンが欲しかったのが購入動機。www.aliexpress.com が比較的安全らしいのと、近くで Lyumo Book を売っているところがないのもコレにした理由。

    実を言うと アンドロイド MID の人気と Lyumo Bookの人気のなさを見て 今後入手が難しくなるのでは? と思ってしまったのが今買った理由。
    でアレコレみてたら、最初にリンクした 7" Support WIFI netbookの方が(送料込みで)安いことに気がついた。どうも 300MHZ の VT8500(ARM)クラスの価格帯まで値段が落ちているようだ。

    ちょっとだけ気になるのが、build-in touch panel というところ。Touch Pad のことだと思うが少しだけ期待してみよう。

ちなみに、スペックには、JZ4750 と書いてあるが 信用はしていない。メモリが DDRII と書いてあるのだが JZ4750 でも DDR2 は サポートしていない。外部インターフェイスが Lyumo Book と同じだし、JZ4730 だったりするかも知れない。

まぁそれでも良いかと思っている。Jz4750 だと Video engine というのがあり、TV OUT 用の機能も付いているのだが どちらも使えないと思うし。あとは Mobile SDRAM に対応している点が違うのだが、性能が良くなるわけでもなさそうだし、そもそも使っていないなら関係ないし。

    "XBURST" で ググってみると EPC E700 というのがあり CPU は Jz4730 。E702 というのもあって CPU は Jz4740 。
    あれ? E705A は 本当に Jz4750 かも。

    あと、E702 のところに TESO (Linux ubuntu) と書いてあった。... なんだろう?

ところでコレ、MIPS を使いたいという特別な理由がない人には、あまり勧められない。Lyumo Book も もっさりだと専らの評判だし、JZ4750 だとしても基本性能はさほど変わらない。所詮 PMP 向けの CPU で、Video engine まで使いこなしてようやく動画だけ速くなる。

とりあえずメモ:


追記: E705A 到着

EMS のはずが UPS(配送:ヤマト) できた。500 円を徴収された。たぶん税金。(消費税?)

箱を開けてみたところ、黒の本体と 中国プラグの AC アダプタ とマニュアル。(白→黒の順で希望を書いて発注)。 AC アダプタは 出力 DC 9V 2A 、プラグ形状は PSP のと同じ(EIAJ#2)。入力は 100V-240V でプラグ変換があれば使えそうだが持っていない。あと マニュアルには、E7005 Linux Series と書いてある。

    9V の AC アダプタなら 秋月の これが良いのだが、在庫切れ。さては... 同じような仕様の M001 とかのせいで需要が急に伸びたな。しょうがない。飛び出ている部分を糸鋸で切り離し コードを引き出すか。

    ひょっとしたら 1.3A の これでも良いのかも。大体充電なしで 5W 充電しての使用なら 10W ぐらいだそうだ。9V 1.3A なら 11.7 W だが、100V での測定だから 1/効率 (= +25%) 余裕がある。

    ちなみに WK-J2 という変換ケーブルが使える。

    あ、ここで EKEN M001 用の AC アダプタを売っている。480 円と安いが 送料かかるし微妙。

さて、本体を眺めてみる。本体裏にシールが貼ってあり Easy PC E700 series と書いてあった。開いてみるとパームレスト左側にシールがあり、EASY PC E700 Linux Series とあった。その下にスペックのアイコン。JZ4750 360MHz / 128MB DDR2 / 2GB FLASH / 7inch WVGA / 802.11B/G 。



さて、やることがないのでバッテリーが入っているらしい裏側の蓋を開けてみる。

当然のようにバッテリーが入っていた。バッテリーはコネクタが付いていて、交換可能になっている。ただコネクタは奥まったところにあって外すのが難しいかんじ。バッテリーの印字は LB0102 PL3530155P 7.4V 2100mAh JA27 。-- 1300mAh でなくてよかった。100V 電源側で 5W だそうだ。無線LAN なしなら 3-4 時間ぐらいもちそう。

バッテリーを本体から出してみるとスロットのようなものが 2 つ見えた。覗いてみたところ基板とパーツが見えるだけで何らかのコネクタは付いていなかった。

つぎにインターフェイスのチェック。右側に USB Aメス x2 、左側は、マイクとヘッドホンジャックと SD のスロット。裏側には ACアダプタのジャックと Ether 、USB A メス。

一応電源を入れてみると... Loading と表示され 続いて mini laptop 。



しばらくして X が立ち上がってきた。



アイコンは、

  • Image Gallery
  • Word processor
  • PDF Viewer
  • Speadsheet
  • Star dictionary
  • Music player
  • media player (plays a .mov video fine)
  • calculator
  • IM chat
  • e mail
  • wireless
  • paint brusher (a paint/drawing program)
  • ebook reader
  • recorder
  • internet browser (works slowly but well)
  • text writer
  • snes

だそうだ。(自分では未確認)。上記以外に スタートメニューから起動するものがいくつかある。パッケージのインストールなんてものもあるが、どういうパッケージか見当もつかない。

    上の写真は、My 99 dollar cherrypal netbook computerから拝借した。どうも cherrypal africa という製品名で販売されたものと同じらしい。2009/12 頃にアナウンスされた外観(G400 と同じ)とは違う。-- たぶん新型。

    cherrypal africa と違う点はロゴがないところ。.. 普通 AC アダプタのマーク(極性表示)やら Ether, USB のマークやらが 印字されているのだが、よくみたらプラスチックに印字が一切ない。これって OEM元のサンプル?

バッテリーは 50% しかないのでちょっとだけ使ってみた。

設定できる言語は、英語・フランス語・中国語だけ。

CPUやメモリ に関する情報はわからない。わずかに分かるのは Linux 2.6.24 ベースということだけ。

ファイルブラウザも C: とかいうのを root にした情報しか見せてくれない。どうも アプリケーションを入れるどころか root にすらなれない予感。

たいへん困ったことになりそうだが、それはさておき分解して CPU を確かめることにした。

分解方法は、「日々是おやっとさぁ」とほぼ同じ。メインボードは違うが、筐体は非常に良く似ている。



まずはメインボードの表が見えた。RAM が 2 つ載っていて P3V56S40ETP とマークされている。これは 256Mbit の SDRAM だ。DDR2 というのは予想どおりウソ。jz47xx までウソかもしれない。-- 確認できるまで安心はできないものの VIA VT85xx だったら DDR2 のはず。

    VIA VT8500版 cherrypal africa (Win CE)の基板写真を発見。同じ筐体に入るメインボードのように見えるが裏側に RAM がない。あと アンドロイド版は cherrypal asia だそうだ。

2個しか見えていないのはあまり心配していない。Lyumo Book も 表裏 2 個づつなので 同じなのだろう。4 個なら 128 MB だ。

あと 基板には、WSNB0708_V1.0 2009-12-04 のシルク。

さて CPU を確かめるには、基板の裏を見なければならず、ヒンジの付け根のネジを外して完全にばらさないといけない。

ところで、root になったりするにはどうしたら良いのだろう? ちなみに jz4750 にも USBBOOT 機能はあるが、USB device のコネクタはない。あと SD Card からの boot 機能がある。ただし、ブートを切り替えるスイッチ/ボタンを見付ける必要がある。ben-nanonote はキーボードで USBBOOT になるからキーボードの可能性はあるが、汎用キーボードでは無理なのかも知れない。タッチパッドのボタンの方が可能性がたかい。

http://www.littlelinuxlaptop.com/3mx-4-0/

これが入ると嬉しいが 無理か。CPU が違ってもデバイスは同じに思えるのだが、GPIO の割り当てが違いそう。カーネルをなんとかして入れ替えるとかすれば ... あるいはユーザランドを使えるかも知れない。

やはりブートの方法を見付けておかないと...

さて、ここらで意を決して基板を外してみた。




CPU は、予想だにしなかった jz4757 -- 存在していたのか。データシートは、jz475x_ds.pdf で見てみると jz4755 と同じ CPU Core で デバイスが強化されたものらしい。

そのほかのデバイスは、FLASH と SDRAM (予想どおり裏にも2個) 以外だと

  • CS8900A -- 10BASET イーサネット

    ISA バスインターフェイスの古のチップ

  • GL850A

    4 port USB HUB

  • HT82B40R

    USB Low speed デバイスつきマイクロコントローラ。予想はキーボートの制御。



... 無線LAN がない。どうも LCD 側にあるようだ。インターフェイスはたぶん USB 。

なんというか、I/O 系は予想外にしょぼい。イーサは 10M だし、それ以外も多くが 1 つの USB 1.1 HOST にぶらさがっている。

100M のイーサをサポートしている jz4730 のほうがマシ。CPU が新しすぎて使いこなせなかったということか。

TV OUT も 高速シリアルも USB 2.0 HI Speed デバイスも使っていない。ちょっと残念な仕上がり。開発マシンとしてみた時は ネットワークが遅いのが残念なところ。これなら Neo Slim 3000 を無理やり 128MB にしたほうが便利かも知れない。

... といっても CPU の方は Dual-Core のはずだし Video-engine もあるし SIMD2 に強化されているし興味深くはある。

メモ:

  • Keyboad のコントローラが別にある ... ということは 特定のキーで SD BOOT なんて技も簡単にできそう。なんとなくだが Linux のドライバを作るのを嫌がったんじゃないかと思える。イーサの方はリファレンスデザインにあったと思うのでドライバがあるのだろう。

  • FLASH にインストールする手段が必要なはずで SD BOOT を使うのだろうとは思うのだが CPU の左下のパッドが気になる。JTAG + シリアルの可能性もあるが、USB device が出ていて USB BOOT なんて可能性もありそう。-- SD BOOT を探すのも程々にしておこう。



    (追記) パッド は左から 4pin(J5), 2pin(J1), 4pin(J4) 。しげしげ見ていたが J4 は 2 本の並行線が CPU から直接来ている。そして 線の元あたりに USB Device がある。... たぶん J1 が USBBOOT を有効にするスイッチで J4 は USB Device なのだろう。
    J5 も 2 本の平行線が来ているが 左の方から。そして 10K でプルアップかプルダウンされている。-- こちらはシリアルなのか?
    ところで、J5/J1 の側まで来てスルーホール(下2つ)に消えている線はたぶん I2C 。で、左の 8in IC(2つあるうちの下) に行っている。この IC なんだろう? ちゃんと見ておけば良かった。... なんとなく RTC を外付けしているような気がする。8in IC(2つあるうちの上)に水晶付いているし。そうなれば、もうひとつは、温度監視とか電圧センサ?

    そういうことはともかく、治具+USBBOOTで初期化するっぽい。そうだとすると SD BOOT の機能は作りこんでないかも。

  • VIA VT8500版 cherrypal africa (Win CE)を見ているのだが、完全に同一筐体のようだ。コネクタの配置も同じ。ただし、右上の 4pin コネクタが E705A の方には余分に付いている。VT8500 の方は無線 LAN がオンボードなのだろう。2 本の線を平行にして配線しているし、インターフェイスはやはり USB に思える。

    その左のコネクタは何だろう? タッチパネルだと嬉しいがっそんなことはないのだろう。外してみて不具合が起きるかどうかで何か調べられるかも。

  • USB HUB は、4port で 外部に 3 つ出ている。残る 1 つは無線LAN だとすれば他には使っていないことになる。ならば キーボードは PS2 ? タッチパッドも PS2 なのか? -- Libra という開発ボードには PS2キーボードが付くようなのでドライバはあるのだろう。

  • jz475x_ds.pdf には、jz4755 と jz4757 が記載されているのだが、Dual-core だという説明はない。ひょっとしたら video-engine がもうひとつの xburst-core なのかも。

  • 2009/12 に $99 PC としてアナウンスされた cherrypal africa には、Linux Type(jz47xx) と Win CE Type(VT85xx) の 2 通りがあったらしい。メモリは両方 128MB で 256MB というのはガゼ。
    で、Linux Type をやめて アンドロイドのものを新たに cherrypal asia として出したらしい。たぶん中身は VT8500 。

    VT8500 のノート型は $80 ぐらいまで値段が下がっているし、せめて 256MB か CPU のグレードアップがないと $99 は高い印象がある。

    ... それはともかく、jz47xx は売れていないからやめるわけで、残念なことだ。(世の中 ARM 一辺倒になるのは面白くないだけなのだが) -- メディアプレーヤーや イメージ viewer,PDF viewer あたりが使い勝手良ければ それだけで 値段分の価値にはなりそうなのだが

  • キーボード右下の zzz キーはサスペンドだった。... ちゃんとかどうか分からないが、動いている。動作は瞬間。あまりにも速いので不安になる。どれぐらい消費電力を落とすのかの方が重要だがまだ試していない。
    (追記)試したところ数時間で電源が落ちた。多分 液晶を Off しているだけ。

  • バッテリーのランプは、充電中を示すのだが、段々暗くなって最後には消える。なかなか良い。

  • メディアプレーヤー は、H.264 の FLV は対応してなかった。FLV 自体は対応している。IPU 使っているみたいに見える。でもフルスクリーンにしても、ファイルによっては周りに黒帯になったり...


それにしても... どうしようコレ。お手軽に開発マシンにしたかったのだが... いまのところプリインストールのアプリしか動かせていない。

ただ、これにもアプリケーションをインストールする仕組みはある。Application Manager というものだが、起動するとタイトルバーに IpkgViewer とでる 。ひょっとして OpenWRT とかの ipkg なのだろうか? ならインストールスクリプトで /proc の内容を ファイルに出力するとか出来るかも。

いじっていて野良パッケージはインストールできないようにしている可能性はある。そうなればお手上げ。まぁ無理なら諦めて ... Neo Slim 3000 に絞ろう。
    パッケージについて
  • http://7mc.org 経由で、CnMBook のサイトにパッケージが色々あることを知った。.info と それに指定してあるいくつかのファイルを使うタイプ。... だが 全然ダメ。
    Lyumo book などだったら OK なのかも。
  • OpenWRT のサイト http://downloads.openwrt.org から .ipk を拾ってきて SD カードに入れてみたら、ファイルブラウザで アイコンが出た。ダブルクリックすると Windows のような Setup 画面になった。 ... 適当に選んだものなので cansel したが、なんとかなりそうな予感。

    まずは、パーミッションとか ディレクトリ構成と ファイル一覧を作成するものを作ってインストールしてみたい。

まぁ、パッケージ使ってカスタマイズできなかったとしても、USBBOOT はなんとかなりそうだし。ちなみにパッド部分は、バッテリーのところにある隙間から見えている。治具が作れれば無改造でなんとか出来そう。



ところで、これは何だろう? E705A でググると ATS-E705A というのも見つかるのだが、そこにあった製品。やっぱり Xburst で 128MB なのだが 新しいのは 7inch で額縁が狭いということ。-- どうも液晶の方に合わせたキーボードを採用しているようだ。

7inch Mini Laptop としか記されてなく型番も付いていない。まぁ E705A を小さくしただけなら興ざめなのだが ちょっと気にかけておこう。



こんなのもある。これは aliexpress から買える。中身はともかく デザインは新しい。xburst も 色々新製品が出るのか。

ところで、なぜ jz47xx が気に入ったのか?

最初は、PMP で Linux が動く! という驚きから調べだしたわけだが...

  • 1. USBBOOT があり、FLASH を壊してしまっても復旧できる。

    これは改造とかして遊ぶ場合に重要なポイント。文鎮化したらゲームオーバだと ちょっと遊ぶのはちょっと無理。

  • 2. MMU があり普通に Linux が動く。

    個人的に 仮想記憶がない CPU は好きでない。

  • 3. 電子工作の対象になり得る。

    Jz4725B や Jz4755 は BGA でない。0.4mm ピッチで実際に作るのは厳しいとは思うが 工作可能な範囲。RAM も旧来の SDRAM で 0.8mm ピッチでいじれる範囲。

    400M Hz というのは、実用レベルからみると遅いわけだが、電子工作観点だと 最速レベルなのだ。

    ちなみに、CPU 単体も入手可能。jz4755 が 30元 jz4725B が 20元 だそうだ。

    チャイナモールでは、「MP3の部品のMP4の部品の君の正のJZは4725の主はJZ 4725 Bを訴えて」が 1010 円だそうだ。

  • 4. マルチメディア用 SIMD 命令。

    DSP ではなく CPU の機能拡張なのが良い。ちょっといじってチューニングできたりする。

  • 5. A320 以外のソフトがダメダメ

    これは、改造してみたいと思う動機になる。

  • 6. ハードが安い

    PMP-3100 とか Neo Slim 3000 とか 4000円ぐらいだし 安いのは敷居が低くて良い。

    あと、中華PMPを改造しても、咎められたりしないというのも利点。もとが オープンソースだし。

  • 7. 情報が(一応)手に入る。

    まぁ完全にオープンではないようだが、ググれば拾ってこれる。


こんなところか。何年かすれば事情が変わってくるのだろうが、しばらくは楽しめそう。
posted by すz at 04:21| Comment(2) | TrackBack(0) | Jz47xx

2010年04月19日

USB-BOOT

そろそろ USB-BOOT をやってみたい。

まずは、USB-BOOT の stage1/stage2 を動かすこと自体が目標になる。

Jz4725 を使っている SAKC も ブートはできているようだから

を理解して 実行してみることが最初のステップか。

とりあえず、ここに書いてある通りにして git で取ってきてまとめたもの

をベースにすることにする。

まず USB-BOOT させてみる。→ キーを押しながら USB に差し込むと Linux から次のように見える。

    T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 7 Spd=480 MxCh= 0
    D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
    P: Vendor=601a ProdID=4750 Rev= 1.00
    S: Manufacturer=Ingenic
    S: Product=JZ4750 USB Boot Device
    C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 2mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=50 Driver=(none)
    E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

Jz4725B にも関わらず ProdID=4750 。String も "JZ4750 USB Boot Device" 。

あと Bulk エンドポイントが In/Out の 2 つあることがわかる。

さて 次のようにビルドした usbboot を動かしてみる。

    export PATH=$PATH:/usr/mipsel-linux-uclibc/bin
    export PATH=$PATH:/usr/mipsel-linux-uclibc/usr/bin
    export CROSS_COMPILE=mipsel-linux-
    export ARCH=mips
    ./autogen.sh
    ./configure --prefix=/usr --sysconfdir=/etc
    make
    make install
    cd xburst_stage1
    make
    cp xburst_stage1.bin /usr/share/xburst-tools
    cd ..
    cd xburst_stage2
    make
    cp xburst_stage2.bin /usr/share/xburst-tools
    cd ..


で動かすといきなりエラー。src/ingenic_usb.h の PRODUCT_ID が 0x4740 になっているためだった。0x4750 にしないと少なくとも動かない。

ここでかなり不安になったのだが、とりあえずは 修正して 動かしてみると...

    # ./usbboot
    usbboot - Ingenic XBurst USB Boot Utility
    (c) 2009 Ingenic Semiconductor Inc., Qi Hardware Inc., Xiangfu Liu, Marek Lindner
    This program is Free Software and comes with ABSOLUTELY NO WARRANTY.

    Now checking whether all configure args valid: YES
    Current device information:
    CPU type is Ingenic XBurst Jz4740
    Crystal work at 12MHz, the CCLK up to 252MHz and PMH_CLK up to 84MHz
    SDRAM Total size is 32 MB, work in 4 bank and 16 bit mode
    Nand page per block 128, Nand page size 4096, ECC offset in OOB 12, bad block offset in OOB 0, bad block page 127, use 1 plane mode
    usbboot :>

お! とか思ったが、/etc/xburst-tools/usbboot.cfg をチェックするのを忘れていた。

だいたい Ben-NanoNote と同じはずで、ちょっとみた範囲では修正する必要はないように見える。

で、Now checking ... のメッセージは usbboot.cfg をチェックしているだけ なのがわかりちょっとがっかり。

ちょっと コードをチェックして bulk に read したときメッセージを出すようにしてみた。

    usbboot :> boot
    CPU data: JZ4750V1
    CPU not yet booted, now booting...
    Loading stage1 from '/usr/share/xburst-tools/xburst_stage1.bin'
    Download stage 1 program and execute at 0x80002000
    CPU data: JZ4750V1
    Loading stage2 from '/usr/share/xburst-tools/xburst_stage2.bin'
    Download stage 2 program and execute at 0x81c00000
    CPU data: JZ4750V1
    CPU data: Boot4750
    Booted successfully!
    CPU data: Boot4750
    #bulk_read: 8
    #00 00 00 00 00 00 00 00
    Configuring XBurst CPU succeeded.
    usbboot :>


CPU data: Boot4750 というメッセージは stage2 が出している。
要するに stage2 が動いて メッセージを変えたということらしい。あと bulk_read が その後初めて動作する。それまでは control エンドポイントでの通信。

それは良いとして、4750 用のコードが動いてしまっているようだ。これはまずいかも。Ben-Nanonote など 4740 のコードが動くはずで、動作を確認できていないコードが動作しているっぽい。

さて、4750 かどうかは、fw_args で判断している。要するに usbboot のプログラムが送り込んだ情報をもとに している。

さらに調べると、その情報は 結局 JZ4750V1 の情報を 引き継いでいる。

で、JZ4750V1 のまま動けば良いのだが ... stage2 の処理は なんかいろいろ違うのだった。

    それは置いておいて... USB device はどうやって使うのか調べようとしたのだが ... Programming Manual に 記載がないことが判った。まぁ Linux のドライバ見れば判ることだからあまり気にしないが ...

    ところで、stage2 に切り替わっても別段 USB をリセットしたりはしないのかも知れない。stage2 で USB を乗っ取るということか。ポーリングベースなら、切り替えの手続きもなしでいけそうだし。

    そうすると→ブートローダ→カーネルと処理を切り替えても最初の USB コンフィグのまま使えるのかも知れない。

    Linux の USB デバイスドライバを組み込まなければ そのまま使えるんじゃないだろうか? だったらコンソールとして使えるかも知れない。

で 無理やり 0x4740 に変更してみたら .. stage2 が動かない。-- ううむ 困った。

(続き)

実をいうと、NAND FLASH にアクセスできない問題が出ている。

nquery -- query NAND flash info

というのが動かないと先はないのだが、

    usbboot :> nquery 0 0
    CPU data: Boot4750
    ID of No.0 device No.0 flash:
    Vendor ID :0x0
    Product ID :0x0
    Chip ID :0x0
    Page ID :0x0
    Plane ID :0x0
    Operation status: Success!
    usbboot :>

となってしまうのだ。

stage2 が動いている以上、なんとかできるはずなので、調査から。

まず、ブートシーケンスの理解から

    1. NAND Boot の場合

  • 0x1FC00000 - 0x1FC01000(内部ROM)
    から起動して、NAND FLASH から Boot する場合、FLASH の最初のエリア(size 0x2000) を SDRAM 0x8000000 にロードする。もし ECC が正しくなければ、次のエリア(offset 0x2000) を SDRAM にロード 。これの ECC も正しくなければ STOP 。ロードが OK なら 0x80000004 に JUMP 。

  • 0x8000000 - 0x80002000 (First Stage Loader)
    U-BOOT を 0x80100000 に ロードして 先頭(0x80100000) に JUMP。

    2. USB Boot の場合

  • stage1 program and execute at 0x80002000
  • stage2 program and execute at 0x81c00000


ところで SDRAM の領域のベースアドレスは、ソフトで決めることができる。初期状態は、0x20000000 にマップされている?とかするので、要注意。

さて、どうするのか正しいのか? 困ってしまったのだが ... ググってみると

ingenic usbboot は対応済みなことがわかった。

たとえば stage1/fw/board_4750.c

ソース的には board_4750.c を変更して対応している。その中で 4725b かどうかを 特定の場所を参照して判断している。

( ( * (volatile unsigned int *) 0xB00F0000 ) & 0x80000000 )

どうも qi-hardware のものは 基本的に Ingenic オリジナルから再構成しているようだ。だいぶ別物になっているような印象。

ただ、jz4725b 対応は上記だけのようなので、ちょっとマージしてやってみる。

    usbboot :> nquery 0 0
    CPU data: Boot4750
    ID of No.0 device No.0 flash:
    # bulk_read: 8
    # 20 d5 94 25 44 00 00 00
    Vendor ID :0x20
    Product ID :0xd5
    Chip ID :0x94
    Page ID :0x25
    Plane ID :0x44
    # bulk_read: 8
    # 00 00 00 00 00 00 00 00
    Operation status: Success!
    usbboot :>

なんということだ。あっさり動いてしまった。で、Page ID を見ると 消去ブロックサイズ 256KB / ページサイズ 2KB だとわかる。

あと usbboot.cfg が 違うので 修正。

これで NAND FLASH が覗けるようになったかも。上記の bulk_read の 表示を削って使ってみることにした。


    usbboot :> nreadraw 0 2048 0 0
    ==== CPU data: Boot4750
    Reading from No.0 device No.0 flash....

    0x00000000 : ff 55 55 55 55 55 55 55 ff ff ff ff 01 00 11 04
    0x00000010 : 00 00 00 00 21 e0 e0 03 00 00 e9 8f 21 e0 20 01
    0x00000020 : 00 80 1d 3c 00 40 bd 37 00 80 19 3c b8 06 39 27
    0x00000030 : 08 00 20 03 00 00 00 00 00 00 00 00 00 00 00 00
    0x00000040 : 1b 43 02 3c 83 de 42 34 19 00 82 00 0f 00 02 3c
    0x00000050 : 10 20 00 00 40 42 42 34 82 24 04 00 1b 00 44 00
    :
    :
    0x000007e0 : 21 20 04 02 ff ff 84 24 5c 02 00 0c b0 15 45 24
    0x000007f0 : 00 80 02 3c b0 15 43 90 54 00 73 14 00 80 03 3c
    Operation end position : 0
    usbboot :>

コマンドには、nread/nreadraw/nreadoob がある。読み出す位置の指定はページ。

nread と nreadraw の違いがよくわかっていないのだが .. とりあえずあちこちダンプしてみた。


    nquery 0 0
    nreadraw 0 2048 0 0 ff 55 55 55 55 55 55 55 ff ff ff ff 01 00 11 04
    nreadraw 1 2048 0 0 7c 15 62 8c 18 00 40 10 21 80 00 00 00 80 14 3c
    nreadraw 2 2048 0 0 21 10 80 00 c3 28 02 00 2b 10 aa 00 0a 00 40 10
    nreadraw 3 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 4 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 5 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 6 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 7 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 127 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 128 2048 0 0 80 80 1f 3c 00 00 ff 27 00 90 80 40 00 98 80 40
    nreadraw 129 2048 0 0 10 00 b0 8f 08 00 e0 03 28 00 bd 27 57 03 20 0c
    nreadraw 130 2048 0 0 01 00 42 34 25 20 82 00 00 00 e4 ac 00 01 03 3c
    nreadraw 131 2048 0 0 00 00 43 90 06 00 6a 91 26 18 69 00 ff 00 63 30
    nreadraw 132 2048 0 0 44 03 0c 36 48 03 42 34 54 03 10 36 00 00 a5 ae

    nreadraw 150 2048 0 0 03 16 02 00 a2 a0 62 a0 0b 00 03 24 03 00 43 10

    nreadraw 160 2048 0 0 2b 20 a6 00 02 00 00 15 1b 00 68 00 0d 00 07 00
    nreadraw 161 2048 0 0 08 25 82 80 d3 ad 00 00 c1 95 00 01 01 00 00 00
    nreadraw 162 2048 0 0 1c 00 00 00 18 00 00 00 04 00 00 00 05 00 00 00
    nreadraw 163 2048 0 0 00 00 00 00 00 00 00 00 80 80 00 00 00 00 00 00

    nreadraw 164 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 165 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 175 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 200 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 255 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

    nreadraw 256 2048 0 0 00 02 00 00 00 04 00 00 00 20 00 00 66 03 00 00

    nreadraw 511 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 512 2048 0 0 00 02 00 ff 00 02 00 ff 00 02 00 ff 00 02 00 ff
    nreadraw 513 2048 0 0 00 02 00 ff 00 02 00 ff 00 02 00 ff 00 02 00 ff
    nreadraw 514 2048 0 0 00 02 00 ff 00 02 00 ff 00 02 00 ff 00 02 00 ff
    nreadraw 515 2048 0 0 00 02 00 ff 00 02 00 ff 00 02 00 ff 00 02 00 ff

    nreadraw 1024 2048 0 0 00 02 00 ff 00 02 00 ff 00 02 00 ff 00 02 00 ff
    nreadraw 2048 2048 0 0 00 02 00 ff 00 02 00 ff 00 02 00 ff 00 02 00 ff
    nreadraw 4096 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 8192 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 16384 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

    nreadraw 32768 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 32769 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    nreadraw 32770 2048 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

頭から 6KB 弱?の stage1 ブートローダがある。ブートの仕組みからいうと 8KB x 2 にしそうなものだが、1つしかない。

128 ページから 163 ページまで(72KB) 何かが入っている。stage2 ブートローダ?

あとは、256 ページから(offset 512KB) にも。カーネル? 

さらに 512 ページ (offset 1024KB) からもなにか。.. あとはよくわからない。

それはともかく、0xff が続くデータは ファームウェアのファイルには入っていなかった。RAW イメージではなかったのだろう。

さて、なにをするにも NAND FLASH のバックアップを取っておきたい。だが、いまあるコマンドは ページ単位で データをダンプするのみ。バックアップ専用のコマンドなどないようだ。

作るのは簡単そうなのだが、意図的にそうしているような気もするし ... どうしよう。

とりあえずは、

  • 情報量を減らすため、nreadraw (など) で同じデータがあれば、続く状態は表示しないように変更。
  • アドレスの値が ページ内オフセットだったのを 絶対アドレスに変更 (ただし 4GB まで)
  • 繰り返しを指定できるように変更。

という改造をしてみた。

で、やってみたのだが、なんだがすごく遅い。1 秒に 2 ページぐらいの速度。これで 頭の 128MB を バックアップしようとすれば 10 時間ぐらいかかる計算。

ところで、nread と nreadraw の違いがわからない。他に readoob というのがあって、冗長データが読めるのは分かるのだが ...
説明には、

  • nread read NAND flash data with checking bad block and ECC
  • nreadraw read NAND flash data without checking bad block and ECC

nreadraw は、ECC をみない生のデータで、nread は、ECC を見て? bad block と代替したデータ? それともエラーになる?

どうもよくわからないが、同じ内容のようなので OK か。

ところで、OOB は Out of band というそうだ。2K ページ毎に 64 バイトある。ECC を このエリアに置くことになっているらしい。-- 内部ROM もチェックしているようだからどう置くかも決まっているのだろう。

... というわけで nreadoob でダンプしてみた。

  • パターン1) 頭の方

    0x00000000 : ff ff ff fa 75 f3 2c d5 cb 81 ac f6 84 c2 78 46
    0x00000010 : 13 c5 c4 08 38 3e d9 69 e7 59 d6 4c be e0 2f f1
    0x00000020 : 2c 58 fc ec 32 c7 b2 5c f8 25 50 ec ea 86 0b a5
    0x00000030 : 9d 40 44 27 31 b2 d4 ff ff ff ff ff ff ff ff ff

  • パターン2) 未使用

    0x00001800 : ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    *

  • パターン3) 後ろの方

    0x00110000 : 00 5f 02 ff 00 5e 01 ff 00 5d 00 ff 00 5c 00 ff
    0x00110010 : 00 5c 00 ff 00 5c 00 ff 00 5b 00 ff 00 5a 01 ff
    0x00110020 : 00 59 03 ff 00 58 04 ff 01 56 02 ff 02 55 00 ff
    0x00110030 : 02 55 00 ff 01 54 00 ff 01 54 00 ff 00 53 00 ff

  • パターン4) 後ろの方-- 未使用?

    0x0014c800 : 00 02 00 ff 00 02 00 ff 00 02 00 ff 00 02 00 ff


未使用のページは、0xff のままになっている。これで書き込んだことがあるかどうか判断できそうだ。

dual-boot を考えて そういうページに、自作のデータを置くようにすれば良いのだろう。

あと、あるところから 4 バイト単位で最後が 0xff になる特徴あるパターンになっている。そういう特徴があるものの中でも "0x00 0x02 0x00 0xff" で埋められているものもある。これは何だろう?

ちなみに、nreadraw で取ったデータにも 同じようなデータが見受けられる。

    使っているページを調べるために、nreadraw で取ったデータを見ていたのだが、文字列が入っていたりした。

    どうも OOB のデータではないようだ。使い方を間違っているのか?
    ... ただ、違ったとしても ページを使っているかどうかの判断には使える。


追記:JZ4750L VOLANS board

JZ4750 というのがどうにも気になっていたのだが ...

Ingenic の VOLANS 評価ボードというのは JZ4725B らしい。

当然のように対応済みなのだが、u-boot や linux では JZ4750L として扱っている。

キーワードだけ並べるとこんなかんじ。

  • VOLANS development board(ver:1.1, Jz4725B based)
  • linux : arch/mips/f4750l_defconfig
  • linux : arch/mips/include/asm/mach-jz4750l/board-f4750l.h
  • U-Boot(1.1.6) : board/volans

dingoo-linux と qi の両方とも JZ4750L の扱いは適当そうなので、Ingenic のカーネルとU-BOOT をちゃんと取ってこないとダメっぽい。

linux の方は取ってこれているので、board-f4750l.h を見てみると...

    GPIO_SD1_VCC_EN GPE4
    GPIO_SD1_CD_N GPC14
    GPIO_USB_DETE GPD6
    GPIO_DC_DETE_N GPD7
    GPIO_CHARG_STAT_N GPD15 (使っていない.. かも)
    GPIO_DISP_OFF_N GPD25 (LCD_REV ?)
    GPIO_LCD_PWM GPE14 (PWM4)

SD0 を除くと 上記の GPIO を定義している。別のボードの定義なわけだが、リファレンスだし、変更する理由がなければ変更しないかも知れないので参考にはなる。また、ピンアサインは変えても機能そのものを削ると ソースも直さないといけないので 素直に 対応しているかも知れない。ちなみに、想定していなかったピンは、

  • USB_DETE:

    USB に電源が供給されているかどうかを判断する(USB_UDC_HOTPLUG)のに必要。

  • GPIO_DISP_OFF_N:

    ディスプレーを OFF するのは LCD_DE ではなかったのか? あるいは(MOS FET の)電源スイッチ用?

  • GPIO_CHARG_STAT_N

    充電IC の LED 用のピン(/CHRG) に接続する。L で充電中。赤LED は充電を示すのではなく 外部電源の意味なので関係ない。

    どこにも接続されていないように見えたが GPIO につながっているのかも。

ぐらいか。

いろいろやらないといけないとしても、どのようにやるのが正しいのかということが分かったのは収穫。

ところで、f4750l_defconfig の中に CONFIG_JZ_FPGA=y なんて記述があり、FPGA を載せたボードなのか! .. なんて思ったのだが、ググると

    support f4750l(on fpga) board for jz4750l

なんて記述を見つけた。FPGA を載せたのではなく、LSI の開発前に FPGA に 載せたということらしい。

追記:本当に正しく読めているのだろうか?


0x00000000 : ff 55 55 55 55 55 55 55 ff ff ff ff


これは先頭のイメージで、0x80000000 にロードされて、0x80000004 から実行されるはず ... なのだが どう見ても命令のパターンには見えない。

とりあえず (いろいろやって) objdump で 逆アセンブルしてみた。


0: 555555ff 0x555555ff
4: 55555555 0x55555555
8: ffffffff 0xffffffff
c: 04110001 bal 14
10: 00000000 nop
14: 03e0e021 move gp,ra
18: 8fe90000 lw t1,0(ra)
1c: 0120e021 move gp,t1
20: 3c1d8000 lui sp,0x8000
24: 37bd4000 ori sp,sp,0x4000
28: 3c198000 lui t9,0x8000
2c: 273906b8 addiu t9,t9,1720
30: 03200008 jr t9
34: 00000000 nop
...


0xc 番地ぐらいからは 命令っぽいが、やはり 0x4 とか 0x8 番地は命令ではない。

あと、これはブートコードの先頭かというとそれらしい。スタックを 0x80004000 に設定しているみたいだし。

ひょっとしたら、0x80000004 番地に jump するのは古いチップだけで、JZ4750 以降は 0x80000010 番地とかに変わっているのかも知れない。

stage2 の調査



usbboot の stage2 のコードを見てみることにする。

main.c は 初期化を行ったあと usb_main() を call している。

usb_main() は、udc.c (USB Device Controller) にあり、ここですべてのコマンド処理をしている。

コマンド処理を見るまえに、ディスクリプタを見てみる。

  • ここでは、Vendor ID = x0601a , Product ID = 0x4740 固定で Product ID = 0x4750 は使っていない。
  • エンドポイントは、bulk エンドポイントが 2 つ。最大パケットサイズは 512B 。
  • String は、"A00A00A00A00" を返す ... とっても適当。


自分では usb を reset していない。HOST が USB を reset しない限り この ディスクリプタに切り替わらない。そして 0x4750 専用にした usbboot の方が動かなくなるはず。(ココ重要)

要するに一応は定義してあるもののダミー。

次に USB の処理を見てみる。

usb_main() では、udc4740Proc() を繰り返し call しているだけ。udc4740Proc では、USB_REG_INTRUSB, USB_REG_INTRIN, USB_REG_INTROUT というレジスタの内容を見て、処理を行う。

処理を行う関数は 次の 3 つ。

  • EP0_Handler()

    コントロール エンドポイントの処理。ベンダーリクエストの パケットに対してそれぞれの処理をする関数を呼び出すようになっている。

  • EPIN_Handler()

    Host から見て IN だから 送信のハンドラ。
    強制的に バッファのデータを送出するのは Handshake_PKT() ?

  • EPOUT_Handler()

    受信のハンドラ。

    送受信は、Bulk_buf というバッファに対して行われる。

    半二重でしか使っていないということ。Bulk_buf の操作は boothandler.c でしか行われていない。

    何に使っているかというと ...

      NAND_OPS_Handle()
      NAND_QUERY:
      NAND_READ_OOB:
      NAND_READ_RAW:
      NAND_READ:
      NAND_PROGRAM:
      SDRAM_OPS_Handle()
      SDRAM_LOAD:

    大量のデータ送受信は、バルク転送を使うらしい。


さて、仕組みをしってなにをしたいのか? ... というと、シリアルコンソールの代わりをするものを作りたいわけだ。

USBの処理は go した時点で用済みなわけだが、新たに動作するプログラムでも stage2 のようにして USB デバイスのコードを入れてやれば バルクエンドポイントをシリアルのように使って通信できるはず。ただし、usbboot の方も改造して go したあと 端末モードのように動作させる必要がある。
posted by すz at 20:42| Comment(0) | TrackBack(0) | Jz47xx

2010年04月15日

UBIFS とは?

前の記事で、どうも UBIFS を使っているらしいと書いた。

もう一度 README-JZ の図を貼るが


+-----------+ +-------------+ +-------------+
| YAFFS2 | | UBIFS | | FAT or EXT2 | Filesystems
+-----------+ +-------------+ +-------------+
\ | / \
\ | / \
\ | / \
\ | +-----------------+ +-----------------+
\ | | UBI Block Layer | | MTD Block Layer |
\ | +-----------------+ +-----------------+
\ | / /
\ | / /
\ +-------------+ /
\ | UBI | /
\ +-------------+ /
\ | /
+-------------------------------------------+
| MTD |
+-------------------------------------------+
|
+--------------------+
| nand_base.c |
+--------------------+
|
+--------------------+
| jz4740_nand.c |
+--------------------+

jz47xx のような組み込みチップで使っている NAND FLASH は、生の FLASH なので、ウェアレベリング機能などはない。そして、使う側から見て 普通の USB DISK に見える機能が見えていて FAT で ファイルシステムが作れるようになっている。

その間に ウェアレベリングをする機能がないと、特定の ブロックばかり書き換えられて FLASH がすぐダメになってしまう。

ウェアレベリングをする機能を提供しているのが、どうも UBI Block Layer というもので、基盤の機能を提供するのが UBI 。

UBIFS は、内部で使われるファイルシステムで、UBIFS - UBI の二階層の構造。これとは別に YAFFS2 という FLASH 向けファイルシステムはいっている。( ちなみに Linux で 有名な JFFS2 という FLASH 向けファイルシステムは、数 GB といった 大容量フラッシュを想定して設計されていないらしく、推奨していないようだ。)

どういう基準でどちらを使うのかよくわからないが、UBI Block Layer 必須のシステムなら UBIFS を使った方が整合性が良さそうな気がする。

ところで、Linux-2.6.32 だと UBIFS は標準でサポートされている。下位レイヤの UBI も drivers/mtd/ubi にあるようだ。

さて、UBI とは、UBIFS というのは具体的にどんなものなのだろう? そして u-boot は UBIFS からのブートを サポートしているのだろうか?

カーネルの Documentation/filesystems/ubifs.txt があり、その翻訳が JFプロジェクトでされている。

ubifs.txt によると さらに詳しい情報は、UBIFS - UBI File-SystemUBIFS FAQ and HOWTO のページになる。

とりあえず知りたいのは、オリジナルファームウェアの構造。UBIFS だと目星をつけたとして、どうやって中を見るのだろう?

FAQ をみると、「How to extract files from an UBI/UBIFS image?」 というそのものズバリなエントリーがあって、


    # Create an 256MiB emulated NAND flash with 2KiB NAND page size
    # (you should see the new MTD device in /proc/mtd)
    modprobe nandsim first_id_byte=0x20 second_id_byte=0xaa \
    third_id_byte=0x00 fourth_id_byte=0x15

    # MTD is not LDM-enabled and udev does not create device
    # MTD device nodes automatically, so create /dev/mtd0
    # (we assume that you do not have other MTD devices)
    mknod /dev/mtd0 c 90 0

    # Copy the contents of your image to the emulated MTD device
    dd if=ubi.img of=/dev/mtd0 bs=2048

    # Load UBI module and attach mtd0
    modprobe ubi mtd=0

    # Mount UBIFS
    mount -t ubifs /dev/ubi0_0 /mnt/ubifs



と書いてある。要するに nandsim というカーネルモジュールが必要で それを使って実際に ubifs で mount するということらしい。

さて、Vine-5.1 にこれらは入っているのだろうか? どうも UBIFS は、linux-2.6.27 で入って Vine-5.1 も linux-2.6.27 。
ビルトしてくれていれば入っていることになる。

で、みてみると ...

    drivers/mtd/nand/nandsym.ko
    drivers/mtd/ubi/ubi.ko
    fs/ubifs/ubifs.ko

嬉しいことにちゃんと入っている。

ちょっとこれで、ファームウェアの中が覗けるのかどうか、調べてみよう。

... それ以前の問題として id_byte って何?という疑問が。

2GB 8bit の K9XXG08UXM のデータシートが入手できたので見てみたところ ...

  • 1st 0xec
  • 2nd 0xd5
  • 3rd 0x14
  • 4th 0xb6
  • 5th 0x74

  • と 5 つもあった。1st がベンダーID , 2nd がプロダクトID 。
    3rd は、チップのタイプ

      bit 7 : cache program - 0: Not support 1: support
      bit 6 : interleave program - 0: Not support 1: support
      bit 5-4 : 同時にプログラム可能なページ数 - 0:1 1:2 2:4 3:8
      bit 3-2 : セルタイプ - 0:SLC 1:MLC(2bit) 2:MLC(3bit)
      bit 1-0 : 内部チップ数 - 0:1 1:2 2:4 3:8


    0x14 なら 普通の MLC 。

    4th は、ページのサイズとか 消去ブロックサイズ。

      bit 7 : アクセスタイム? 0:低速 1:高速(25ns)
      bit 6 : ビット幅? 0:x8 1:x16
      bit 5-4 : 消去ブロックサイズ 0:64KB 1:128KB 2:256KB 3:512KB
      bit 3 : 0
      bit 2 : 冗長データサイズ(512B あたり) - 0:8バイト 1:16バイト
      bit 1-0 : ページサイズ 0:1KB 1:2KB 2:4KB 3:8KB


    0xb6 だと 消去ブロックサイズ 512KB ページサイズ 4KB 。冗長データサイズは、4Kのページあたり 16x8 = 128B 。

    5th は、容量に関する情報

      bit 6-4 : プレーンサイズ 0: 64Mb .. 4:1Gb 5:2Gb 6:4Gb 7:8Gb
      bit 3-2 : プレーン数 0:1 1:2 2:4 3:8


    0x74 なら 8Gbit x 2 で 16Gbit/2GB 。

    それは良いのだがこのパラメータをそのまま入れたら nandsim が 落ちてしまった。--- ううむ。

    さらに ファームウェアは RAW データではないかも知れない。
    先頭は確かに RAW データっぽいのだが、UBIFS の magic が見つけられなかった。UBI の magic も見つけられないし。

    それに ... UBI はパーティション別に構築するものっぽい。

    .. というわけで良くわからなく...
posted by すz at 21:36| Comment(0) | TrackBack(0) | Jz47xx

2010年04月10日

Neo Slim 3000でなにをしようか

いろいろ調べてぼんやりながら何ができそうかについては、わかってきた。

で、実際なにをしていこう。

まずハードウェアの改造などしなくてできること。たぶん...カスタマイズ可能な PMP にするということになりそうだ。

既に DINGUX というものがあるわけだから、そのリソースを極力利用する方向で考えるわけだが、動かすのが目的なら A-320 を買ってDINGUXをインストールすればよい。これを目標にすると動機としては弱くなってしまう。

Linux をちゃんと動かすのを1つの目標にして。DINGUX が動くかどうかは、それができたかどうかの判断基準。... ぐらいに考えておこう。

さて、その先はどうしよう。趣味なんだから Linux を動かすこと自体を目標にしてもかまわないわけだ。Linux が動いたら満足してしまう気もするが、先のことも一応考えてみよう。

本体だけで高機能なものを作ろうとするのは多分無理がある。上には PDA や PC があるわけで、PDA や PC で出来ることならそれでやれば良い。方向性としては専用機化が良いのではないか。

例えば、サブディスプレーだって良いと思う。PDA でそれが出来たとしてもそういう使い方はしない。専用機にしたら PDA が別に必要になる。

電子工作の対象としても考えている。なにかデバイスを接続して制御したい。そういうことをすれば、ますます専用機化していきそうだ。

あとやりたいことは、Linux ではなくもっと 生(RAW)に近い状態で使う。AVR でやっているようなことを これでやっても良いような気がする。

usbboot を見て思ったのだが、ブートローダの stage2 は、USB を制御している。おなじようにして好きなソフトを動かしても良さそうだ。

好きな リアルタイム OS を動かしても良いし、本当に 生で使ってもかまわない。

入れ替えるのもそれほど手間でもない。ボタンを押してUSB に差し込み usbboot を動かすだけだ。

ただバッテリーには要注意。自分でバッテリー制御をやっているとすれば、バッテリーをつなげたまま 好きなソフトを動かすのは危険。バッテリー周りの仕組みがわからないなら外してしまった方が良さそう。

マイルストーン



    0) 開発環境の構築

    開発用の Linux のインストールと toolchain のインストール

    1) usbboot を理解して動作させる。

    FLASH にしてもなにもしないで書き込めるわけではないようだ。少なくとも 制御するための情報を Config ファイルに正しく書かないと。SDRAM も同様だし、結局チップの初期化を一通り理解する必要がありそうだ。

    あと gpio を 出力にして H/L の設定をするコマンドがある。状態の読み込みは、直接レジスタを見れば良いのだろう。

    このツールだけで 制御ピンを探すようなことは出来そうだし、改造すれば、たとえば PWM を動かしてみるということは出来そうだ。

    こういうことをやっているうちにチップの制御方法を理解していくはず。

    2) linux をビルドして 基本的な動作を確認

    デバイスドライバを極力減らしてビルドして、linux そのものが動いているかどうか確認する。USB はひとつの確認手段になるはず。

    USB はチップの機能だし、制御方法を見つけなくても動かせる。なによりドライバーがある。コンソールとして使うことも出来るに違いない。

    USB が使える出来る前の段階では LED しかないわけだが、よくよく考えれば stage2 で既に動いているわけで 工夫次第で 信頼できるデバッグ手段になり得る。

    3) Neo Slim 3000 のドライバを動かす

    LCDは既に外している。裸の状態でつなげて壊すのも嫌だし、Linux がちゃんと動いてからつなげようと思う。

    LCD をつなげるまでは、ボタンは自由に見ることができるが、LCD と線を共有しているので、制御の仕方も変わる。

    装置固有のドライバはこの段階で確認する。

    Neo Slim 3000 のドライバがちゃんと公開されているかどうかは現時点では分からない。オリジナルのドライバで良いのかもしれないし改造しているのかも知れない。

    まぁ大分後の段階になるから、そのときにはかなり分かっているはず。


      ちょっとメモ:

      DINGUX のキーコードは

      306 CTRL (A = ○)
      308 ALT (B = ×)
      32 SPACE (X = ▲)
      304 SHIFT (Y = ■)
      9 TAB (R)
      8 BS (L)
      13 RETURN (START)
      27 ESC (SELECT)

      273 UP (UP) 一応未確認
      274 DOWN (DOWN) 〃
      275 RIGHT (RIGHT) 〃
      276 LEFT (LEFT) 〃

      19 PAUSE (HOLD)

      0 -- (POWER) ?

      だそうだ。同じキーコードを返却するようにしないと。

      Neo Slim 3000 は、START,SELECT なんていうボタンはないが、幸いなことにアナログスティックはある。
      アナログスティックとしての機能をサポートしないで、ボタンを拡張するのに使えばなんとかなりそうだ。

      例えば FN1-FN4 みたいに定義して


      FN1
      FN4 FN2
      FN3

      FN1-4 + X => START
      FN1-4 + Y => SELECT

      とか。同時押しというオペレーションを使っているソフトがあるらしいので、アサインは検討の余地がある。

      問題は HOLD 。固定できるキーはないから 工夫がいる。

      鍵を回すイメージで

      FN1 → FN2 → FN3 → FN4 → FN1 (時計回りで1周) HOLD
      FN1 → FN4 → FN3 → FN2 → FN1 (反時計回り) HOLD解除

      とか。

      POWER はどうしよう。shutdown 機能があるので 電源スイッチでは代替できない。START + SELECT 同時押しかつ長押し?

      ついでに PMP-3100 。-- プライオリティは低いが、一応

      こいつは、POWER だけない。START + SELECT 同時押しかつ長押しで良いのかも。

      ついで dmenu の機能で

      L : 音量ダウン(-5%)
      R : 音量アップ(+5%)
      X : 輝度アップ(1/5レベル)
      Y : 輝度ダウン(-1/5レベル)

      というのがある。カーネルのドライバレベルで出来ても良いような気もする。FN2 だけ特別扱いにするとか。


    4) ユーザランドの動作確認

    Linux が概ね動いてから、DINGUX とかのユーザランドを動かしてみることにする。MP4 のアクセラレータとかを使っていない限り互換性はあるはず。

      IPU は、JZ4725B にもある。ユーザランドから見て A320 と違いがないようにできそうだ。

    不安なのは、LCD 。ハード的に R5G6B5 と決まっているから A-320 と合わないかも。

    dingoo-linux wiki: GPIOを見ると配線を調査したデータが載っている。これ見ると 16bpp で VSYNC/HSYNC を使っているように見える。16bpp だからといって R5G6B5 とは限らないのだが、デザインガイド通りなら R5G6B5 のはず。-- あまり心配しないで良いかも。

      IPUが対応しているフレームバッファのフォーマットは 24bpp か R5G6B5。だから R5G6B5 なのは確定で心配する必要はなさそう。

    “初心者お断り”の超小型Linuxマシン「本(Ben)NanoNote」をいじり倒すというレビュー記事が出ている。普通に作っていけば、これと似た状況になりそう。


まぁこんな感じ。それぞれの段階を楽しもうと思う。きまぐれで買ってみただけだから途中で挫折するかも知れない。

電子工作として何するかは、あまり考えていない。シリアルとか欲しいと思ったが、USB でなんとかなるはずで 再考中。

まぁセンサは欲しい。温度計とか加速度センサ。AVR の Tiny44A とかを使ってみたいが、全部終わった後。

    調べたところ PIC24FJ64GB002 が USB HOST 機能もあって良さそう。-- ずっと先になりそうだが一応メモ。

さらに言うと、LCD を外して別のものをつなげてみたい。FPGA とか。smart LCD 用のピンは出ていると思うので、多少は柔軟な使い方ができるはず。

動いてしまった後の話になるが、mipsel のセルフビルド環境というものにしてみたい気もする。usb デバイスしかないわけだが、イーサネットとして見せる 仕組みはあるので、HOST とつないで network には接続できる。rootfs を nfs にすれば、リモートから ログインできるマシンになるわけだ。このあたりは SmartQ5 と同じ。

SmartQ5 は 128MB あるがこれで少ないと感じていたわけで、32MB ぐらいで何ができるのか? という気にはなるのだが、ubuntu を載せるとかいう無理なことを考えなければ それなりには使えるかも知れない。16bit 幅 512Mbit の DRAM をなんとか手に入れて 64MB にしてみる... とか電子工作として楽しめるかも知れない。
だがメモリを増やすのなら、2 個載る Jz4740 とかの方が楽めそうだ。512Mbit にしても 128MB になる。あと メモリ帯域が 2 倍違うため性能的にも有利。

追記: 512M bit DRAM の値段を考えたら、吊り合わないことが分かった。

ただ 512M bit (8bit 幅)の SO-DIMM (3000円ぐらい) から取り外すなら 値段的には折り合うか。難易度は高いが親子にする加工ができれば128MB にできる。

    仮に 333 Mhz で動作させたとすると、メモリクロックは この 1/3 が選択できるので 111 Mhz ということになる。
    SDRAM は隙間なく使うようなことができた場合 1 クロック 2 バイト(16bit 1個の場合) の READ/WRITE ができるわけで、 単純計算で 222 MB/sec の帯域ということになる。2 個積めばこの倍で 444MB/sec 。ただし帯域を使いきれるわけではない。大量のメモリコピーをするようなケースで 良くて 1/2 とか。

    アクセスタイムという面で見てみると ... 普通の使い方をしている場合、L1 キャッシュラインを 埋めるだけの連続アクセスになる。キャッシュラインが 16バイトだとして、16bit 幅だと レイテンシ + 8クロックかかる。2 個使って 32bit 幅にすると レイテンシ + 4 クロック。

    レイテンシは、CAS レイテンシが 2 クロック。ランダムアクセスだと ページを切り替えるからさらに 数クロックかかる。たぶん 全部で 4 クロックはかかるはず。4 クロックだとしても 8: 12 だから バス幅が 2 倍になっても 1.5 倍にしかならない。また、こういう状況になるとすれば、キャッシュが全然ヒットしないケースということになるからレアケース。Jz4740 が速いといっても Jz4725B に比べて せいぜい 10%-20% 高速とか じゃないかと思う。

    追記:

    Jx47xx ではバンクはインターリーブになっていない。そうすると単純に Burst 転送の繰り返しと思って良いかも知れない。

    Programmers Manual にタイミングが載っていたので見てみた。

    以下は 16 バイトの READ/WRITE

    同じページにアクセスする場合 典型的な例では、32bit なら READ/WRITE に 6clock , 16bit なら 10clock 。

    ただし、こういうアクセスをするのはかなり難しい。単純に memset する場合でも ダーティなキャッシュを追い出して書こうとするメモリを読み込み、キャッシュに書いてダーティにする動作になる。memcpy だと source と distnation を交互にアクセスすることになりがち。

    違うページなら 32bit で 11clock / 16 bit で 15 clock 。これがほとんどだと思って良い。

    そうすると 32bit の A320 は最大 (16 - 11)/11 45% 速いことになる。ただし、普通こんなに差がでないのは上で書いたとおり。

    ところで、JZ4740 は 180 nm のプロセスルールだが、JZ4725B は、160 nm だそうだ。クロックアップ耐性は JZ4725B の方が高いかも。
posted by すz at 22:14| Comment(0) | TrackBack(0) | Jz47xx

2010年04月04日

中華PMPのハードウェア

中華PMPの A-320 に Linux が載ることをいまさらながらに知った。

興味がわいたので、ちょっと調べてみた。



  • CPU: Ingenic JZ4740 (or JZ4732 ?).
  • Flash: Samsung K9GAG08U0M-PCB00 (2G x 8 bit NAND).
  • RAM: 128Mbit SDRAM(16bit) x 2. (Total 32MBytes).
  • FM receiver: RDA microelectronics RDA5800C.


ググって入手した JZ4740 のデータシートでは、Xburst core 360MHz と書いてあるが、要は MIPS らしい。MMU も付いているし、なかなか。

メモリは 32MB と Linux を動かすには少ないが、PMP としては多い方なのかも。

開発環境などは結構充実しているようだ。VirtualMIPSなんてもものまである。

まぁ興味はあるのだが、買ったとしてなにか作りたくなるかというと微妙。Smart-Q5 ですら今は放置状態。

もうちょっと安いやつならお試しに買ってみてもいいかなという感じ。



探してみると、Neo Slim 3000 というのが 3999円と 安いようだ。CPU は、JZ4725 だそうで、MP4 のサポートはないものの 同じ CPU core。RAM は少ないのではないかと思えるが 16MB は載っているだろう。ひょっとしたら、RAM チップ載せ換えなんてこともできるかも知れないし。すべてがダメになっても液晶モジュール取りぐらいには使えるかも知れない。

ちょっと突撃してみるか。

その前にもうすこし調査。

公式のフォーラムは、NeoTeam Official Forumのようだ。

V1.7 が 2010/3/12 に公開されている。あと機械翻訳のような微妙な日本語の html 版マニュアルとかも。

それを見ると、メニューも微妙なかんじ。それはともかくテキストファイルも表示できるようだ。文字エンコーディングの設定ができて、日本語も表示できるようだ。

時計機能やFMラジオもある。時計機能があるということは、RTC が CPU に組み込まれているのだろう。すくなくとも TZ47XX には RTC があるので、TZ4725 という情報は正しそうな気がする。

フォーラムの some info about neo slim 3000 を見てみたら、Linux だと書いてあった。.. ということは、少なくとも RockChip ではないのだろう。Linux ならファームウェアの中を覗けるかも知れない。

安いものだし、過度の期待はできないが、ちょっとワクワクしてきた。

JZ4740 と JZ4725 のブロック図



(JZ4740)


(JZ4725)

上は、データシートの抜粋。同じ基準で書かれたものではないが、JZ4740 には、USB HOST と カメラインターフェイス、SPI 、SRAM インターフェイスと I2S 出力が増えているように見える。

あと、マルチメディアアクセラレータが付いている。カメラインターフェイスがあるところから見て、MP4 のエンコーダ/デコーダーが付いているのだろう。

CPU 自体は同じ。XBurst core 360 MHz 。MIPSII で little endian のみらしい。命令キャッシュ、データキャッシュともに 16KB 。消費電力は 200mW@360MHz 。

SDRAM インターフェイスは、DDR/DDR2 はサポートしていないようだ。A-320 は、16bit の SDRAM が 2 個ついていて 32MB だが、Neo Slim 3000 は不明。8/16/32 MB のどれかでたぶん 16MB なのだろう。

A-320 はカメラも USB Host も使っていないようだから、差はメモリの量とMP4 のデコーダーということになる。

ただ、A-320 のスペックには、500Mhz と書いてあるから グレードが高い CPU を使っているか、そうでなければオーバクロックしているのかも知れない。Neo Slim 3000 の方は不明。クロックは内部のPLLを使っていて設定できると思うので、多少のオーバクロックはできるのかも知れない。

    これ見ると A-320 は、336MHz と書いてある。変更できるが、範囲は 200MHz 〜 400MHz 。500Mhz というのは間違いじゃないだろうか。

メモリーは、JZ4740(or JZ4732)では、16bit 幅 の SDRAM (例: HY57V281620FTP) が 1個または 2個 付くようだ。JZ4740(or JZ4732)の A-320 には 実際 2 個付いている。( 参考 )。

JZ4725 は 16bit 幅が 1 個。VX989LE は、JZ4725 らしいのだが、1 個しか付いていない。( 参考2 )。メモリ帯域が半分しかないから性能的に不利なようだ。

メモリサイズは、16MB とは限らない。256Mbit のものを使えば 32MB になる。

あと、SD/MMC インターフェイス。JZ4740 は 4bit の I/O ができて 80Mbps までの帯域があるが、JZ4725 は 1bit 幅で 20Mbps まで。これだとだいぶ遅く感じられるかも知れない。

    JZ4725B というのもあるらしく。SD/MMC 周りがだいぶ違う。B は、4bit の MSC0 と 1bit の MSC1 があり、MSC0 は 最大 320Mbps と書いてある。要するに SDXC 対応ということだ。しかも MSC0 からブートできるそうだ。まぁ B は入っていないだろうが...

    あと、JZ4725 Programming Manual と データシートの記述が一致しない。 Programming Manual には、あたかも 4bit 幅でアクセスできるようなことが書いてある。??

    追記:
    MSC0 は、NAND Flash と排他的にしか使えないようだ。要するに SanDisk の iNAND のように SD/MMC と同じインターフェイスの Flash チップに対応したものらしい。当然ブートできないと困るわけだ。MSC1 は、やはり 1bit で Bなしの MSC に相当するようだ。やはり遅いのは間違いなさそうだ。

    ちなみに、チップ自体は、USB デバイスからのブートができる。どこからブートするかは、ピンで設定する。具体的なことはまだ知らないが、Qi-Hardware のサイトのどこかにあるに違いない。

これだけの違いがあれば、実用として使うなら A-320 の方が良いのだろう。ソフトの安定度の面もあるし。

だがしかし、分解したりして、怪しいことをするなら安いにこしたことはないのだ。

ちなみに液晶だけは、Neo Slim 3000 の方が大きいというメリットがある。

A-320 では、FPC-FTP280P04N-01 という液晶モジュールを使っているそうだ。コントローラは ILI9325 で、2.8 inch でフレキは 37pin 。さらに、1 pin は DB0 という情報がある。 aitendo で扱っている EGO028Q02と非常に良く似ている。画像検索してみるとフレキの幅も広く 同じ 1.0mm ピッチのようだ。

Neo Slim 3000 の方は、どんな液晶をどんな風に接続しているのだろう?興味の対象はそこだったりする。

Jz4725 の Programming Manual というのがopenpdf.comで見つかった。

データシートは概要が書いてあるだけなので、それだけではどういう制御をするのか分からない。Programming Manual がないと なにもできないのだ。ちなみに JZ4740 は、User Manual で各章が別々の pdf になっているようだ。

ついでなので書いておくと、本(ben)-NanoNote は、JZ4720 だそうだ。メモリは 32MB 。SDRAM 周りは jZ4725 と同じで 16bit 幅 x1 のみだから 256Mbit の SDRAM を使う。

512Mbit の SDRAM が入手できれば 、64MB にすることも可能かもしれない。

    デジキーで探してみると、SDRAM はやたら高い。例外的に Qimonda の SDRAM(128Mb/256Mb)だけが安い。が、16bit 品は特殊な部類らしく 256Mbit 品すら入手できない。

    リスクは大きいが、中古の DIMM から取り外した方が安く付くかも知れない。重要なのは 16bit 品を選ぶこと。4 つしかチップが載っていないものがあったはず。たとえば、ノートPC用の PC133 SO-DIMM は 64bit 幅で 片面 4 つか 両面 8 つのどちらか。


    スロット&ソケット図鑑:メモリ・ソケットより)

    4 つ(片面実装)で 256MB なら 16bit 幅 512Mbit x4 の計算。これで 1500円前後なら、まぁ当たりか。... あまり凝っても本末転倒だし。たまたま見つけたら検討してみよう。

    追記:使われていたのは、256Mbit (32MB) だった。交換して意味があるのは、512Mbit のもののみ。片面実装で 256MB なんていう SO-DIMM は見つけるのは難しい。512MB 8チップなら確実に 512Mbit なのだが 3000円とかする。これで 8bit 品だったら役に立たない。32MB でなんとかしようという気になってきた。

    追記:aliexpress で 512Mbit (16bit 幅) の SDRAM を扱っている所を見つけた。→ barney yang's store。例えば K4S511632Dが $ 9.47 (FreeShiping) 。デジキーとかだと 3000円以上だから格安ではある。


ADCの謎


JZ4725 の ブロック図をみると、タッチパネル用の ADC があるように見える。だが、ピン配置をみても ADC は、2pin しかない。1pin は、バッテリーの電圧測定用を想定していて、残りの 1pin が 汎用。Audio CODEC にも ADC はあるが、これは MICIN と LINE IN用で DC を測定するには向いていない(はず)。

Neo Slim 3000 は、タッチバネルはついていないものの、アナログスティックというものが付いている。2次元だから 2 入力必要。いったい どうやっているのだろう? ちなみに、使えるデバイスは I2C と UART(TXD/RXD) それぞれ 1ch 。あと GPIO 。I2C の ADC を外付けしてたり、アナログスイッチ(セレクタ)を使って切り替えている?

JZ4720 や JZ4740 は、XP/XN/YP/YN という タッチパネル用のピンが出ている。

Linux 関係


こいつで (自分でビルドした)Linux を動かす場合どうしたら良いのか? ... というと 結局のところ Qi-Hardware が出している Ben-NanoNoteSAKCボードの環境に載っかることになりそう。

特に、SAKC ボード は、ベースが JZ4725 で同じ。メモリが 64MB もあるとか FPGA (Spartan3E VQ100pin) が載っているとか オプションの LCD が NanoBook と同じとか ... いろいろ違いはあるものの、ブート周りとか、基本的なデバイスドライバは 同じで随分便乗できる。ユーザランドもほぼ使えるはずだ。

ちなみに、NanoNote の LCD は、ILI9325 などのコントローラが載っている Smart LCD タイプではない。 ここは A-320 用のドライバを使うことになるのだろう。

ところで、DINGUX。まだ良くわかっていないのだが、A-320 のみをターゲットとしているわけではないようだ。カーネルのパッチは、JZ47xx を出している Ingeric社 から出ているが、それぞれのプロジェクトでマージしているらしい。一応別々みたいだから、両方を見てどちらをベースにするか考えることにしよう。


ところで、シリアルは端子があるのだろうか? あるなら、シリアルコンソールに使ったり、外部デバイスをつなげるのに嬉しいのだが。幸い jz4725 は LQFP だから 配線を追ったり、無接続なら無理やりつなげるようなことが可能かも知れない。

あと I2C もある。低速でかまわないなら、AVR を I2Cスレーブとしてつなげる手もあるかも知れない。 いくつかI2C デバイスを使っているなら、デバイスの足から分岐できることも期待できる。

まぁ、購入前の調査はこれぐらいにしておこう。あとは、購入して分解するのみ。

ところで ちょっと Ben-NanoNote にも興味が出てきた。USB HOST の端子さえ出ていれば、BlueTooth とかつなげそうだけどどうなんだろうか?

追記;怪しげなマシンたち

ちょっとメモ。


  • PMP-3000



    筐体は同じみたいに見える。Neo Slim 3000 の製造元?

    ただ Neo Slim 3000 にない TV-out 機能がある。ボードはちょっと違うのかも。

  • PMP-3100



    これは実に怪しげ。A320 とそっくり。..なのだが PMP-3000 の兄弟機なら jz4725B とかかも。

    追記:PMP-3100 は、Jz4725(無印)でメモリ 16MB だった。TV-OUT も間違い。
    後継機らしき P5-5 というのが出ている。firmware が変わったのは明らか。CPU も B になったかも知れない。

  • 音狐 YH-873



    これも怪しげ。もうA320 の偽物なのか 製造元なのかわからなく..

  • 音狐 YH-876FM



    これはいたって普通なのだが、CPUが Jz4755 らしくちょっと興味がある。

  • 音狐 YH-882



    これも Jz4755 。

  • venus JXD300



    Neo Slim 3000 と比べるとこっちの方がボタン周りの質感が高い。... が、Jx47xx ではなく sunplus (ARM + DSP?)らしい。

  • focalprice EM508W




    これはさらに怪しい。venus JXD のさらにパチモノ? お得そうに見えるにもかかわらず、レビューがない。ますます怪しい感じ。

  • 7-Support-WIFI-netbook



    別に怪しげではないのだが、Jz4750 を使った Netbook もあるようだ。しかも買える。-- MIPS を使った 珍しい Netbook -- まぁなにか怪しげではある。

    2010/06/07 現在 $79.38 + 送料 $39.26 = $118.64 と安くなっている。でも同じ製品を多数登録している変なところなので要注意。安くなっているのを知らなかったというのもあり、こっち (送料込み $130.93)をぽちってみた。

  • こんなことを書いた数日後に Lyumo Bookというのが日本で発売されてた。会員なら 12800円とか。



    一般の人には勧められないような気がするが... mips が好きな人にはいいかも。たぶん CPU が jz4730 であること以外は上のとほぼ同じ。

    ちなみに既に分解した人もいるようだ。→ 「日々是おやっとさぁ」

  • Dingoo A-330



    そうこうしている間に、Dingoo A320 の次世代機まで出た。

    なんか green-tool というところで、6,980円と安いのでついつい買ってしまった。ついでに PMP-3100 まで。

    両方とも TV-OUT がある。最新機なら チップ自体に TV-OUT の機能がある Jz4750/Jz4755 ではないかという期待から購入してみることに。とりあえず中を見てみたい。
    あと A330 は、無線コントローラをサポートしている。うまくすれば無線キーボードとか使えるのではないかという期待もある。

    A330 の情報が出ていた。

    dingoonity.org のレビュー

    違うメーカーが出した A320 クローンだそうだ。CPU は Jz4740 で DINGUX が動くらしい。メモリが 64MBになっているの がメリットか。

    どうも DINGOO DIGITAL という所は、既に A320 という A320 クローンを既に出していて A330 は、その後継機らしい。なんとも カオスな状況。



追記: 2010/07/21



    www.aliexpress.com で xburst を検索したら $72.16 + (送料)$19.63 = $91.79 のものが見つかった

  • XBURST 100MHZ 32CPU RAM Capacity: 128M 2GHard Disk Windows CE Elaine
  • SPEC UMPC CPU Samsung 532MHz 32-bit
  • Processor Type: XBurst 400 MHz CPU 32

    CPU の 説明は、一貫していない。G400 と同じタイプなら CE ならWM8505 / Linux なら Jz4730 のはずで、すべて誤りの可能性まである。



    ちなみに、WM8505 の Laptop (android) は、$65.97 + (送料)$13.29 = $79.26 の これが安い。さらに -- このサプライヤーは、CPU が WM8505 のままの 10 inch Laptop ($100.96 + $15.70, 解像度 1024x600) というものも扱っている。

追記: 2010/11/16

その後の研究で、Jz4755 の見分け方が分かってきた。

特徴のあるアナログ時計の画面なら、Jz4755 または Jz4725B 。で、720P 対応 + TV out なら Jz4755 。あと なぜか Touch パネル やカメラ付き のものは見たことがない。
Jz4725B は、H.264 は性能的に無理のようだ。Jz4755 なら 見れると思うが 多分 720p は厳しい。

どれもこれも ファームウェアのベースは同じ。カスタマイズはされているようだが、基本的な性能はみな同じようだ。これは、あまりハズレがないということを意味している。液晶が特に綺麗だとかの特徴がなければ、デザインとか価格で選べば良さそうだ。


(Mahdi (麦迪) T556 / 3.0inch Jz4755採用)
採用例が多いブランドは、Aneca , Mahdi(麦迪), あと KO Digital(可欧), 紫光 。Aneca は、FocalPrice で扱っているが、他は taobao ぐらいでしか買えない。で、Aneca は Jz4755 は採用していないようだ。
結局 Jz4755 が欲しいなら taobao になってしまう。

この中で紫光は結構安い気がする。麦迪 > 可欧 > 紫光 という印象。


例えば Jz4755 採用 4.3 inch の T816 ここで 235元。


Jz4725B で良ければ、T950/MZ908/ MV-S901 は、ここで 135 元。


ちなみに、 dealextreme でも 1つ Jz4725B らしきのを扱っている。4.3 inch の これ。$43.20 で結構安いが、Jz4755 の特徴がないから、Jz4725B なのだろう。お手軽なところでは 残念ながら Jz4755 は買えないようだ。
posted by すz at 18:54| Comment(0) | TrackBack(0) | Jz47xx