2011年12月03日

開発環境の整備(3)

開発環境の整備とかいうタイトルにしてしまったが、Android とはほぼ関係ない。なにをやろうとしているかといえば ... Redhat Enterprise Linux 6 (RHEL6) の mipsel 版 clone を作ること。

しばらくの間、中断していたが CFW も一段落したので再開。

devkit3.tgz と それの元の mkdevkit3

    現状が良く分からなくなっているので、また整理から。

    http://nmj.sumomo.ne.jp/my-rhel6/

    ここの mipsel-devkit3.tgz と それの元の mkdevkit3.tar を新たに置いた。

    今までは元の環境を壊さないようにしていたが、実は libtool など具合が悪いものがある。もう面倒なので、元の環境を上書きするのを前提にした。

    具体的にインストールの仕方を書くと

    • mindev10bin2.iso の中にある mindevel10.tgz を chroot 環境として展開 (tar -zxvpf )
    • i686 パッケージを アンインストール
    • usr/include を 削除するか usr/include-x86_64 などに rename (必須)
    • mipsel-devkit3.tgz をそこに上書き展開。
    • startup.sh で qemu-mipsel を動作させるようにする (起動して1回のみ)
    • /etc/ld.conf.d のファイルを lib64 → lib に修正 して ldconfig (とりあえず)

    この操作で rpmbuild --target mipsel とすることで、ビルドが出来るようになる。

    mkdevkit3.tar には、SRPM や 作った RPM を置いてある。mipsel-devkit3.tgz は ほぼ作った RPM を 元にしている。( gcc も無理やり ビルドして RPM 化した。)

  • 状況は前記事とあまり変わらない。ここから再スタート。

    perl は、config.sh に cppsyms='NO_ASM'=1' なんていう変なのが入っていた。

    初期に gcrypt だったか .. の make でうまくいかないので、/usr/rpm/macros とかに -DNO_ASM を 無理やり入れていた。これが回りまわってこうなったようだ。

      /usr/rpm/macros とかの -DNO_ASM を off にしても同じ現象 -- で 調べると いろいろ伝播している。とりあえず mysql と tcl と icu あたり。あと python と uuid も。

    config.sh を書き換えて make すると最後まで行った。

    あと、地道にビルドしていったら、nspr , nss がビルドできるようになっていた。
    そうなるとついに openldap がビルドできるようになる。

mipsel-devkit4.tgz と それの元の mkdevkit4.tar

    devkit3 の発展形態。作った rpm は 806個 になった。ようやく全体の 1/2 を超えた。

    ついに openldap がビルドできた。これでいろんなものがビルドできるようになって、かなり進んだ。

    mesa はまだ。perl はビルドできたが微妙な状態。x86_64 版とちゃんぽんになっているのがいけないのかも。

    そして ... rpm コマンド が作れた。ここがひとつのマイルストーン。実機で chroot できる環境を作ることができる。次の devkit はセルフベースで、cc1/cc1plus のみクロスに出来るものを目指す。

    ちなみに、openssh-server はできているので 実機では ssh でログインできるものになるはず。ストレージは microSD しかない。相当に遅そうだが novo7 basic ならなんとか。

    もうちょっと詳しくかいておこう。

      x86_64 用に作った rpm の総数は、1500 個ぐらい。だがこれには、カーネルや 立ち上げに必要な ものがふくまれている。chroot してビルドするのに必要なものはもっと少ない。

      次目指すのは、microSD に ext4 パーティションを作って そこに展開した tarball を 使って セルフの環境で 自分自身をビルドできる環境。microSD の I/O 性能や 使えるメモリの量の点で novo7 basic を使うことを想定。

      で、qemu-mipsel と gcc の cc1/cc1plus などをパックしたものも用意して、この上に 展開することで、Linux x86_64 での chroot 環境でも使えるものにする。 devkit4 までは、x86_64 環境に上書きしていたが、これが逆になる。

      セルフの環境用の microSD は、vfat 領域を減らして ext4 と swap パーティションを追加したものになると思う。最初は adb で入って

    • ext4 を mount

    • swapon

    • chroot した上で sshd を起動。

      ここまで済んだら

    • 外部のマシンから ssh を使って ログイン。

      という手順になると思う。

次の作業

    次は、作った rpm を rpm コマンドで インストールしようとして エラーを見る。

    # mkdir newroot
    # rpm -r `pwd`/newroot --initdb
    # rpm -r `pwd`/newroot -Uvh *.rpm

    こんな感じ。で、rpm がないというエラーが出る。このエラーを減らすように rpm を追加していく。
    現状で足りないのは、

      kernel-headers
      kernel
      pcsc-ifd-handler (needed by pcsc-lite-1.5.2-6.el6suz1.mipsel)
      sane-backends-libs-gphoto2 (needed by sane-backends-devel)
      phonon-backend (needed by qt-x11)
      mesa-dri-drivers (needed by mesa-libGL)
      setools-libs-python ( needed by policycoreutils-python)
      text-www-browser (needed by docbook-utils )

    これぐらいまで減ってきた。qt, mesa は強引にビルドしてこうなっている。ちなみに、text-www-browser は、w3m のことで core-dump するので ビルドできていない。

    kernel は無論ビルドできない。

    他にもビルドできていないものがあって、avahi と cups 。数は少なくなったが、結構難物ばかり残っている。

    で、これらをビルドして kernel など無理なもの のみになれば、--nodeps で 無理やりインストールして tarball を作る。これで、ようやく self ベースに切り替えられる。

    その後は、... java 関係。java 関係が一番の難物で不安を感じている。

    ちょっとビルドについてのメモ
  • perl

    perl は、noarch パッケージは基本ビルドしないことに。mipsel パッケージは 全部ビルド。

  • cups

    ./genstrings > sample.c

    で core-dump 。これがクリアできていない。

  • avahi

    checking for python module gtk... no
    configure: error: Could not find Python module gtk

    これの原因は、

    checking for python module gtk... no
    configure: error: Could not find Python module gtk

    ということらしいのだが...
  • w3m

    mktables だったかで code-dump 。たぶん gd が原因。

  • setools

    lib64 を読もうとしてエラー。

  • 掃除

    最初 そのままではビルドできないものを多々あったが、いくつか ビルドしなおして正規のものに置き換えた

      cracklib
      gmp
      libSM
      libxcb
      sane-backends
      unixODBC
      uuid
      nss-softokn
      gstreamer-plugins-base (libtheora )
      nfs-utils

    まだ残っているが、まぁぼちぼち。

mipsel-devroot6.tgz と mipsel-devkit5.tgz と それの元の mkdevkit6.tar (整理中: (仮))

    avahi も cups も devel パッケージを作りたいだけなので、ごまかした。

    で、これを元にとにかく self 版を作ってみたのが、devroot6 。
    devkit5 は、同じ rpm を元に x86_64環境に上書きする従来の発展版。

    devroot6 は、689 個のパッケージをインストールしたもので、直接 chroot 可能なようにしている。実機でも chroot 可能なはずだが未確認。サイズは 400MB弱で まだまだ小さい。

    一応はできたのだが ... 結構動作があやしい。なので、作る予定がなかった devkit も作ることにした。

    mkdevkit6.tar は、すべての元で作った rpm ( 全部で 1013 ) 個が置いてある。サイズも 1.2GB と巨大になってしまった。半分は SRPMS で もう使わないものも置いていたりするので大きくなっている。

    今後は、作ったこれを動かしてみるつもり。あと、これほどのサイズのものを頻繁に置き換えるのは無理があるので 当面これを手直しして使う。次に置くのは最終形態にするつもりで、いつになるか分からない。

ちょっと実機で試す

    32G の microSD にパーティションを3つ作成し、ext4 で mkfs して mipsel-devroot6.tgz を展開

    adb で mount して chroot できた。

    bash-4.1# ifconfig -a
    ifconfig -a
    lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:16 errors:0 dropped:0 overruns:0 frame:0
    TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:1376 (1.3 KiB) TX bytes:1376 (1.3 KiB)

    wlan0 Link encap:Ethernet HWaddr 00:E0:4C:14:E3:67
    inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
    UP BROADCAST MULTICAST MTU:1500 Metric:1
    RX packets:42 errors:0 dropped:305 overruns:0 frame:0
    TX packets:50 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:24804 (24.2 KiB) TX bytes:7971 (7.7 KiB)

    ビルド用 しかインストールしていないので、openssh も入れてなかった。

    bash-4.1# rpm -Uvh init*

    error: Failed dependencies:
    /etc/oracle-release is needed by initscripts-9.03.23-1.0.1.el6.mipsel
    bash-4.1# rpm -Uvh init* --nodeps

    Preparing... ########################################### [100%]
    1:initscripts ########################################### [100%]

    bash-4.1# rpm -Uvh openssh-5* openssh-server*

    Preparing... ########################################### [100%]
    1:openssh ########################################### [ 50%]
    2:openssh-server ########################################### [100%]
    bash-4.1#
    bash-4.1# ls /etc/init.d

    avahi-daemon iptables netfs pcscd rpcidmapd snmpd
    functions killall network quota_nld rpcsvcgssd snmptrapd
    gpm lvm2-monitor nfs rdisc sandbox sshd
    halt messagebus nfslock restorecond saslauthd udev-post
    httpd netconsole openct rpcgssd single uuidd
    bash-4.1# /etc/init.d/sshd start

    cat: /proc/sys/crypto/fips_enabled: No such file or directory
    /etc/init.d/sshd: line 50: [: too many arguments
    Generating SSH2 RSA host key: /etc/init.d/sshd: line 69: 890 Segmentation fault $KEYGEN -q -t rsa -f $RSA_KEY -C '' -N '' &>/dev/null
    [FAILED]
    bash-4.1#

    rpm は入ったけれど、なんかダメみたいだ。... telnet はどうだろう。

    bash-4.1# rpm -Uvh telnet-server*

    error: Failed dependencies:
    xinetd is needed by telnet-server-1:0.17-46.el6.mipsel
    bash-4.1# ls xinetd*
    ls xinetd*
    ls: cannot access xinetd*: No such file or directory
    bash-4.1#

    だめだった。

    ちょっとビルドのテスト

    bash-4.1# su - root

    -bash-4.1# rpmbuild --rebuild mingetty*

    Installing mingetty-1.08-4.1.el6.src.rpm
        :
    + rm -rf /root/rpmbuild/BUILDROOT/mingetty-1.08-4.1.el6.mipsel
    + exit 0
    Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.p2pk4u
    + umask 022
    + cd /root/rpmbuild/BUILD
    + rm -rf mingetty-1.08
    + exit 0

    -bash-4.1# rpm -Uvh /root/rpmbuild/RPMS/mipsel/mingetty-1* --force
    rpm -Uvh /root/rpmbuild/RPMS/mipsel/mingetty-1* --force
    Preparing... ########################################### [100%]
    1:mingetty ########################################### [100%]
    -bash-4.1#

    いちおう OK 。( su - しているのは、adb から chroot しただけでは、HOME とか最低限度の環境すらないため。)

    ちょっと使ってみたわけだが、Ronzi A3 は microSD の I/O が遅くてレスポンスが悪い。あと adb で作業するのは辛い。やはり最低限の作業環境は最初から入れときたい。

    それはともかく、ついに実機で動かすところまで来た。

    現在の不具合:

      redhat-rpm-config を入れると、self 版では rpm を生成する最後のところで エラーになる。

      INTERNAL ERROR 521 (0.152-Dec 5 2011): cannot read data from file

      elfutils の eu-strip を動かすようになって、それが動かないということらしい。

      ちなみに redhat-rpm-config を入れないと %dist が 入らないので 違うファイル名の rpm が出来てしまう。

      で、x86_64 の環境だと native の eu-strip を使っているはずで、それなら問題ないようだ

      なかなか嫌らしい問題っぽいが、とりあえず rpm -e redhat-rpm-config として、/usr/lib/rpm/macros に
      %dist .el6
      を入れておくことにしよう。

      それ以外に アーキテクチャが対応していないという理由で全然ビルドできないものがいくつかある。

      corosync libatomic_ops openais valgrind fakechroot

      このあたり。( + libgcrypt )

    いろいろ問題があるのだが、作ろうとしていたものは、開発のベース。すなわちこのような問題に直面して、それを直していけるようなもの。そういう意味では あと一息。

    追記:

    # passwd
    Error - unable to connect to audit system

    詳細な原因はわからないが、passwd などが動かないようだ。どうもそのせいで mipsel-devroot6.tgz の作成に失敗している。%pre で groupadd などをしているパッケージがあり、これらは エラーになる。

    ちょっとインチキだが、audit なしでビルドした shadow-utils と passwd を置き換えたら

    /usr/sbin/build-locale-archive: cannot read data from locale archive: Cannot allocate memory
    warning: %post(glibc-common-2.12-1.25.el6suz3.mipsel) scriptlet failed,
    warning: %post(gtk-doc-1.11-5.1.el6.noarch) scriptlet failed, exit status 139

    エラーはこの 2 にまで減った。直せていないが %post なので パッケージが入らないというわけではない。

    ちょっとまずそうなので、作りなおして置き換えることにしよう。


    ビルドできない rpm について
  • fakechroot

      x86_64 以外ではビルドできない。これを必要としているのは、rpm コマンドのビルドで、しかも check する場合のみ。--without check を付ければ良さそう。

  • libatomic_ops

    pulseaudio , gc で必要とされている。

    ググると gentoo には 、libatomic_ops-1.2-mips.patch があるようだ。 で、この libatomic_ops は、gc-7.1 に含まれるもの。gc は無理やりビルドできるが、libatomc_ops がないので実行できなかったようだ。(w3mが ビルドできなかった理由?)

  • pulseaudio

    SDL で必要。.. だが SDL 側で off にできそう。

    あと、先の話だが、java-1.6.0-openjdk 。ただし、これも off にできそう。

  • corosync

    openais で必要。

  • openais

    lvm2 と cluster で必要。 cluster は、lvm2 で必要。

    要するに lvm2 側でなんとかすれば、corosync も openais , cluster は不要。

      lvm2 見てみたら、enable_cluster のときだけ必要で、それが 1 になるのは x86 系だけだった。要するに最初から不要

  • valgrind

    curl , gdb , libmthca libtasn1 , python で必要とされている。

    が 、いくつかの architecture では 必要ないことになっている。

    パッチは見つけた (r11845_mips.tar.bz2)が、最新でも まともにサポートされていないようだ。


      が、libtasn1 は x86 と ppc のみ必要。libmthca は libibverbs-driver のことで librdmam , libnes , corosync あたりが関係ある。





    qemu: Unsupported syscall: 4204

    ls でこんなメッセージが出るようになった。4204 というのは、capget のことで、qemu (1.0)では、

    case TARGET_NR_capget:
    goto unimplemented;
    case TARGET_NR_capset:
    goto unimplemented;

    こんなふうになっている。

    あと、qemu の環境で rpm でパッケージをインストールすると

    File size limit exceeded

    というメッセージが出て 1 つめで終わってしまう。SIGXFSZ を受けている?

    df が表示されない。

    /etc/mtab にそれらしいのを入れれば OK っぽい。
posted by すz at 18:25| Comment(0) | TrackBack(0) | Jz47xx(Linux)

2011年11月24日

microSDリーダ

microSD リーダで 気に入ったものが見つかったので紹介しておこうかと。

Ultra-Slim USB 2.0 TF/Micro SD Card Reader w/ (Pink), (Black) , (Blue)


ものは、これ。DealExtreme という 中華系のショップで購入。

気に入ったポイントは何か ....

  • 1) USB の (Type Aオス)コネクタ部分が金属製

    ここがプラスチックのものもあるが、安っぽい以上に PC 側を痛めてしまないか心配なので嫌。



    以前このタイプを好んで使っていたのだが、これは逆に リーダ側が弱くあまり持たない。

  • 2) 幅が狭く、隣の USB コネクタと干渉しない

    ちょっと幅があると、隣に USB ケーブルすら挿せなかったりする。干渉しないものでないと困る。

  • 3) コンパクトでありながら、microSD がすっぽり入る

    microSD が飛び出しているものがあるが、ちょっと怖い。microSD が折れてしまうとダメージがでかいので、全部が入ってしまうものが良い。

      USB メモリ形態がデフォルトということ。いくつも持っていて、ケース代わりにっしている。

  • 4) コンパクトすぎない。ストラップも付けられる

    あまりに小さいと、存在感がなく どこかに忘れそう。

    これは、ちょうど好みの大きさ。

    ちなみに、ストラップになるのではなく、他の機器と同様に ストラップを付ける穴がある。
    ちゃんとしたものでないと、microSD が 入れ替えできなくなるので注意。

  • 5) microSD のスロットがしっかりしている。



    百均の microSD リーダは、1) - 4) をクリアしているのだが、microSD の端子の接触がどうにも 不安。実際 接触不良になりがち。それどころか、隣の端子とショートする不安まである。



    こいつの中味も、プラスチック製なのだが、これとよく似たものが使われている。ただし、挿入を検出するスイッチが付いていてより高級なもの。

    形状から見て、かなり安心。

    ただ、放熱性という点では、金属のスロットより劣る。連続書き込みで結構熱がこもった。

  • 6) 低価格 ($2.0 ぐらい)

    100円よりは少々高いが、これぐらいなら十分安い。

  • 7) 『取り外し』が効く

    これはたぶん保証外 なのだが、USBに挿した後でカードを入れても認識した。
    ドライブの取り外しで、unmount した後、カードを抜いたあと 入れなおすと再認識もした。

    基本的には、内部のチップは HotPlug に対応しているようだ。このサイズ・形で、ちゃんとした Push-Push コネクタが付いたら 自分的には完璧なのだが ...

    色が付いているパーツは、すこしめくることができるが、破壊しないで外すのが難しそう。実際には覗いただけ。

      支援隨插即用及熱插拔功能

      スペックらしきものを見つけたのだが、こういう風に書いてあった。

      たぶん 隨插即用 が Plug-and-Play 熱插拔 が HotPlug 。HotPlug は、カードのことかも知れない。

      Linux でも umount してカードを抜けば 、detach され 再度カードを挿せば attach される。

      Vendor=14cd ProdID=125c Rev= 3.00
      Manufacturer=Generic
      Product=Mass Storage Device
      SerialNumber=125C20100726
      MxPwr=248mA

      SerialNumber は、皆同じ。あと、Max Power が 248mA なんて妙に具体的なんだが ...

今まで結構な種類の microSD リーダを買ってきている。その中で(いまのところ)いちばん気に入っている。

ただ、レビューを見ると気になることが ...

    Read Only にしかならないとか ... たぶん以前のロットは不良品だったのだろう。私が買ったのはまったく問題ない。

    ... と思ったが間違いで、6 個中 2 個(両方ピンク)が Read Only になる。まぁ余分に買っているから良いのだが ... どこか接触不良なのだろう? (中のハンダづけ不良?)

    折角作りが良いのに残念な欠点。

      追記: どうも 大量に書き込んだりベンチマークすると不具合が起きる。

      現象は、I/O エラーが起きて すぐ後に USB が再認識される。OS がリセットしているのではなく、カードリーダがリセットしているような感じ。

      この現象は、Gigastone 32G との組み合わせでよく起きるようだ。カードの特性となにか関係あるかも。

      気に入ったのに... 残念。

    ついでに ...

    Aluminum Shell Micro SD/TF Card Reader $1.48

    これも全く同じチップを使っている。

    こちらも、1) - 7) 全部クリアしている。ただ、プラスチック部分が安っぽい。

    スロットは金属製。カードだけ抜き差ししてもちゃんと認識されるが、挿入スイッチは付いていないようで、若干の不安がある。

記念に 軽く性能調査

    microSDHC は 安物ばかり買っているので 性能は全然出ていない。

    Linux で dd コマンドを使うとシーケンシャル Write/Read ぐらいは簡単に測定できる。

      Write Read
      Transcend 32GB class 2 3.8 MB/s 10.4 MB/s (上海問屋 で購入: セレクト)
      Gigastone 32GB class 4 4.0 MB/s 17.9 MB/s (デジタル達人 で購入)
      Team 16GB class 2 4.3 MB/s 17.9 MB/s (アンジー で以前購入: 現行は class 6)
      Toshiba OEM 16GB class 4 7.8 MB/s 15.5 MB/s (C16G Japan と刻印)
      Toshiba OEM 16GB class 4 9.7 MB/s 16.2 MB/s (PhotoFast Card Reader で測定)

      SanDisk 4GB class 2 15.5 MB/s 23.8 MB/s (大昔のデータ)
      Toshiba 4GB 12.4 MB/s 23.7 MB/s (大昔のデータ)

      Write: dd if=/dev/zero of=f01 bs=1024k count=128 conv=fsync
      Read: (umount - mount) dd of=/dev/null if=f01 bs=1024k count=128

    性能を気にせずに買ったとは言え、いまいち。

      よく見たら Transcend 32GB も Gigastone 32GB も まったく同じセクタ数 (62325760) だった。vfat のフォーマットも (serial 番号を除いて) まったく同じ。たぶん両者 SanDisk OEM 。

    最近は class 10 も安くなっているし、UHS-I の microSDHC も出ている。ちょっとテスト用に 小容量で良いから買って試してみたい。

    Novo7 basic などが UHS-I に対応しているかどうかもチェックしてみたかったりする。CPU の スペックでは、80MHz ( 40MB/sec ) まで対応と書いてあるし。

    ちなみに、東芝の SD-MU008GXのスペック は、DDR50/SDR50 モード Read 40MB/s / Write 20MB/s で、UHS-I 未対応 アダプタだと Read 23MB/s / Write 20MB/s だそうだ。

    これで ようやく 大昔の高価だった時の MicroSDHC の性能を超えるかんじ。

    グリーンハウスのは、メーカのスペックによると UHS-I で Read 25MB/s / Write 15MB/s -- これって UHS-I でなくとも出る性能レンジでは?

    ググったら ここに SDR50 とかの説明があった。

    • SDR104 , SDR50, SDR25, SDR12, DDR50 が新しい規格 UHS-I (?) で全て 1.8v
    • SDR/DDR は、メモリと同じ意味。SDR104 は、208 MHz/104 MB/sec , DDR50 は 50 MHz / 50 MB/sec 。
    • 従来規格は、HS (Hi-Speed) が 50 MHz/25 MB/sec (3.3v)

      Jz4760/Jz4770 は、電圧を切替える機能がないので、たぶん 従来規格の HS のみ対応。
      ... どうも 3.3v のまま 80 MHz まで動くということらしいが、カードも対応している必要があり、普通は 50 MHz まで。

      Ronzi A3 とかは、それ以前の問題(ドライバ?)で性能が出ていない。novo7 basic は、まともかも知れない。

追記: アンジーで 16G 2種類買ってみた

    ひとつは SUPER TALENT の class10 ST16MSC0A (3年保証) もうひとつは、Team class 6 (10年保証)。

      SUPER TALENT class10 ST16MSC0A
      --------------------------------------------------
      CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
      Crystal Dew World : http://crystalmark.info/
      --------------------------------------------------

      Sequential Read : 19.075 MB/s
      Sequential Write : 16.095 MB/s
      Random Read 512KB : 18.482 MB/s
      Random Write 512KB : 1.375 MB/s
      Random Read 4KB : 2.608 MB/s
      Random Write 4KB : 0.012 MB/s

      Test Size : 100 MB
      Date : 2011/11/29 21:58:13

      Team class 6 TG016G0MC26A
      --------------------------------------------------
      CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
      Crystal Dew World : http://crystalmark.info/
      --------------------------------------------------

      Sequential Read : 19.079 MB/s
      Sequential Write : 16.297 MB/s
      Random Read 512KB : 18.526 MB/s
      Random Write 512KB : 1.323 MB/s
      Random Read 4KB : 2.490 MB/s
      Random Write 4KB : 0.012 MB/s

      Test Size : 100 MB
      Date : 2011/11/29 21:42:02

    とりあえず CrystalDiskMark で測定してみたら、ほぼ同じ性能。-- これって中身同じかも。裏の模様(パターン)がそっくり。

      よくよく見たら、シリアル番号まで同じだった。serial number 0xf84e1690 同じどころではなかった。

    ついでに、Gigastone 32G と 最近買った Gigastone 16G class 4 も測定してみた。

      Gigastone 16G class 4
      --------------------------------------------------
      CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
      Crystal Dew World : http://crystalmark.info/
      --------------------------------------------------

      Sequential Read : 16.219 MB/s
      Sequential Write : 8.481 MB/s
      Random Read 512KB : 15.975 MB/s
      Random Write 512KB : 0.704 MB/s
      Random Read 4KB : 2.170 MB/s
      Random Write 4KB : 0.041 MB/s

      Test Size : 100 MB
      Date : 2011/11/29 22:41:45

      Gigastone 32G
      --------------------------------------------------
      CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
      Crystal Dew World : http://crystalmark.info/
      --------------------------------------------------

      Sequential Read : 19.024 MB/s
      Sequential Write : 4.225 MB/s
      Random Read 512KB : 18.411 MB/s
      Random Write 512KB : 1.026 MB/s
      Random Read 4KB : 2.277 MB/s
      Random Write 4KB : 1.113 MB/s

      Test Size : 100 MB
      Date : 2011/11/29 22:56:53

    あ、32GB のほうは、Random Write が速いではないか。なるほど、これは単なるウェアレベリングじゃない。ランダムな位置に書いたデータを一ヶ所に集めているに違いない。そういう高度な処理をすれば、シーケンシャル・ライトも同じ処理になって相対的に性能が低くなるのも理解できる。あと、それほど高度な処理が必要なら TLC (1セル あたり 3bit) かも知れない。TLC だと 書き換え可能な回数が減り、データを保持できる期間も(同じ冗長度なら)短くなるはず。MLC が 1万回/10年なら 3000回/3年 ? -- ちゃんと調べてないから分からない。後で調べておこう。

    かつて PhotoFast に CR-9000という 6 枚までの SDカードを SSD 化する ものがあったが、こういう特性のカードを使うなら OS Disk にも使えるかも知れない。SD カードはリムーバブルなので、Random Write でも書き込みは完了しているはずで いわゆるプチフリとも無縁のはず。

    ただ、4MB/sec はいかにも遅い。6 枚でも 24 MB/sec にしかならない。シーケンシャル・ライトは 4倍ぐらいは欲しいところ。
posted by すz at 21:53| Comment(0) | TrackBack(0) | 日記

2011年11月15日

CFW作成スクリプトについてのメモ

novo7 basic 用 CFW を出したわけだが、これはもともとスクリプトで組んでいる。
手動でやっていると、新しい ファームウェア が出た時に面倒になったり、なにか入れ忘れたりするから、スクリプトに覚えさせて 何度でも再現できるようにしているわけだ。

このスクリプトを 新たに作りなおして公開することにした。

  • http://nmj.sumomo.ne.jp/my_cfw/mkcfw-n7b-2.1.zip (最新)

      主な変更点:

    • Dalvik Turbo VM -- Fruit Slice などが動かないため、デフォルトから外した。
    • YouTube.apk , Vending.apk -- osakanataro 氏 CFW 10/18 日版を ベースに。(sys_app に置いた)
    • mips 版 su(3.0.1) + Tasselhof-RootScript版 Superuser.apk (一応動く模様)
    • nicoWnnG の更新方法を変更。
    • osakanataro 氏版 busybox を とりあえず xbin/unzip として置いた。
    • VpnService.apk など不要そう システムアプリをアンインストール (/system/app-removed に移動)

  • http://nmj.sumomo.ne.jp/my_cfw/mkcfw-n7b-2.0.zip
  • 下記の mount の問題に対応したスクリプト : mkcfw-2.0a.sh

    ものはこれ。Linux マシンを誰もが持っているわけではないので、今回 実機でも動かせるように作りなおした。そのかわり Linux でやる場合には busybox のインストールが必要になる。

    実機での動作確認はまだなのだが、近い環境ではテストした。たぶん動くはず。

    これを使って、10/29 版の ファームウェアから CFW を作ると osakanataro 氏の nicoWnnG と RootKit が入り、入れ忘れた TurboFly3D も入る。あと heapsize も 40m になる。また、想定外の変更は入らないことも確認した。

    11/08 版に対しても、同じ変更内容の CFW は生成できた。(動作確認はまだ)

    使い方は、(動くのならば) CFW を入れた 実機の方が簡単。

      SDカードに解凍して、そこに オリジナルの system.img を置く
      adb で 解凍したディレクトリ にある スクリプトを実行する。

    これだけで、system-out.img/userdata-out.img というファイルが出来あがる。新しい ファームウェアだと 添付されている boot.img と合わせて ファームウェアを書き込めば OK 。( recovery.cpio.img を取り出し忘れたのだが、古いので代用できる )

    たとえ(CFW の生成が)動かないとしても、所詮はスクリプトなので、多少の知識がある人ならば自分で直せるだろう。

    env というファイルに いくつかの設定があるので、いくつかのパターンで CFW が作れる。これでより多くの人に試してもらって、次の CFW を仕上げたいと思う。興味がある人は是非試して欲しい。

    README も入れておいたので、読んでおいて欲しい。

    追記: ようやく実機で試せたのだが、

    mount: cannot setup loop device: No such file or directory
    cannot mount

    というエラーが出た。これは、/dev/loop0 とかがないため。しかも umount しても自動では 開放してくれないので、次々と loop デバイスを使ってくれる。

    mknod /dev/loop0 b 7 0
    mknod /dev/loop1 b 7 1
    mknod /dev/loop2 b 7 2
    mknod /dev/loop3 b 7 3
    mknod /dev/loop4 b 7 4
    mknod /dev/loop5 b 7 5
    mknod /dev/loop6 b 7 6

    こうやって作らないとダメだった。

    losetup -d /dev/loop0
    losetup -d /dev/loop1
    losetup -d /dev/loop2
    losetup -d /dev/loop3
    losetup -d /dev/loop4
    losetup -d /dev/loop5
    losetup -d /dev/loop6

    終わったら、とりあえずこれやって開放しないとダメ。(busy でエラーになるのが出るかも、でも他のアプリなので気にしない。)

    あと REDME.txt にも書いたが、busybox sh で起動する。

    以上の対策で作れることは確認。で、次 ...

    11/08 版で試したが、一応立ち上がって来た。言語の設定を直したので、端から日本語になっている。(とは言え多言語対応ではなかった。一回 英語にしたら MoreLocale2 のお世話になることに。)
    とりあえず、動かないらしい TurboFly3D を試したが、やっぱりダメ。ただ 強制終了ではなく、突然終了している。メモリは関係なさそう。heap 40m にしても レポートと変わらない感じ。

    カメラの collor effect というのを試したが問題なさそうな気が。

    Superuser はよく分からない。使えるアプリもいまのところ持ってないし。

    とりあえず、対策は必要なものの、実機だけで動くものは作れることは確認できた。

スクリプトについてのメモ

    実行環境

    このスクリプトは、実機 / Linux マシン / qemu-user 環境 の 3 つで動かすことができる。

    ただし、環境の差異は env という設定ファイルで行っている。これについて

    REPLACE_DIR=/system # for self environment
    REPLACE_DIR=`pwd`/../system #
    #BASE_DAT_FILE=$REPLACE_DIR/userdata.img
    BASE_DAT_FILE=`pwd`/userdata-v65-20111111.img

    IN_NIB_FILE=`pwd`/RK43A_60BWFRT_RAMOSV65_20110817_1.bin
    IN_SYS_FILE=`pwd`/system.img
    IN_DAT_FILE= # extract automatically from system.img
    OUT_SYS_FILE=`pwd`/system-out.img
    OUT_DAT_FILE=`pwd`/userdata-out.img

    これは、一番最後に作った V65Pro 用の設定の例

    • REPLACE_DIR

      CFW 11/11 版の system.img を mount または展開したディレクトリ。実機なら /system だが、Linux マシンの場合 は、mkcfw-xx を展開したディレクトリの横に system を 展開していることを想定している。

      CFW では、フォントやら システムアプリやらいろいろコピーしているので、ここからまずコピーする。

    • BASE_DAT_FILE

      CFW の userdata.img の指定。novo7basic 用なら userdata.img をコピーしているので、$REPLACE_DIR/userdata.img で良いのだが、v65pro 用だとコピーしてなかったので、別途指定が必要。

      これ自体がベースで、ベースファームウェアからいくつかのファイルをコピーするような動作になっている。、

    • IN_NIB_FILE

      ベースファームウェアの指定で、A3 / V65Pro 用のみにある。ここから専用のコマンド split_nib を使って system.img を取り出している。

      $IN_NIB_FILE が存在しないと system.img を使おうとする。

    • IN_SYS_FILE

      ベースファームウェアの指定(2) 。

    • IN_DAT_FILE

      これはベースファームウェアの userdata.img の指定なのだが、system.img から取り出すようにしているので、無指定にする。

    • OUT_SYS_FILE, OUT_DAT_FILE

      生成する CFW のファイル名の指定。変更してもかまわない

    • PATH=/system/bin:/system/xbin:$PATH

      上の例に出さないが PATH を変更しているところもある。これは、後述の qemu-user 環境用。他の環境でも効いてしまうが、影響がないことを期待している。

    qemu-user 環境

      これは何かというと ... 実機と同じ ファイル・ツリーを Linux マシンに構築して、それを chroot して動かすという エミュレーションの環境。

    • ファイル・ツリー の構築。

      たぶん CFW の system.img を TOP/system にマウントするだけで良いと思うのだが、boot.img から 取り出した ramdisk を TOP に展開している。

      ramdisk のイメージは、 src に置いた split_bootimg.c を使って 取り出し、

      # zcat boot.img-ramdisk.gz | cpio -id

      で展開。

      その上で、qemu-user-for-x86_64.tgz を展開する

    • chroot

      # chroot /system/bin/busybox sh

      こんな感じで、その環境に入る。

    設定について

    APPLY_TURBO_VM=yes
    APPLY_LARGE_HEAP=no
    APPLY_EXTERNAL_BROWSER=yes
    APPLY_ROOTKIT=yes
    CLEANUP=yes

    これは、最後に作った V65Pro 用の設定。

    • APPLY_TURBO_VM
    • APPLY_LARGE_HEAP
    • APPLY_EXTERNAL_BROWSER
    • APPLY_ROOTKIT
    • CLEANUP


mkcfw-a3-2.1.zip のテスト (Ronzi A3)

  • 2011/11/11 版 の CFW をインストール
  • SDCARD に mkcfw を展開
  • そこに、zImage_rz_60_a3_20110511.bin と userdata-a3-20111111.img をコピー
  • system-init.img.gz を 11/11 版 を作ったときのものに差し替え

    別途作った CFW が動かなかったので、入れ替えてみた。が、どうも関係なさそう。

  • env の REPLACE_DIR 書き換え
  • mkcfw に cd して busybox sh mkcfw.sh で実行
    実行結果:

      # busybox sh mkcfw.sh
      busybox sh mkcfw.sh
      ========= modes
      SELF=yes (ARCH=mips)
      APPLY_TURBO_VM=yes
      APPLY_LARGE_HEAP=no
      APPLY_EXTERNAL_BROWSER=yes
      APPLY_ROOTKIT=yes
      ========= files testing and mounting
      REPLACE_DIR=/systemis OK
      BASE_DAT_FILE=/mnt/sdcard1/mkcfw-a3-2.1/userdata-a3-20111111.img-- existant
      Original Firmware : /mnt/sdcard1/mkcfw-a3-2.1/zImage_rz_60_a3_20110511.bin-- extracting
      writing mbr-xboot.bin 842 KBytes
      writing boot.img 2678 KBytes
      writing recovery.img 2984 KBytes
      writing system.img 210905 KBytes
      writing userdata.img 67312 KBytes
      writing cache.bin 30724 KBytes
      writing vfat.bin 8 KBytes
      ro.build.version.incremental=eng.android.20110503.162254
      using large system.img -- mount OK -- copying -- done
      ===== building /mnt/sdcard1/mkcfw-a3-2.1/userdata-out.img
      replacing out/lib/mips/*.so
      removing nicoWnnG
      appending nicoWnnG-2011.1115.1-mips.apk
      == appling rootkit (apps)
      copying rootcheck
      copying rootexplorer
      == done rootkit
      filling zero
      == done userdata
      ===== building /mnt/sdcard1/mkcfw-a3-2.1/system-out.img
      changing build.prop
      #ro.sf.lcd_density=240
      dalvik.vm.heapsize=24m
      copying framework and some libs
      removing PinyinIME
      removing Provision
      removing Phone
      removing VpnServices
      replacing AppWidgetPicker
      replacing Gmail
      replacing GoogleBackupTransport
      replacing GoogleCalendarSyncAdapter
      replacing GoogleContactsSyncAdapter
      replacing GoogleFeedback
      replacing GooglePartnerSetup
      replacing Maps
      replacing MarketUpdater
      replacing NetworkLocation
      replacing OneTimeInitializer
      replacing QuickSearchBox
      replacing Talk
      replacing YouTube
      replacing kickback
      replacing soundback
      replacing GoogleServicesFramework
      replacing Vending
      replacing IngenicScreenCalibration
      replacing Launcher2
      replacing SeeJoPlayer
      replacing Browser
      replacing HTMLViewer
      replacing LatinIME
      replacing SpareParts
      replacing DroidSansJapanese.ttf
      == appling turbo vm
      copying libdvm.so-turbo
      replacing libdvm.so
      == done turbo vm
      copying new userdata.img
      == appling rootkit
      copying su
      copying Superuser.apk
      == done rootkit
      filling zero
      done
      #

    動作確認:

    • Superuser.apk

       Root Check
       - Superuser 2.3.6.3 -- OK
       - /system/bin/su がない が OK
       - user/group 0.0 の確認 OK
       - busybox v1.15.2 -- OK

       Root Explorer
       - /system の remount できず。(n7b は何故か最初から rw)

       Screen Shot It
       - rootの権限は許可したが 、動かない。
        rootの権限がないと言われる。


mkcfw-v65-2.1.zip のテスト (Ramos V65pro)

  • V65Pro は、adb が動かないみたいなので、Ronzi A3 で代用

  • SDCARD に mkcfw を展開
  • そこに、RK43A_60BWFRT_RAMOSV65_20110817_1.bin と system-v65-20111111.img,userdata-v65-20111111.img をコピー
  • SDCARD に system ディレクトリを作成し system-v65-20111111.img を mount 。

    mknod /dev/loop0 b 7 0
    mknod /dev/loop1 b 7 1
    mknod /dev/loop2 b 7 2
    mknod /dev/loop3 b 7 3
    mknod /dev/loop4 b 7 4
    mknod /dev/loop5 b 7 5
    mknod /dev/loop6 b 7 6
    mount -t ext4 -o loop mkcfw-v65-2.1/system-v65-20111111.img system

  • env の REPLACE_DIR は無変更
  • mkcfw に cd して busybox sh mkcfw.sh で実行
  • 終わったら umount /mnt/sdcard1/system を必ずする。
    動作確認:

    • Superuser.apk

       Root Check
       - Superuser 2.3.6.3
       - /system/bin/su がない -- NG?
       - busybox v1.15.2 -- OK
       -

      -rwsr-sr-x root root 25976 2011-11-23 23:45 su
      -rwsr-sr-x root root 113920 2011-08-09 13:29 su-bak

      Ronzi A3 と同じにしているのに、何故動作が違うのだろう?
      あと adb が動かないのも不便。なんとかしたいものだが ...

       Root Explorer
       -

       Screen Shot It
       -

    • Media Player

      実は、ライブラリとか 2組み入っている。jz4760b と jz4760 の 2 つのディレクトリがあるものは、jz4760 を削除。system/lib の libomx*.so と libopencore* は、jz4760b にもあるので削除。
      こうやって inode 数を稼いでいる。

      で、動作確認してみたら 予想どおり動いた。


以下設計メモ(初期)

スクリプトを書くにしても、どういうコマンドがどういうオプションで使えるかについては、Android 実機 の環境はけっこうクセがある。busybox 自体、標準的とは言えないし、Android の toolbox はさらに簡略化されている。

ls など 両方にあるものもあり、busybox ls としなければ困る場合もある。

さらに、この CFW ではスクリプトを書きやすいように busybox からのリンクを作っている。

というわけで コマンドなどについて整理が必要。

あと、もともと この CFW は Linux 上のスクリプトで作っているが、busybox にもないものがある。また、付け足しなどしていて、けっこうひどくなっている。再設計しないと まずいことになりそうだ。

まずは、どうやって作っているかについて整理しよう。

  • system.img

    もともとは、

    # dd if=/dev/zero of=system-out.img bs=1024k count=256
    # losetup /dev/loop6 system-out.img
    # mkfs.ext4 -N 1024 -b 1024 /dev/loop6
    # losetup -d /dev/loop6


    こんな感じで手動で作ったのだった。

    で、出来たものを

    custom_files/system-init.img.gz 

    gzip で圧縮しておいて、

    # gzip -d < custom_files/system-init.img.gz > system-out.img
    # mount system-out.img out_sys -o loop
    # tar -C n7b_sys -cf - . | \
    # tar -C out_sys -xpf -

    こんな風にしていたのだった。

    ここで最初の問題

    • busybox tar を使わないといけないにしても -p オプションがない。
    • cpio に変えるか。-- cpio はリンクしているからそのまま使える。にしても -p 相当をちゃんとやってくれるのか? 要確認
    • mount も 2 つある。これは、使われているという点で、toolbox の方が良いかも。

      # mount -o loop -t ext4 system-out.img out_sys

      mount もこんな風にしなければならないし、カレントディレクトリ で問題ないか要チェック。

  • userdata.img
    実をいうと、userdata.img は、V65Pro の userdata.img を持ってきて、中味を全部 delete して使っている。

    やはり、とりあえず全コピー。これで 準備しておいて、次の段階に移る。

      今回はどうするか ... というと サイズが大きくなった userdata.img が /system にあるので、それを使う。とにかく mkfs できないのだ。... となると、どこからか取ってこないといけない。

    こうやって、元の system.img / userdata.img と system-out.img / userdata-out.img の 4 つを mount する。

  • userdata-out.img の作成

    まずは、app 以下を全部削除。AngryBirds をシステムからコピーして、

      custom_files/lib/local.prop

    を -p オプション付きで コピー。cp は busybox の cp がリンクされている。

    次に osakanataro 氏の /data.data を tar ファイルで 持っていたものを解凍

    さて、今回はどうするか。userdata.img をコピーし、削除しないなら ファイルは残っている。新たに外から持ち込むこともできるし、動いているマシンのデータを取り出すこともできる。... いったいどれが良いのか?

    次、コピーすべきアプリは、custom_files/app に置いておいたものをコピーしている。
    これも もともと あるものだ。

    ... 結局 コピーした userdata.img をまず使い、それをモディファイしていく やりかたの方が良さそう。

    あと、turbofly3d は、オリジナルの userdata.img にあるはずだから 忘れずにコピーしないと。

  • system-out.img

    ちょっと端折る。

    • 基本は、custom_files/sys_app にあるものを app にコピー。
    • その上で tar ファイルで持っている 10/24 版の システム アプリを解凍
    • あと、いくつかの app の ファイルを削除
    • custom_files/lib/libdvm.so を -p 付きでコピー
    • custom_files/fonts にあるファイルを fonts にコピー
    • custom_files/sys_patch/*.patch を patch コマンドで当てる。
    • xbin/ に busybox へのリンクを作成

      BUSYBOX_LINKS="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"

    今回はすでに /system/app などに入っている。そのかわり何をコピーするのかの リストを作らないといけない。

    パッチは、元ファイルがない。これは外から持ち込まないと。

  • 最後に dd コマンドを使って、/dev/zero から フルになるまで書き、削除。

    これは、圧縮が効くようにするため。

以下ただのメモ

    環境変数

    /init.rc で設定されているもの

    init.rc: export PATH /sbin:/system/sbin:/system/bin:/system/xbin
    init.rc: export ANDROID_ROOT /system
    init.rc: export ANDROID_ASSETS /system/app
    init.rc: export ANDROID_DATA /data
    init.rc: export EXTERNAL_STORAGE /mnt/flash
    init.rc: export EXTERNAL_FLASH_STORAGE /mnt/sdcard
    init.rc: export EXTERNAL_UDISK_STORAGE /mnt/udisk

    mount の仕方
    init.rc: mount tmpfs tmpfs /mnt/asec mode=0755,gid=1000
    init.rc: mount rootfs rootfs / ro remount
    init.rc: mount tmpfs none /mnt/tmpfs nosuid nodev size=1m
    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: mount ext4 /dev/block/mmcblk0p3 /cache nosuid nodev

    mount の仕方2
    disk_preparing.sh:/system/bin/mount -t ext4 /dev/block/mmcblk0p2 /data
    disk_preparing.sh:/system/bin/mount -o loop -t ext4 /system/userdata.img /sdcard
    disk_preparing.sh:/system/bin/umount /data
    disk_preparing.sh:/system/bin/umount /sdcard

    Options:
    -a Same as -dpR
    -d,-P Preserve links
    -H,-L Dereference all symlinks (default)
    -p Preserve file attributes if possible
    -f Force overwrite
    -i Prompt before overwrite
    -R,-r Recurse directories
    -l,-s Create (sym)links

    # tar
    BusyBox v1.15.2 (2009-10-22 17:27:43 CST) multi-call binary

    Usage: tar -[czjaZxtvO] [-X FILE] [-f TARFILE] [-C DIR] [FILE(s)]...

    Create, extract, or list files from a tar file

    Options:
    c Create
    x Extract
    t List
    Archive format selection:
    z Filter the archive through gzip
    j Filter the archive through bzip2
    a Filter the archive through lzma
    Z Filter the archive through compress
    File selection:
    f Name of TARFILE or "-" for stdin
    O Extract to stdout
    exclude File to exclude
    X File with names to exclude
    C Change to directory DIR before operation
    v Verbose

    dirname `pwd`
    basename `pwd`
    # chown root.root boot.img
    # chown 1000.1000 boot.img

    # rm
    rm [-rR]
    # type rm
    rm is a tracked alias for /system/bin/rm
    # busybox rm
    BusyBox v1.15.2 (2009-10-22 17:27:43 CST) multi-call binary

    Usage: rm [OPTIONS] FILE...

    Remove (unlink) the FILE(s). Use '--' to
    indicate that all following arguments are non-options.

    Options:
    -i Always prompt before removing
    -f Never prompt
    -r,-R Remove directories recursively

    #
    # cpio
    BusyBox v1.15.2 (2009-10-22 17:27:43 CST) multi-call binary

    Usage: cpio -[tiopdmvu] [-F FILE] [-H newc]

    Extract or list files from a cpio archive, or create a cpio archive
    Main operation mode:
    -t List
    -i Extract
    -o Create
    -p Passthrough
    Options:
    -d Make leading directories
    -m Preserve mtime
    -v Verbose
    -u Overwrite
    -F Input file
    -H Define format

    mount -r -o loop -t ext4 /system/userdata.img /mnt/out_dat
posted by すz at 20:54| Comment(16) | TrackBack(0) | android

2011年11月12日

Novo7 basic 用カスタムファームウェア

Novo7 basic を買ってしまったが使えなくて困っている人は結構いるようだ。私は MIPS CPU (の Jz4770) に 頑張ってもらいたいと思っているので、あんまり『使えないというイメージ』が定着するのも困る。そこで、そういう人向けに、カスタムファームウェア(CFW) を作って提供しようかと思う。ただし、お約束ではあるが、無保証だ。ショップの保証も効かないおそれもあるし、実際に適用するなら自己責任で。

といっても、とりあえずのもの 。最低限度 できないと困るような 機能だけはなんとかしたつもりのもので、まともなファームウェアが出てくるまでのつなぎと考えてほしい。

あと、困るということは、初心者ということになるが、ほんとうの初心者向けの説明をするのはしんどい。 最低でも 自分で Android 3.2 をインストールできる人を対象にするので悪しからず。

注意! この記事は、最初に発売された 4GB の novo7 basic のための記事です。Android のバージョンも 2.2 と古いです。


    2012/1/1 追記:

    赤札天国の 『ファームウェア提供場所 』に Novo7 basic 用の 4.0 公式ファームウェアが来ている。古い CFW はもはやお薦めしない。

    さらに追記: 上記は、2011/12/21 版なのだが、実際に入れてみたら、USB経由でファイルをコピーするとハングアップする。残念なことに、日本語対応もしていない。2.2 の CFW で困っていなければ、アップデートは待ったほうが良いだろう。ちなみに、paladin でこの CFW は使えない(はず)。インストールしないこと。

さて、作った CFW はどういうものかというと ..

  • Android 2.2 2011/11/08 版がベース
  • 日本語関係やら Gmail,Market などのカスタマイズは、osakanataro 氏『ronzi A3カスタムfirmware 20111024版』をベースにする。(一部 10/18 版に戻した)
  • 自分の好みの アプリケーションをプリインストール

ぶっちゃけ、osakanataro 氏の成果を つっこんだもの。一応 Gmail や マーケットが使えることは確認した。ただ、こまかい調整はしていないので、少々具合が悪いところが出てくるかも知れない。

前置きはこれぐらいにして、ものは、ここに置いた。

同じようなファイルが 3 種類あるが、a3 は Ronzi A3 用 , v65 は V65Pro用 。Novo7 basic 用は n7b 。 実は Ronzi A3/V65Pro用 も合わせて作ったのだが、この記事は Novo7 basic をメインに説明する。

  • n7bcfw-20111120.zip は、Android 2.2 2011/11/08 版ベース ( 208MB )
  • n7bcfw-20111111.zip は、Android 2.2 2011/10/29 版ベース

ファームウェアの書き込みツールも 合わせておいておいた。xx_burn_tool.zip がそれ。a3 と n7b の 2 種類があるが、実はほぼ同じもの。デフォルトの設定だけが違う。よく分からなければ、n7b_burn_tool.zip を使った方が無難。(a3 は、Ronzi A3/V65Pro 用設定)

ファームウェアを解凍するとファイルが7つ出てくるので、書き込みツールで これらのファイルを指定する。

    このツールは、USBboot という CPU に組み込まれた機能を使って ファームウェアを書き込む。だから Flash 上のすべてのデータが壊れても書き換えられるのだ。無保証ではあるが、何度でもやりなおせるので、文鎮になるリスクは小さい。(というより、ハード的に壊れない限り文鎮にはならない) ... とは言え、元に戻すべきファームウェアがあってこそ安心してインストールできるわけだ。ちゃんとしたファームウェアの入手を薦める。

    Novo7 basic だと 音量− ボタンを押しながらリセットすると このモードになる。

    USB をつなぐと ドライバを要求されるので、ツールの ディレクトリ drivers/4770 を指定してドライバをインストールする。

    次に一旦 USB を外し、USBbootTool.exe を起動して、ファイルの指定を行う。7 つのファイルがあるので、全部指定してチェックマークを付ける。

    再度、USBboot モードにして USB をつなぐと ... 画面が進行して、ファームウェアが書き換わる。終了すると "ウケノヲ" という文字化けした文字列が出て、再度オペレーションできる状態になる。

    ここで、USB はいったんはずして、あと立ち上がってくるのを待つ。(10分以内で立ち上がる)

初期設定

あまり詳しく書くつもりはないが、面食らうかも知れないので、ポイントだけは説明しておく。

  • MENU を押すと、いきなりランチャーの選択が表示される。ひとつは、Zeam Launcher 、もうひとつは、中国語。

    中国語のやつは、オリジナルの Home 。別にこれを選んでもよいが、Zeam Launcher を選びたくなるだろう。

  • Zeam Launcher を選ぶ場合、黒い帯のところの 田のマークを押すと アプリケーション一覧が出る。

    最初にやるべきことは、MoreLocale2 での 日本語 設定。(11/20 版では不要)

  • 探すと "区域" というアイコンがあるので、これを押して 日本を選ぶ。

    このまま作業を続けても良いが、一部中国語のままなので、一回リブートした方が良い。

  • 日本語入力は nicoWnnG を使う (MIPSなので、いまのところこれしかない)

    about nicoWnnG のアイコンを選んで、実行すると 簡易な設定ができる。

  • 設定したら、最後に Setting → Languages & Keyboards で nicoWnnG を有効にする。

    あと、入力するところで、長押しすれば nicoWnnG が選べるようになる。

  • 画面の回転を行う場合、Zeam Launcher の設定が必要。

    General から Sensor rotation にチェックする。

    Ronzi A3 / V65Pro は Gセンサが ないが、RotatingScreen で縦画面にできるようになる。
    Novo 7 では、RotatingScreen を使うことはないだろう。アンインストールしても問題ない。

  • 設定 : HDMI 出力

    デフォルトで HDMI 出力が ON になっている。使わないなら Off にしておいた方が良さそう。

  • 設定 : タッチフィードバック

    Spare Parts (歯車のアイコン)で、タッチフィードバックを Off にできる。

    あと全体的なフォントサイズも。これは、特に Ronzi A3 / V65Pro で有用。

  • ファイラー

    いれているファイラーは、ASTRO というもの。ファイラーの機能以外に、アプリの管理ができる。不要なアプリがあれば、これでアンインストールすれば良い。

    インストールは、ファイラー の機能で可能。インストール前のファイルでも アプリのアイコンを表示してくれるので便利かも。

    トップ (横画面ではサイド) に出てくる アイコンは スライドできる。見えているもの以外の機能があるので、要チェック。

  • Turbo Fly 3D

    もともと Novo7 basic に入っていたものだが、入れ忘れた。どうしても使いたい場合は、バックアップをとっておくか、Android 2.2 2011/10/29 版ファームウェアから取り出してほしい。
    (念を押しておくが Flash の vfat 領域にバックアップしても意味がない。インストールするときに初期化される)

    update.zip を解凍すると、system.img が入っている。これを Linux-Reader で開くと userdata.img が取り出せる。取り出した userdata,img を開くと app ディレクトリに入っている(はず)。

カスタマイズの詳細

    スクリプトを使って組んでいるので、どのように変更したかは正確に説明できる。ただとても面倒なので、後で。(後記)

    とりあえず入れたアプリの一覧

    • ファイラー ASTRO_3.0_218.apk (n7b から)
    • 動画 MediaPlayer.apk (n7b のみ) / SeeJoPlayer (v65 から v65/a3 へ)
    • 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 から)
    • 小物ツール RotatingScreen.apk , myVolume.apk , QuickRotationChange.apk

    • MoreLocale2 (n7b のみ)
    • ベンチマーク AnTuTu bench (マーケットから: 入れ忘れ)
    • マーケットなどのシステムアプリ (osakana 氏 20111024 版 と 10/18 版から)
    • Flash Player 10.1 (n7b から)
    • Dalvik Turbo VM (osakana 氏 20111024 版から)

    A3/V65Pro , Novo7 basic でだいたい同じになるようにした。Zeam Launcher を使っているのは、使いやすいのもあるが、A3/V65Pro で RotatingScreen と併用して縦画面にするため。統一する都合で Novo7 basic にも入れている。不要なら アンインストールすればよい。

    AnTuTu bench は完全に趣味。アンインストールして構わない。 入れ忘れた

    アプリはだいたいこんな感じだが、ほかにも少々手を入れた。

    system/app の変更詳細:

    最も重要な点だろう。これ と Dalvik Turbo VM 以外は、便宜を図るような変更だし。

    だが、困ったことに良く分かっていないので、osakanataro 氏の Ronzi A3 と同じにする方針にした。ファイル名が変わっているものがいくつかあるので、削除した上で 上書きコピー。

      削除:
      GoMarket_Ingenic_N802_VER_2_1_2.apk

      ronzi A3カスタムfirmware 20111024版 からコピー:

      AppWidgetPicker.apk
      Browser.apk (置き換え)
      Gmail.apk (MyGmail.apk 置き換え)
      GoogleBackupTransport.apk
      GoogleCalendarSyncAdapter.apk
      GoogleContactsSyncAdapter.apk
      GoogleFeedback.apk
      GooglePartnerSetup.apk
      GoogleServicesFramework.apk (置き換え)
      HTMLViewer.apk (置き換え)
      LatinIME.apk (置き換え)
      Maps.apk (MyMaps.apk 置き換え)
      MarketUpdater.apk
      NetworkLocation.apk (置き換え)
      OneTimeInitializer.apk
      QuickSearchBox.apk
      SpareParts.apk (置き換え)
      Talk.apk (MyTalk.apk 置き換え)
      Vending.apk (置き換え)
      YouTube.apk
      kickback.apk
      soundback.apk

      ronzi A3カスタムfirmware 20111024版 からコピー:

      Vending.apk (置き換え)
      YouTube.apk

      osakanataro 氏 の変更内容と合わせたので、こうなっている。余計なものまで置き換えてしまった可能性あり。

      このうち Vending.apk, YouTube.apk は、osakanataro 氏 CFW 10/18 版 と 10/24 版 でも違う。
      確かわざわざ古いものにしたとか ...

      追記: 11/20 版は、10/18 版にしてみた。

        - Android Market 3.1.3
        - Google Maps 5.9.0
        - Google Books 1.1.4
        - Google Talk 1.3
        - OI File Manager 1.16
        - Spare Parts 2.3.5
        - YouTube 2.0.26

      置き換えたもののバージョンは以上のようになっているとのこと。

      これら apk の大本は、『[GUIDE] Cruz T10x / T301: Rooting, Dalvik Turbo, Removing Bloatware, Gapps & Market & More』とのこと。

      注意: Youtube など Web 上の動画が見れないというレポートあり。

      • Browser.apk を置き換えたのが失敗?
      • あるいは YouTube.apk を新しいものにしたほうが良いのかも?

      オリジナルでも Youtube は見れないとのこと。この CFW は、オリジナルの機能を改善するわけではないので、見れないのもやむなしか?

      追記: 11/20 版はどうだろう?

      注意2: カメラで写真を撮ろうとしてカラー設定の選択で強制終了

      ただの強制終了ならまだ良いが その後 起動不可能になったとのこと。
      再インストールで初期状態にはできるが、データは失われる。要注意だし、重要なデータのバックアップは、忘れないように。

      追記: 11/20 版は直ったような?

      注意3 : Fruit Slice などが、すぐ終了してしまう。

      追記: Dalvik Turbo VM を使っていたのが原因らしい。11/20 版は直った。


    system.img ファイルシステム作成とか

      system.img は inode 数がギリギリなので、新規ファイルはあまり作れない。そのため、system.img を作り直している。サイズも 256MB まで拡大した。

      ファイルが多数作れるようになったので、busybox へのリンクを作っている。

        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

      これらのコマンドは adb で busybox xx と入力しなくても動作するようになったはず(ただし 未確認)。

      あと userdata.img もギリギリのサイズなので、大きくしている。大きくできたことで、 system.img に入っている AngryBirds を userdata.img に移動している。

      usr/flash/flash_player10_1.apk も userdata.img に移動したかったが、エラーになると面倒なのでパス。ちなみに flash_player は、ここからインストールされるが、普通のアプリと同じ扱いでアンインストールも可能。

      system.img の中に userdata.img を入れたので サイズが大きくなっている。空きスペースが 必要なら 削除しても問題ない。

xx_burn_tool.zip について

    もともと Android 3.2 用の書き込みツールとして入手したもの。変更などなにもしていない。
    ただ、一回書き込むと、選択したファイルや設定がデフォルトになるので、xx 用として 置いている。

    これを調べたのだが、Ronzi A3/V65Pro 用の設定も入っていた。(動作確認済み)

    Novo7 basic は、CPU Jz4770 / ボード設定 4770_default.ini を選択するのだが、CPU Jz4760(B) / ボード設定 4760(B)_default.ini にすると Ronzi A3/V65Pro に書き込める。(もちろん選択するファイルは別)

    ただ、CPU を間違えるとまずいので、別のバイナリとしておくことにした。

Tasselhof-RootScript

実を言うと Root化って何?状態なのだが、有名らしい Tasselhof-RootScrip を見てみた。

    1. Check Tablet Connection
    2. Verify Tablet is ROOT Capable (with this script)
    3. Run ROOT Script

    ***** ADDITIONAL OPTIONS - (ROOT REQUIRED) *****
    4. Upgrade Android Market App
    5. Disable Services to Increase Battery Life
    - Phone, 3G, Bluetooth, Provision, VPN
    6. Re-Enable All Services
    7. Enable Only 3G Services
    8. Enable Only Bluetooth Service
    9. Enable Only VPN Services
    10. Quit

    以上がメニューに出るのだが、3 は、このマシンで実行してはいけない。ARMのバイナリ の su で 元の su を置き換えてしまう。

    busybox も インストールしようとする。(これも ARM のバイナリ)

    4 は、この CFW を使うなら 不要。5 -9 は省電力に役に立ちそうな気もするが、デバイスがないなら関係ないのかも。

    とはいえ、有用そうな ものは入っているし、これを元に CFW にパッチするようなものを作ることはできそうだ。

    5-9 について

      これは、system/app の apk を rename して使わないようにしたり 元に戻したりするもの。
      rename のルールは、!OLD%s.old 。%s は apk を含む元のファイル名。

      3g:
      Mms.apk
      Provision.apk
      TelephonyProvider.apk
      NetworkMonitor.apk
      Network3gMonitor.apk
      shortcut3g.apk
      Phone.apk
      bluetooth:
      Bluetooth.apk
      vpn:
      VpnServices.apk

    Root 化とは何?

      com.joeykrim.rootcheck.apk
      com.speedsoftware.rootexplorer.apk
      stericson.busybox.apk

      Superuser.apk (system/app)

      ARM バイナリの su を置き換えると書いたが、それ以外に以上の apk が含まれている。

      busybox は、不要だが、他のものは どういう機能なのだろう?

      osakanataro 氏のコメントより

      • com.speedsoftware.rootexplorer.apk
        通常read onlyでmountされている/systemパーテーションをread/writeでマウントしなおしてファイル操作を行うremount機能付きのファイラー

      • Superuser.apk + Superuser.apk専用suバイナリ
        Superuser.apk + Superuser.apk専用suバイナリ、というのは単純に「su」だけだと、ログも残さず、ユーザへの通知もされないので、suバイナリを実行するとsuperuser.apkに通知が送られ
        superuser.apkがユーザ向けのGUIを出して、そのsu実行に対してroot権限を与えるかどうかを選択させることができるといったもの。

      なるほど、そういうものですか。通信の方法が分からないと、互換性のある MIPS 版 su は作るのは難しそう。

      あと次のコメントも

      • 開発向けじゃない一般的なARM Android端末というのは基本的にadb接続すると、一般ユーザとしてログインする現状のjz47x0 Androidは、rootユーザでログインされている。

        この違いは ro.secureの値。
        /default.prop内のro.secure=0だとadbdがrootユーザで起動する。このため、adbで接続するとrootユーザになる。

      ... というわけで adb を使うオペレーションでは root 化は不要。ただ、root の権限で動作する rootexplorer のようなアプリは一体どうするのだろう?

      これにもコメントで回答が...

        これは、本来はユーザがGUI操作でroot権限を必要とする状況、というのはありえない、ということになってるからです。
        なので、標準で入っているsuはGUIからだとroot権限が取れない感じです。

        で、rootcheckもrootexplorerも、superuser.apk+専用suバイナリを想定しているようです。
        具体的にはcom.noshufou.android.suのパッケージがあるか、とか/system/bin/suか/system/xbin/suが存在しているか、とかをチェックしているようです。

        Superuser.apk+suバイナリは以下にソースあり
        https://github.com/ChainsDD

        MIPS用suバイナリを以下においてあります。
        http://blog.osakana.net/sw/superuser/su.zip
        /system/bin/su に置いて「chmod 6755 /system/bin/su」で権限をつければokです。
        (/system/xbin/su は別のファイル名にしました)

      あ、ソースがあったのですか。バイナリまで作っていただきました。やはり osakanataro 氏が参加されると心づよい。

      さて、これは標準に入れるべきか? root 取った状態で 売られている Android タブレット もありますが ... 入れたい人も入れたくない人もいそう。

      まぁスクリプトでリリースするなら、どちらも選べるようにできるか。

    (メモ: 元の su の動作)

      # ls -l /system/bin/su

      lrwxrwxrwx root shell 2011-10-29 05:08 su -> ../xbin/su
      # ls -l /system/xbin/su

      -rwsr-sr-x root root 109856 2011-10-29 05:08 su

      # su 1000.1000

      $ id

      uid=1000(system) gid=1000(system)
      $

    NOVO-7-Advanced-ROOT-Guide ... これは何だろう?

追記: レポートについてのお願い

    問題についてのレポートは歓迎です。なにも情報を出さないより レポートを出してもらった方が 役に立つと思います。

    ですが、次のステップとして、できましたら次のことについて気にかけてください。

    再現性:

      システムのメモリ不足という可能性や、他に動かしていたものが関係して問題を起こしている場合があります。

      再立ち上げを行い、Advanced Task Killer で ほぼ全部のアプリを kill してから動かしても同じ問題になるかどうか?

      再現性があれば、他の人と 問題を共有できるので、問題が解決しやすくなります。

      再現性アリと書いたら上記の状態で試したことを意味することにしましょう。試さなかったとしても問題はないですが、そのことを 情報として是非載せてください。

      あと、再現性がなくとも、問題がなかったということにはなりません。なにか気をつけることで問題を回避できるなら、それは有用な情報です。

    CFW の問題かそうでないか:

      オリジナルの ファームウェア で出来ていたのに 出来なくなった となれば、どういう問題か絞りやすくなります。以前は動かしていないので分からないという場合でも、それ自体が情報になります。聞き直すことになったりするので、是非。

    heap 不足:

      メモリ不足 にも 2 種類あります。/system/build.prop に
       dalvik.vm.heapsize=24m
      という記述が あるのですが、24m では足りないのでは? という気もしています。
      3.2 では、40m になっているそうなので、もし出来るなら 40m に変更してみて欲しいです。変更して起きた問題なら、40m にしたことを併記しておいてください。

      adb を使った 編集の例は ひとつ前の記事に載せています。無理ならやむを得ませんが、出来る人が 追試してくれるかも知れません。

    他にもあると思います。追記していきますので、気がついたことがあればコメントに書いてください。

今後について

    CFW を 1 つは出しましたが、既に 11/8 版というのがあるそうです。で、2.2系 公式がその後に控えています。公式が出た後は、3.2 系列 4.0 系列 となっていくそうです。

    これの面倒を見るというのは正直きついです。それだけでなく、巨大なファイルをアップロード/ダウンロード するのも 私も皆さんもきついんではないかと思います。

    それで、考えたのですが、 この CFW が動いているマシンで、ベースとなるファームウェアを元に CFW を作るスクリプト を 提供するのが良いのではないか?

    そうすると、ベースとなるファームウェアを元に(いろんな人が)いろいろ試すことが出来ますし、追加すべきアプリも このファームウェアに入っているわけで、ファイルの量を 相当小さくできます。

    adb を実行する環境が必須になりますが、必要なのはこれだけです。上記の Tasselhof-RootScript のなかに adb.exe と 必要な DLL は入っています。あと ドライバを入手すれば、sdk をダウンロードしなくとも adb は使えるようになるはず。まぁ これでOK というものが出来上がれば、私か他の誰かがアップロードするのは良いと思いますが ... それは出来ての話。

    この方向で検討しようと思っています。気になるのは loopback デバイスがいくつ使えるか。できたら 4 つ 使いたいですが ... loopback で mount したりするアプリケーションがあったりするみたいなので、不安だったりします。

    あとは、いろいろな問題についての 管理。問題があるということを この記事のコメントとして書いてくれれば良いですが、いずれ ちゃんと整理しないと 分からなくなるような ...

    それも 状況次第だと思います。他に CFW 出してくれる人が出るかも知れないし、その結果 必要なくなるかも知れない。 ... もし コメントが 100 超えるような事態になったら 考えましょう。
posted by すz at 00:49| Comment(29) | TrackBack(0) | android

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年11月05日

開発環境の整備(2)

前記事ではグダグダになってしまったので、一回整理。

開発環境の整備とかいうタイトルにしてしまったが、Android とはほぼ関係ない。では、なにをやろうとしているかといえば ... Redhat Enterprise Linux 6 (RHEL6) の mipsel 版 clone を作ること。ただし、ブート可能なのはとりあえず目標としていない。まずは、RPM をビルドできる環境として root を 展開して chroot するものを目指す。

    何故 他のものではなく、fedora でもなく RHEL なのか? ... というと基本的に RPM を使っているシステムが好きなのだ。で、fedora はでかいし更新が頻繁で、作っているうちに時代遅れになってしまうのが嫌なのだ。RHEL は更新の頻度は低め だし、6 ならしばらく使えそうだ。あと、断っておくが全部をビルドするつもりはない。目指すのはあくまでビルド環境として成り立つ最低限度のもの。

どこまで出来るかは分からないのだが、やってみている。現状は、 RHEL6(clone) の chroot 環境 に qemu-mipsel を入れて セルフだか クロスだかよく分からないような 環境になっている。その環境で、 343 個の rpm をビルドした。最終的に 1000 個ぐらい必要なので、1/3 ぐらいの達成度。

ビルドするにあたっての基本方針

  • 64bit(x86_64) ではもともと i386 環境と共存できるようになっていて、 /lib , /usr/lib は 32bit 環境用に空けてある。

    i386 の代わりに mipsel を突っ込む というのが基本的なアイディア。その環境で qemu の usermode というのを使って mipsel のバイナリを動かす。rpm コマンドとかビルドするのが難しいものは、 x86_64 を使って 親の 環境を流用する。

  • 準備 src.rpm から ビルドして x86_64 の野良クローンを作る。

    この方針だと x86_64 と mipsel が同じバージョンでないと困る。多少のバージョンが違ってもなんとかなるが、まったく同じものをベースにして置き換えていくのがベストなのだ。

    まずは、ベースとなる環境を作ってみることから始める。これも出来ないのでは、mipsel 版なぞ無理な話なわけで、mipsel 版の ビルドの 予行演習でもある。

    また、どこまで作るのか ... 全てを作っていては とても巨大になる。どれを ビルドするのかを見極めることも 同時に行う。

    最低限度必要なのは、自分自身をビルドできるもの 。gnome など当面必要なさそうなものは、はずす。

    この作業は クリアした。まぁ適当なものだが、

    に置いておく。mindev10bin2.iso と mindev10src5.iso だが、どちらも 2GB 弱もある。bin の方は、すべての RPM と rootfs の tarball -- mindev10.tgz が入っている。

    root になるディレクトリを作って そこに root 権限で

    # tar -zxvpf mindev10.tgz

    とする。(いきなり usr とかになっているので 注意)。あとは、chroot して、

    # mount /sys
    # mount /proc

    とすれば、だいたい使える。これ自体 (java 系を除く) すべての x86_64 RPM をビルドできる環境になっている。

      ただし、i686 パッケージが入っている。これは mipsel の環境を作るには邪魔なので、アンインストールしておく。

    ちなみに src の iso はすべての SRPM と minroot.tgz 。

    minroot.tgz は、boot 可能な(はずの)最小の環境。これには rpm コマンドが入っているので、ここから RPM をインストールしていくことができる。

    この root イメージに chroot する親OS のディストリビューションは、あまり関係ない。Linux のバージョンの方が重要だが、2.6.24 以降なら問題ないはず。

    さて、これら以外に mipsel-devkit1-wk0.tar というファイルがあるが、mipsel 版について、いままでの成果をつっこんだもの。ただしまとまってはいない。

mipsel 開発環境

まずは、なにをするのか ... というと qemu のビルド。qemu といっても QEMU user-mode というもので、linux のカーネル機能 binfmt_misc とあわせることで、mipsel などのバイナリを native のように動かせるもの。

    mipsel-devkit1 に qemu-bin.tgz に最低限必要なバイナリを入れてある。

      startup.sh
      usr/bin/qemu-arm
      usr/bin/qemu-mipsel
      usr/bin/qemu-ppc

    mipsel 以外に arm とか ppc も入れてみた。.... mipsel が移植できるなら arm や ppc も同じやりかたでできるはずなのだ。mipsel がうまくいくようなら、これらもやってみるかも知れない。

    このバイナリを作った SRPM も SRPMS-cross に入れてある。

クロス版 binutils , gcc , glibc

最初に必要になるのは、この 3 つ ... なのだが すでに 擬似セルフ環境に移行しているので、あまり重要ではなくなっている。だが、arm などの移殖のために、どうやって作っていったのかをメモしておく。それに GPL はソースだけでなく、どうやって作ったかの情報をも要求している。説明可能になってないと厳密にはまずい。

    まずは、binutils 。これは、オリジナルの SRPM が、クロス用を作れるようになっている。

      rpmbuild --without testsuite --define "binutils_target mipsel-redhat-linux"
      --rebuild binutils-xxx.src.rpm

    これで、できるので、インストールしておく。redhat になっているが、とりあえずなので、気にしない。

    さて、これからが大変

    • 0) 準備 (種となる libc.a と include ファイルを用意)
    • 1) gcc のビルド (最小環境)
    • 2) glibc のビルド
    • 3) gcc のビルド (stdlibc++ を含めた環境)

    という手順。

  • 0) 準備

    ビルドで、実行可能なファイルが作れるかチェックしているので、適当なものでよいから libc.a などが必要なのだ。で、ちゃんとした include ファイルと glibc を用意できれば、標準的なビルドが可能になる。

      mipsel-devkit1 の mipsel-devkit1-lib00.tgz には 3) が可能になる 最低限のファイルを入れてある。( /lib を使うので注意 )

      1) から行う場合は、このうち usr/mipsel-redhat-linux/lib の crt*.o libc.a だけが必要。

    • 1) gcc のビルド (最小環境)

      SRPMS に (変更した) gcc の SRPM を入れてある。これをとりあえず rpmbuild で configure するところまで 進める。

        パッチを当ててくれるし、config.log に config のオプションが残っているので テンプレートとして使えて便利。


      ../configure --prefix=/usr --target=mipsel-redhat-linux \
      --build=x86_64-redhat-linux --host=x86_64-redhat-linux \
      --disable-threads --disable-checking --with-system-zlib \
      --enable-__cxa_atexit --disable-libunwind-exceptions \
      --enable-gnu-unique-object --enable-languages=c,c++ --disable-libgcj \
      --disable-libmudflap --disable-libgomp --disable-libssp \
      --disable-shared --disable-libstdc__-v3

      最初の configure はこれ。ほとんどのライブラリを disable にするし、libc.a しかないのでシェアードライブラリも disable に。

      あと、--disable-fixed-point も入れておくと 使わない固定小数点ライブラリをビルドしないので、ビルド時間を短縮できる。

      これが終わったら、インストールディレクトリを用意して

      # make DESTDIR=xxx install

      これで、一応ファイルをチェック。必要そうなものだけ、選んで / に展開しなおす。(後述)
    • 2) glibc のビルド

      glibc のビルドに gcc は必要だが、ほかに カーネルヘッダーが必要。

      Ingenic のサイトにあった、linux-headers-2.6.24.3.tar.bz2 をおいてある。これを /usr/mipsel-linux/include におく。

      で、gcc と同じように SRPMS においた (変更した) glibc を途中までビルド。これを元に configure しなおして、ビルドする。

      ../configure CC=mipsel-linux-gcc CXX=mipsel-linux-g++ \
      AR=mipsel-linux-ar RANLIB=mipsel-linux-ranlib --prefix=/usr \
      --enable-add-ons=nptl,c_stubs,libidn,ports --without-cvs \
      --enable-kernel=2.6.18 --enable-bind-now --with-tls --with-__thread \
      --disable-multi-arch --disable-profile --enable-experimental-malloc \
      --disable-nss-crypt \
      --host=mipsel-linux --build=x86_64-redhat-linux \
      --with-headers=/usr/mipsel-linux/include

      glibc も インストールするディレクトリを用意するのだが ... オプションが違うので注意。

      make install_root=/tmp/new-glibc install


      mipsel-devkit1-inc0.tgz
      mipsel-devkit1-lib0.tgz

      これらが、作ったもの ... のはず。(実はすでに セルフで RPM が作れているので、そこからとってきている)

      inc0 の方は、クロスでは、/usr/mipsel-redhat-linux に展開し、lib0 は / に展開して /lib と /usr/lib にインストールする。

    • 3) gcc のビルド (stdlibc++ を含めた環境)

      まずは、上記の inc0 を /usr/mipsel-redhat-linux に展開して lib00 を展開する。
      lib0 でも良いかも知れないが、/usr/lib のファイルを /usr/mipsel-redhat-linux/lib に移動しないとだめかも。

      3) のステップでは後ろ 2 行を変更。

      --enable-libmudflap --enable-libgomp --disable-libssp \
      --enable-shared --enable-libstdc__-v3

      だいたい enable にする。libssp は使わないと思うので disable のまま。

      mipsel-devkit1-gcc0.tgz は、これで作ったバイナリ。すべてではなく、必要そうなファイルを選んである。

      以上 ... なのだが、これらのうち 3) で作った gcc の一部 は セルフ環境でも使う。ただし、cc1 , cc1plus 以外の実行形式のファイルはセルフのものと置き換えている。

    擬似セルフ環境

    以上は、x86_64 システム自体は壊さない範囲での作業だった。これからは rpmbuild でパッケージをビルドできるように システムのファイルも書き換えていく。

    そのため、chroot 環境を別に用意する。最終的には、実機で chroot して動かせる 本当のセルフ環境を作るのが目的だが、今は それができない ので擬似セルフ環境としておく。

    擬似セルフ環境は次のステップで作っていく。

    • 1) rpmbuild ができるようにする
    • 2) 作った binutils , glibc , gcc に置き換える。
    • 3) 作った RPM を 手動でインストールしていき、さらに ほかの RPM をビルドできるようにする。

    3) が作業のメインなのだが、一筋縄ではいかない。依存関係が巡回しているのだ。そのため、仮に作った RPM をインストールして 全部そろったところで 再度正規の RPM をビルドしなおすことになる。この作業は非常にたいへんなので、説明が長くなる上、整理できていない。3) は後回しにして その成果物を先に紹介する。

  • 1) rpmbuild ができるようにする

    正確には、

    rpmbuild --target mipsel --rebuild xx.src.rpm

    ができるようにするわけだ。セルフ環境を目指しているわけで、ビルドに必要なものは、/usr/include /lib /usr/lib にインストールされていなければならない。そして、一部のものは、/usr/bin のコマンドを入れ替える必要もある。

    とりあえず、include については、上記のものを /usr/include にインストールする。もとの include は、/usr/include-x86_64 とでもしておいて、参考にしている。

    また、セルフ用のコマンドに置き換えるまでは、/usr/mipsel-redhat-linux/ の include や lib が参照される。include は、/usr/include へのリンクで済むが、lib はちょっと面倒だったりするので、早い段階で binutils や gcc を置き換える。

    /usr/bin の置き換えについてだが、とりあえず mipsel-redhat-linux-xx をすべて xx に置き換える。本当は、 /usr/mipsel-redhat-linux/bin に集めてパスを通すのが正統のような気もするが まぁ今はこれでやっている。

    以上の作業をすれば、一応は rpmbuild はできるようになる。ただし、いくつかの設定が具合が悪い。/usr/lib/rpm/macros , /usr/lib/rpm/redhat/macros , /usr/lib/rpm/rpmrc あたりを編集しなければならないが、ちゃんと整理できていないので説明できない。

  • 2) 作った binutils , glibc , gcc に置き換える。

    最初にビルドすべきなのは、zlib 。ビルドしたのは良いとして、どうやってインストールするかが次の問題。

    全部は置き換えたくないのだ。

    # rpmbuild --target mipsel --rebuild zlib-xxx.src.rpm

    これでできた RPM に対して

    # rpm2cpio zlib-xxx.mips.rpm | cpio -id
    # rpm2cpio zlib-devel-xxx.mips.rpm | cpio -id

    こうやって展開する。このうち /usr/include , /lib , /usr/lib (pkgconfig も) をインストール。

    /lib , /usr/lib は基本的に問題がない。/usr/include も置き換えると決めたので問題なし。 問題なのは、/usr/bin だが as,ld など binutils のコマンド cpp , gcc , g++ , c++ といった gcc のコマンド、 あと pkgconfig と chrpath それに パッケージ固有の xx-config あたりは置き換えることにする。

    glibc のパッケージでは、/sbin/ldconfig と /usr/bin/ldd あたり? ほかもありそうなのだがいまのところこれぐらい。

    こうやって置き換えては、ビルドを続け、さらに置きかえる。x86_64 がすでにインストールされているから、依存関係のチェックは効かない。

    こうやって作っていくのだが、gcc がビルドできないことが最初の壁。

    どうしたものかと思ったのだが、ビルドでエラーになったら 手動で make する。prev-gcc/cc1 をクロスのものと置き換えることを 2 回ぐらいやれば、なんとか最後まで行く。

    で、上記のクロス版とあわせるのだ。実行形式の cpp , gcc, g++ などは置き換えてしまう。ただし、cc1 , cc1plus を置き換えるとビルドが遅くなる。一応切り替えるようにしておいて 問題なければ クロス版を使う。

    *) 現在のバイナリ

    devkit にある

      gcc-bin-self.tgz
      mipsel-devkit1-bin.tgz
      mipsel-devkit1-inc.tgz
      mipsel-devkit1-lib.tgz

    mipsel-devkit1-xx.tgz は、devel-rpms.sh で生成した。不完全であれば作りなおせる。

    ちなみに、cc1-libs.tgz は、将来 mipsel に全部置き換えた上で、cc1/cc1plus のみ クロスを使う場合に使うつもりのもの。今は関係ない。

    こうやって mipsel-devkit1 を作ってはみたが、実際の環境そのものではない。いろいろ不完全なところがあるので、動作を確かめた上で fix していこうと思う。

追記: 問題点多数

    環境を変更したのだが、問題点が多くて.... もういちど作りなおそうとしている。

    まず、gcc 関係の バイナリが足りない。cpp も入れ忘れたし、cc1 , cc1plus も 古いものにしてしまった。

    asis にしてもちょっとひどいので、作りなおす。

      gcc の実行環境は、やっぱりよく分からない。

    • セルフとして作ったつもりだが、/usr/mipsel-redhat-linux/include を要求される。
      /usr/mipsel-redhat-linux には、/usr/include と /usr/lib への シンボリックリンクを作る。

    • 正しく環境設定できれば、PATH_MAX が定義されないという状態にはならない。

      #include <stdio.h>
      #include <limits.h>
      #include <stdarg.h>
      #include <stddef.h>
      main() {
      #ifdef __mipsel__
      printf("hello world (mips) %d\n",PATH_MAX);
      #else
      printf("hello world\n");
      #endif
      }

      たとえばこんな ソースをコンパイルして

      /usr/mipsel-redhat-linux/lib/gcc/mipsel-redhat-linux/4.4.5/include/limits.h
      /usr/mipsel-redhat-linux/include/limits.h
      /usr/mipsel-redhat-linux/include/bits/posix1_lim.h
      /usr/mipsel-redhat-linux/include/bits/local_lim.h
      /usr/mipsel-redhat-linux/include/linux/limits.h

      この順番で linux/limits.h が include されれば OK 。絶対パスで記述したが、実際の読み込みのパスは次のようになっている。

      /usr/mipsel-redhat-linux/bin/../lib/gcc/mipsel-redhat-linux/4.4.5/../../../../mipsel-redhat-linux/include/...

      これは、/usr/mipsel-redhat-linux/bin に gcc などバイナリを置いた場合。/usr/bin に上書きすると、相対パスと絶対パスが入り交じって少々ややこしくなる。

      コンパイルは、gcc , gcc -static , g++ , g++ -static で試す。

      ちなみに、現在の壁は、openldap と python 。python はビルドできたが、モジュール関係のビルド 環境が変。そしてこの 2 つの パッケージのせいで、多数の spec ファイルを書き換えるハメになっている。出来たら解決しておきたい。

        openldap は、nss, nspr と unixODBC を要求する。unixODBC は、qt を要求するのだが、spec を書き換えてユーザインターフェイスをなしに出来て、なんとかビルドできた。だが nspr とかは全然進捗なし。結構厳しい。

      それでも結構な数の RPM は、ビルドできた。現在は 430 個。... といっても SRPM の数で言えば 160 。作ろうとしてる SRPM は全部で 500弱。やっぱり 1/3 ぐらい。

      バイナリを /usr/bin 以外に置く場合、/usr/lib/rpm/ の設定を変更しないといけない。/usr/bin/strip など 絶対パスが入っているものは、都合が悪い。
posted by すz at 11:05| Comment(0) | TrackBack(0) | Jz47xx(Linux)

2011年10月29日

USBbootToolのコンフィグ

Ingenic から出ている USBBootTool は、Android 機に(も)使われている。これを使うと ファームウェアの更新はもとより、全く違うファームウェアですら書き込める。さらに、4740 や 4725B/4755 といった PMP 機にも対応している(ようだ: 未確認)。NAND Flash の PMP 機 への書き込みも興味があるのだが、まずは Android 機の設定について調べてみよう。あと、Jz4770 に対応した版もある。確認していないが、同じような設定方法のはず。

今確認できているのは、Ronzi A3 と IQQ M1 。これらの設定の違いを見てみることにする。

    注) Ronzi A3 (と Ramos V65Pro)の公式ファームウェアは、Ingenic のものを変更している。 ファームウェアのファイルが単一のファイルになっているのだが、Ingenic のツールで扱えるように 分解できる。

    Jz4770 に対応した版は、いまのところ Jz4770 開発環境の中だけにある。公式版は Jz4760 まで。

    追記: V65Pro の情報を右端に追加。これについては、最後にまとめてコメント


    機種    Ronzi A3 IQQ M1 V65Pro
    ファイル名 4760(B)_default.ini 4760_xam5001.ini 4760(B)_default.ini
    [UserSetting]
    ForceErase 1 0 0
    Format 1 0 0

    この設定を IQQ M1 と同じにすると VFAT 領域を初期化しなくても済みそう。

    [Fileset]
    MaxFileCount 7 7 8
    EndPage 7812000 7812000 7812000

    Flash のサイズが違うのに同じ設定 -- これより小さな容量のマシンは気にしなくとも良いということか。

    [File5]
    FileName=userdata.img
    StartAddr 0x19000000 0x1F400000

    [File6]
    StartAddr 0x3A400000 0x40800000

    [File7]
    StartAddr 0x40000000 0x46400000

    [File8]
    StartAddr 0

    IQQ M1 は、サイズが大きくなっている。.. のだが userdata.img の開始位置からずれてくる。このあたりは、パーティションになっているので 整合性を取れば自由にサイズを変更できそう。

    [OpenCardSetting]
    PowerPin 123 108 123
    PowerOffLevel 0 1 0
    CidPsnModel SD_MODEL FIXED SD_MODEL

    これは 非常に重要な項目。これを間違えると まずいと思われる。... のだが、関係なかったりするかも知れない。

    [PLL]
    EXTCLK 12 12 12
    CPUSPEED 114 240 114
    PHMDIV 3 3 3
    BOUDRATE 57600 115200 57600

    CPUSPEED が違うが 書き込み中だけの話なので、実は気にしなくて良い。BOUDRATE は、シリアルの設定だが、製品では関係ない。

    今、Ramos V65Pro を購入中なのだが、Ronzi A3 の設定と違うのは、 PowerPin, PowerOffLevel ぐらいのはず。これも調べておこう。

    追記: V65Pro

    ヒストリには、たとえば、mbr-xboot_r300_60bA3w_110509.bin といったファイル名が残っている。確かに V65Pro は、Jz4760B 。なのだが、設定は同じ。違うのは、File1-7 は使わずに File8 を使う点。ひょっとしたら、File8 はもともとこういうものかも知れない。

    あと、ForceErase=0, Format=0 となっていた。全部をひとつのファイルにしているから関係なさそうなものだが... 。

    さて気になる PowerPin だが、Ronzi A3 とまったく同じだった。チップを変更したが基本は同じなのか ... そもそもあまり関係ないのかはわからない。それはともかく、Ronzi A3 のツールで設定も変更せずに、分割したファームウェアが書けるようだ。これは、ちょっとうれしい。


USBBoot の仕組みとファイル名の関係

    Ingenic の CPU は、USBBoot の機能を持っているわけだが、どんなタイプのメモリが付いているかも分からない状態ではメモリを設定できずメモリにアクセスできない。

    だから、最初はキャッシュにプログラムをロードする。そのプログラムが、メモリの設定を行うことで、メモリにロードできるようになる。

    最初のものが stage1 といわれるもので、CPU名/fw.bin など の小さな bin ファイル。JZ4760/B の場合は、DDR2 なので 4760/fw_ddr2.bin を使う。

    stage1 は、メモリの設定いがいにも CPU クロックの設定や GPIO の設定を受け持っている。これらの設定は、上記の ini ファイルの値を元に fw.bin のイメージをメモリ上で書き換えることで、stage1 プログラムに渡す。

      fw.bin は SDRAM , fw_ddr2.bin は、DDR2 だが、他に DDR3 の fw_ddr3.bbin と Mobile SDRAM の fw_mddr.bin がある。

    メモリにロードするプログラムは、stage2 だが、ファイル名は、CPU名/usb_boot.bin になっている。
    これは、USB ドライバを持っていて、ROM のドライバの機能を上書きして、(USB はリセットしないで) 新たな機能を加える。ちなみに、ハードウェアに関する 2.3 のパラメータは、stage1 と共用している。(多分 PowerPin とか シリアルの設定とか)

    これと通信することで、内蔵フラッシュに書きこむのだが、SD カード と NAND Flash では書きこむ方法が違う。特に NAND Flash は OOB という 領域の管理が面倒。LinuxNandcfg.ini と MiniOSNandcfg.ini で Linux と (PMP 機で使われる) MiniOS の 2通りに対応している。... ただ、Android 機は、いまのところ全部 SD カードなので関係なく気にする必要はない。

    この stage2 は、書きこむ機能はあるが、吸いだす機能は持っていない。ドライバにもそういう機能はない。悪用を防ぐ目的だとは思うが、USBBoot で書き込めるファームウェアを最低1つ持っていないと気軽にはいじれない。ファームウェアが公開されているかどうかは、重要なポイント。

      補足: 吸いだすことは、android が立ち上がった状態で adb に接続すれば、簡単にできる。Jz47xx の android 機は(いまのところ) 最初から root で shell が動く上に busybox も入っている。

      busybox を使って、内蔵フラッシュから dd で吸い上げれば良いわけだ。system.img は read-only だから たぶん USBBoot で書き込み可能なファームウェアを再構築できる。その上 /data/app も残っているみたいだから、プレインストールアプリも吸い出せる。

      novo 7 basic もこうやって再構築できるかも知れないのだが ... 失敗すると危険なので、公式ファームウェアが出るのを待ったほうが良さそう。

    Ingenic 版について

      ftp://ftp.ingenic.cn/3sw/00tools/usb_boot/

      ここに、Ingenic オリジナルの USBBootTool がある。バージョンは、r166 (2011/06/09)。
      ソースコードも置いてあり、ちょっとだけ古い 2011/03/04 の日付になっている。

      この Windows 版 USBBootTool は、driver と UI のプログラム, そして driver インターフェイスの dll から成っている。

      ソースコードが、全てを含んでいるかどうかについては調べていないが、少なくとも UI のプログラムは入っていた。これを元にすれば、英語版も作れそうなものだが、誰も作っていないようだ。

      あと、Jz4770 への対応は、stage1,stage2 のプログラムで済む。ドライバも含めて、ツール自体は関係ない(はず)

      ftp://ftp.ingenic.cn/3sw/Jz4770/01LinuxBsp/20110729/
    • usb_boot_burn-jz4770-20111025.rar

      ... と思って一応確認したら 10/28 に更新されている。 USBBootTool の最新版が単独でダウンロードできるようになった。

      ちょっと見たのだが、上で説明したのと大分内容が違う。要注意。

        まず config の TOPの ファイル名が違う。今まで config.ini だったのが Setting.ini になっている。

        # CpuType: 0 - 25\40,1 - 4750 ,2 - 4755 ,3 - 4725B , 4 - 4760, 5 - 4760B,6 - 4770
        # SystemUsed: 0 - miniCos ,1 - Linux , 2 - Other #
        # ForceErase/Format: 1 - Used ,0 - Unused #
        # DDRType: 0-fw.bin, 1-fw_mddr.bin,2-fw_ddr1.bin,3-fw_ddr2.bin
        # (OLD: 0--SDRAM(fw.bin), 1--DDR(fw_ddr1.bin), 2--DDR2(fw_ddr2.bin), 3--MDDR(fw_mddr.bin) )
        # StorageMedia: 1-SD/MMC,0-NAND

        [UserSetting]
        CpuType=6
        SystemUsed=1
        ForceErase=0
        Format=0
        ProgrammeCount=0
        DDRType=0
        StorageMedia=1

        ここらあたりは、項目は同じ。DDRType は、stage1 のファイル名を指定するのだが、番号と ファイル名の対応が変わっている。Jz4770 は DDR2 を使うのが普通のはずだが fw_ddr2.bin はないし使っていない。

        あと CPUType について、IQQ M1 は、Jz4760B にかかわらず 4 を使っていた。分離するほどの違いはなかったはずなのだが ... 何故 5 を新設したのだろう?

        # AdvanceModel: 1 - Used ,0 - Unused #
        # FileXUsed: 0 - Filehistory-0 ,1 - Filehistory-1 ,2 - Filehistory-2#

        [FileSetting]
        AdvanceModel=1
        File1Used=0
        File2Used=0

        よく分からないのが、 AdvanceModel。[FileSetting]に関係するはずだが ...


    Novo 7 basic 版について (osakanataro 氏の記事 参照)

      USBbootTool も出ている。これの config をチェックしてみたところ、上記 Ingenic 4770 版ではなく、Ronzi A3/V65Pro 版を元にしていることが分かった。

      内容が 4770 追加になっているし、config のコメントに lynx というのが残っている。やはり 7 つのファイルを書き込むのだが、cache.bin の位置がどうも違うようだ。

      あと、mbr-xboot.bin には、microSD カードから ファームウェア をアップデートする機能があるらしい。... といっても Novo 7 だけかも知れないのだが ...
posted by すz at 12:03| Comment(2) | TrackBack(0) | Jz47xx(USBBOOT)

2011年10月26日

コンパイラについて

MIPS 版の RHEL 6 をビルドするという野望は捨てていないのだが、ちょっと息抜き。

    MIPS のコードを生成できるものとして、gcc 以外に pcc がある。pcc は、もともと UNIX で使われていたもので、gcc より起源が古い。だが、オープンソースでなかったので、 (gccを採用した) i386 unix や linux の台頭 とともに一度は消えた。

    これが、オープンソースになり、ほとんど re-write されて復活したのは、わりと最近。 NetBSD とかもこれでビルドできるらしい。あと、rpm もあって、使ってみることは簡単にできる。

    ほかに、オープンソースの まともなコンパイラとして、clang(+llvm) というのがある。詳しくは知らないが、BSD 系で採用されるかも知れないらしい。

    なんで、こんなことを書いたかというと ... RHEL 6 のビルドの最初の障壁が gcc だから。どうにもうまくいかなくてうんざりしてきている。

    もちろん、クロスはなんとかなるのだが ... qemu を使ってのセルフがどうにも ... 一回作った gcc で、もう一度 gcc をビルドするのだが ... qemu での実行になるので終わらない。rpm の作成ではエラーが出ると そこで終わりになるのだが、延々ビルドした後、internal error が出てしまう。原因はメモリの使いすぎのような気がする。

    とにかく、gcc は遅かったり、メモリを使いすぎたりするので 困るのだ。そして 一番の障害が gcc 自身のビルド。その傾向がバージョンが上がるにつれて著しくなっている。

tcc (Tiny C Compiler)

    最適化は、ない(か ほとんどない?) がコンパクトかつ超高速な コンパイラとして tccがある。

    最初に紹介されたときは、Linux kernel がビルドできるという触れ込みだった。それだけではない。TCCBOOT というのがあって、なんと ブート時に カーネルをビルドして立ち上げる なんてことが出来た。(ただし、いまも出来るかどうかは知らない)。

    これは、直接バイナリを出すので、アセンブラもリンカも必要ない。そして C のソースコードを スクリプトとして使える機能がある。最新版は、0.9.25 で、x86_64 にも対応している。あと arm にも対応しているのだが 残念ながら MIPS には対応していない。

    コードを見ると arm-gen.c は 2000 行もない。MIPS に移植するのもそれほど困難ではないような気がする。

vcode: a portable, very fast dynamic code generation system

    誰か tcc MIPS 版を作っていないか探したところ、見つからなかったかわりに、こんなのが見つかった。

    ちょっとだけ見たのだが、MIPS のコード生成部は 1000 行に満たない。それだけ短いのだが、コメントも入っていて MIPS のコード生成部を作る参考になりそうな感じ。

    ちょっと、tcc MIPS 版を作りたくなってきた。テストは、実機を使うまでもない。qemu の user モードで十分。

    ちなみに、tcc も (ターゲットの) libc や libgcc を使う。これらは別途用意しておく必要がある。

lcc, A Retargetable Compiler for ANSI C

    そう言えば lcc なんてのもあったのだった。これは、x86 と ALPHA , SPARC , MIPS に対応している。コード生成部を作る参考になるかもしれない。

tcc の調査

    まず、tcc を作ったとして、android で動かせるものなのかどうか。

    1) ライブラリ

    tcc がリンクしているライブラリは、

      libc.so , libm.so , libdl.so

    これらのランタイムは、system/lib/ にある。
    ビルド時に使用するのは、NDK の platforms/android-8/arch-mips/usr/lib (など)

    これだけなら、大丈夫そうだ。

    ただ、これしかリンクしていないということは... リンカの機能も独自に作っているということで、なかなか 面倒な話がある。

    arm-gen.c 以外のもの を ARM_ で grep すると ...

    libtcc.c , tccelf.c , elf.h , tcctok.h で見つかる。特に行数が多いのは、elf.h と tccelf.c

    これらは、リロケーション情報を扱っていたりして、勝手に作れば良いというものではない。binutils と互換性があるように作らねばならないので、結構面倒そう。

追記: Android セルフ コンパイラ

C4droid (C/C++ compiler)

ふと、Android で動くコンパイラがあるかもと思って探してみたら あった。

もちろん ARM 用だろう。組み込みのコンパイラは tcc だが、gcc plugin なんてものもあるらしい。
posted by すz at 23:34| Comment(0) | TrackBack(0) | 日記

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月16日

Android TV BOX

pandawill.com を眺めていたら、結構 Android TV BOX の機種を扱っている。

CPU は、tcc8902, rk2918, S5PV210 とおなじみのもの。メモリは 全部 512MB 。HDMI とイーサネット、WiFi も全部付いている。USB Host も付いていて、ハードディスクも付けられるようだ。SDカードも GG 以外は付いているようだ。

まぁ 特に欲しいというわけではないのだが、Jz4770 を採用したものが出たら考えてしまう。

ちなみに、Jz4770 も 100M イーサのインターフェイスは、持っている。USB は、OTG が 1 つと 12 M までの USB HOST が 1 つ。HDMI も持っているし、TV-Out や VGA の出力ができる TV エンコーダもある。

いずれは、出てくるかも知れない。

追記: Jz4760/B なら既に出ていた。

どうも IV-BOX X1 または IV-BOX X3 がそれらしい。ちなみに IV-BOX X5 というのもあって、こちらは RK2918。



内部写真まで公開しているが、X1 は Jz4760B 。CPU ボードが別になっていて面白そう。ちょっと興味がある。

  • X3 の方が上位機種に見えるが Jz4760 らしい。

  • X2 もある。どうも全部同じ サイズの CPU ボードを使うみたいだ。

  • メモリは、2 個ついている。たぶん 256 MB なのだろう。

  • 右端は、USB 接続の Wifi のはず。

  • 左端の USB は、USB 2.0 OTG のはず。

  • イーサネットが付いている。Jz4770 にはあるが、Jz4760/B にはないはず

  • HDMI も 付いている。Jz4770 にはあるが、Jz4760/B は VGA までのはず。

    なにか腑に落ちない。Jz4770 の方が安く作れそう。だがしっかり Jz4760B と書いてあるし ... まぁいずれ Jz4770 のを出してくるに違いない。

    追記: ここは終わってしまったようだ。メーカ自体が。ううむ残念。

http://www.aliexpress.com/product-fm/500900322-4760B-android-TV-android-TV-bot-PPtv-android-android2-2-wholesalers.html
Aliexpress だとこれ。$82.11+送料 $29.67

http://item.taobao.com/item.htm?id=12887821957&
taobao だとここらしい。400元。

追記: ACII.jp で、『〜師範、ARMって何ですか!〜』なんて記事が


    編集I:でもこれ、将来的にはものすごく安い値段になる可能性がありますよね?

    hito:Androidタブレットから「液晶とタッチパネルとバッテリを除いたもの」と同じなので、ものすごく安い値段で売れる可能性はあるでしょうねぇ……。数出てくるようになれば、って感じですが。

こういう記載があるのだが... Android TV BOX はスコープに入っていないのかな? まさに、「液晶とタッチパネルとバッテリを除いたもの」なのだが ...

すごい値段なのかどうか? 出る数が違うから、タブレットとさほど変わらないような気がする。

追記: Male A1000

    Mele A1000 is a $70 hackable, Linux-friendly ARM-based PC
    Mele A1000 Android 2.3 STB Unboxing and Review

    これは、Allwinner A10を使った もの。

    DealExtreme だと送料込みで $100 (ちょっと)。

    A10 って SATA (3Gb) が付いているのか。SDIO も UHS 対応 4ch 。Marvell のようなサーバ向けチップではないけど ... 結構いろんなインターフェイスが付いている。

    こういうのを JZ4770 で出して欲しいのだが ...

    それはともかく、http://rhombus-tech.net では、Allwinner A10 を使った CPU ボードを $15 ぐらいで出そうとしているそうだ。形状は、PCMCIA ?

    「Raspberry Pi」 みたいなものだが、インターフェイスがない分 安くできるのか?

    そういえば EKEN の タブレットは、独立した CPU ボード構成だった。$20 で WM8650 ボードが売ってたから $15 は 可能 と言えば可能。(ただ RAM 256 MB という条件になるかも)

    追記:
    後継機 Mele A2000 が出ている。 今の価格は、A1000 が $92.60 で A2000 が $98.20 (FreeShipping)。機能は同じで、デザインが良くなった?

追記: 2012/05/23

    49ドルのAndroidミニPC「VIA APC」発表、7月出荷。Neo-ITX フォームファクタ

    という記事が出ている。WM8650 の後継 CPU の WM8750 を積んだマシンで、Cortex-A9 800 MHz 。一応メモリは 512MB なので、使えるレベル。

    ただ、SATA がないので、Neo-ITX フォームファクタ であるメリットはなさそう。やはり SATA 付きの Male A1000 の方が楽しめそう。( ただし、私は MIPS 派なので 手をださない)

    Deal Extreme の これ は、同じようなものだが、Android TV BOX なのでケース付き。リモコンまで付いている。スペックも VIA APC に劣らない。どうせなら、こっちの方が良いとのこと (@ naobsd ) 。この手のものは、パワーユーザがどれだけ付くかで 選ぶのが吉。

    ただ、電子工作としてみた時には、少々事情が異なる。( カーネルをいじれないと面白くないが) GPIO とか I/O が出ていることが 重要だったりする(場合もある)。USB HOST が使えれば、なんとかなりそうなものだが ... やりたいことによって 重要度は変わるだろう。

Cubieboard

    Allwinner A10 には、Cubieboard なんてものが出ている。

    電子工作でいろいろいじれたりするし SATA が付いているのもポイントが高い。結構欲しいような ... JZ4770 で出たら飛びつくのだが ...
posted by すz at 17:49| Comment(0) | TrackBack(0) | 日記