2012年03月29日

Jz4770 アンドロイドカーネルソース(ICS)

ICS 対応の新しい アンドロイドカーネルソース が手に入った。

例によって、linux オリジナルに対する 新規ファイル と 差分に分けて整理しておく

ほかに、Toolchain のバイナリもあるが、大きいので割愛。

ちょっと覗いてみる。

  • まずは、defconfig のチェック。

    npm701_ab_defconfig
    npm702_defconfig
    npm702_pinkflozd_defconfig

    一応 paladin 用と basic 用の両方があるようだ。あと、jz4770 のみが対応で他の jz47xx は削除されている。当然 defconfig もない。

    あぁ Jz4760/B は見捨てられたのか ... 2.x 用のソースコードはあるとは言えマージするのは相当に面倒に思える。

    あと、pinkflozd 氏は、様々なチューニングをしている。 大雑把に言うと I/O の効率化? と ライブラリ関数の差し替え が主。バグ修正のような変更はないようだ。

    このカーネルなら、確実に現行のファームウェアのカーネルと差し替えられる。

改造したいところと重なってないことを確認して、usb gadget を見てみる。


    drivers/usb/gadget/android.c:

    static struct android_usb_function *supported_functions[] = {
    &adb_function,
    &acm_function,
    &mtp_function,
    &ptp_function,
    &rndis_function,
    &mass_storage_function,
    &accessory_function,
    NULL
    };

    こんな定義がある。実際に使っていると思われる mass_storage を見ると ...

    static int mass_storage_function_init(struct android_usb_function *f,
    struct usb_composite_dev *cdev)
    {
    :
    :
    nluns = CONFIG_USB_NLUNS_NUM;

    config->fsg.nluns = nluns;
    for (i = 0; i < nluns; i++){
    config->fsg.luns[i].removable = 1;

    /*add by bcjia to use cdrom to lun2*/
    if(i == 2){
    config->fsg.luns[i].cdrom = 1;
    }
    }
    :

    なにやらまさに 2 つの removable + cdrom を作るコードがある。

    イーサネットは、こっち rndis 。

    static int rndis_function_init(struct android_usb_function *f, struct usb_composite_dev *cdev)
    {
    f->config = kzalloc(sizeof(struct rndis_function_config), GFP_KERNEL);
    if (!f->config)
    return -ENOMEM;
    return 0;
    }

    static int rndis_function_bind_config(struct android_usb_function *f,
    struct usb_configuration *c)
    {
    :
    if (rndis->wceis) {
    /* "Wireless" RNDIS; auto-detected by Windows */
    rndis_iad_descriptor.bFunctionClass =
    USB_CLASS_WIRELESS_CONTROLLER;
    rndis_iad_descriptor.bFunctionSubClass = 0x01;
    rndis_iad_descriptor.bFunctionProtocol = 0x03;
    rndis_control_intf.bInterfaceClass =
    USB_CLASS_WIRELESS_CONTROLLER;
    rndis_control_intf.bInterfaceSubClass = 0x01;
    rndis_control_intf.bInterfaceProtocol = 0x03;
    }
                   :

    なんだかよくわからないがコードは入っているようだ。.... 要するに board でデバイスを定義すると 構成される? それはどうやってやるのだろう?

    ... というか、これって ジェネリックなコードだろうから ググると出てきたりする?

    まぁ、これで PC と接続すると 高速に通信できそうなのは分かったので、一安心。

    その前に ... config できになる点が ...

    CONFIG_USB_MUSB_OTG=y
    CONFIG_USB_GADGET_MUSB_HDRC=y
    CONFIG_USB_MUSB_HDRC_HCD=y
    CONFIG_MUSB_PIO_ONLY=y

    CONFIG_USB_GADGET_DUALSPEED=y

    CONFIG_MUSB_PIO_ONLY .. ってことは、オーバヘッドが大きそうな ... 。ただ、ネットワークはオフロードできる要素がないから、DMA 使っても あまり差がないはず。むしろ 影響があるのは MASS STORAGE 。ファイル転送などで CPU 負荷が上がっていたのはこれのせいだったのか。

最初のビルドを試す。

    pinkflozd 氏 の git には、toolchain の Linux バイナリも含まれるようになった。これでビルドすれば同じものが出来るはず。

    まずは、gcc -v

    Target: mips-linux-gnu
    Configured with: /home/fu/dev/gcc44/gcc/configure --target=mips-linux-gnu \
    --prefix=/home/fu/dev/gcc44/build-linux/tools \
    --with-sysroot=/home/fu/dev/gcc44/build-linux/sysroot \
    --enable-__cxa_atexit --disable-libssp --disable-libgomp --disable-libmudflap \
    --enable-languages=c,c++ --with-mpfr=/home/fu/bin --with-gmp=/home/fu/bin \
    --with-llsc --disable-decimal-float --disable-fixed-point --with-mips-plt \
    --with-arch=mips32r2
    Thread model: posix
    gcc version 4.4.3 20100121 (prerelease) [gcc-4_4-branch revision 156102] (GCC)

    --with-llsc , --disable-decimal-float と --with-mips-plt は知らなかったオプション。

    ちなみに multilib は、soft-float と mips32 ( +soft-float/mips32 ) が含まれている。

    次に ベース (Ingenic-Linux 3.0.8 r1123) をビルドしてみる。

    # cp arch/mips/configs/npm702_defconfig .config
    # make

    これだけで zImage まで ビルドしてくれた。

    途中で board の選択メニューが出るのだが ...

    7. Ingenic JZ4770 NPM703 board (JZ4770_NPM703)
    :
    10. Ingenic JZ4770 AURORA board (JZ4770_AURORA)

    興味深いことに AURORA がある。AURORA が MIPS になる可能性はやはりあったようだ。NPM703 は何だろう? NPM701 が basic で NPM702 は paladin ... MIPS 版 elf ( = swordman) あたり?

    これらの選択枝は、Kconfig 上だけの話で、arch/mips/jz4770/boards には、npm702 しかない。(npm701 すら存在していない)

    あと、作られるモジュールは、
     drivers/scsi/scsi_wait_scan.ko
    のみ。

    さて、mxu_as はどこで動くのか? arch/mips/process.c が まず MXU 命令を使っているのだが、調べていくと ... mips-linux-gnu-as で MXU 命令入りのコードが通る。

    57c: 24020003 li v0,3
    580: 7002042f s32i2m xr16,v0
    584: 3c028000 lui v0,0x8000

    objdump -d でも 対応している。これは! ちゃんと対応して、もはや mxu_as は使わなくなったということか。

    次に 3.0.23 を試す。

    # cp arch/mips/configs/npm702_pinkflozd_defconfig .config
    # make

    これも無事終わる。作られるモジュールは、以下のもの。

    drivers/scsi/scsi_wait_scan.ko
    fs/btrfs/btrfs.ko
    fs/exportfs/exportfs.ko
    fs/jfs/jfs.ko
    fs/reiserfs/reiserfs.ko
    fs/xfs/xfs.ko

    CIFS は =y (モジュールではなく組み込み)

    ところで Wifi はどうしているのだろう? 公式ファームウェアでは唯一の モジュールで
     lib/wifi/modules/iw/dhd.ko
    にあるわけだが ...


    CONFIG_WIFI_BRCM=y

    config WIFI_BRCM
    bool "Broadcom"
    depends on JZSOC
    select WIRELESS_EXT
    select WEXT_PRIV
    select FW_LOADER
    help
    This option contains static memory allocation for 4319 and 4329

    BCM4319 あるいは 4329 だったっけ? それだと CONFIG_BCM4329 が別にあるのだが ... これは使えないのだろうか?

    Wireless LAN (WLAN) [Y/n/?] y
    USB ZD1201 based Wireless device support (USB_ZD1201) [N/m/y/?] n
    Enable WiFi control function abstraction (WIFI_CONTROL_FUNC) [N/y/?] n
    Broadcom 4329 wireless cards support (BCM4329) [M/n/y/?] m
    Firmware path (BCM4329_FW_PATH) [/system/etc/firmware/fw_bcm4329.bin] (NEW)
    NVRAM path (BCM4329_NVRAM_PATH) [/proc/calibration] (NEW)
    Broadcom 4329/30 wireless cards support (BCMDHD) [N/m/y/?] n
    IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP) (HOSTAP) [N/m/y/?] n
    Broadcom (WIFI_BRCM) [Y/n/?] y


    そういえば .. fw_xxx.bin は 次のものだった。
     lib/wifi/firmware/iw8101/fw_iw8101.bin

    iw8101 とは何? ここらをクリアしないと いつまでも dhd.ko に縛られることになる。

    ちなみに dhd.ko を strings で見てみると...

    license=GPL v2
    Compiled in .../work/npm702-4.0.3-1230/nda/wifi/broadcom/5.90.125.69/open-src/..

    NDA と open-src , GPL v2 という矛盾した 文字列が見える。

    あと、http://linuxwireless.org/en/users/Drivers/brcm80211 ここにあるのは何?

    brcm80211でサポートしている SDIO チップは、BCM4329/BCM4330 。BCM4329 は、Wi-Fi(a/b/g/n) とBluetooth あと FM ラジオとトランスミッタの機能がある。「Nexus One」や「iPad」も採用とのこと。

    config WIFI_BRCM が =y になっているのだから BCM4329 かそのあたりのチップのはず。いっそのこと BCM4329 そのものだと面白いのだが...

    http://forum.xda-developers.com/archive/index.php/t-906628.html

    このあたりを見ると ... やっぱり BCM4329 という気がしてくる。ちなみに DHD は Dongle Host Driver の略のようだ。

    [DHD] DHD: dongle ram size is set to 245760(orig 245760)
    [DHD] load firmware from /system/lib/wifi/firmware/iw8101/fw_iw8101.bin
    [DHD] dhdsdio_download_nvram: nvram_path=/system/lib/wifi/firmware/iw8101/nvram_iw8101.txt
    Dongle Host Driver, version 5.90.125.69

    これは、basic の dmesg なのだが、BCM4329 と ram size が違う (BCM4329 は、294912) 。

    http://nv-tegra.nvidia.com/gitweb/?p=android/platform/system/wlan/broadcom.git

    ちょっとバージョンが古いが、ここにもそれらしきドライバーがある。BCM4325 というチップにも対応しているようだ。BCM4325 は、a/b/g 対応なのが違いらしい。paladin の spec を見なおしたら a/b/g/n 対応らしい。--- ということは BCM4329 以降?

    意外にも高機能なチップを使っているようだ。その割に 調子が悪いのだが ... 。

    brcm80211 ドライバは次のところにあるという説明がある。

    git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git

    これは、https://git.kernel.org からもたどれるのだが、コードを見ると確かに BCM4329/BCM4330 にしか対応していない。そして、ramsize は、いずれも 0x48000 = 294912 。(245760 は、0x3c000)

    で、一体どんなチップなのか? 途方にくれたのだが .... すなおに iw8101 を検索したら BCM4336 とのこと。で、BCM4336 のコードは、どこにもないようだ。Dongle Host Driver の version 5.x が手に入ることがあれば、なんとかなりそうだが ... まぁ無理だろう。dhd.ko を使っていく他なさそうだ。

    追記: カーネルソースに dhd ドライバが含まれていた。下記参照。

これで何をするのか?

    とりあえず、USB でつなぎっぱなしにして、Host から ssh でログインできるものが欲しい。共有ファイルシステムは、CIFS よりは NFS が使いたい。

    swap も必須。ログインしているときは、Android 側は、swap に行って欲しい。... これを、ちゃんと実現するには、Android 側に スリープしていると錯覚させる仕組みが必要か?

    あとは、バッテリーをフル充電しない仕組みをなんとかする。充電を切ることができる インターフェイスがあれば .. ログインして使うのを前提に、普通の実行ファイルで作れそう。

    で、作っていた RHEL6 もどきの続きをするのだ。

    あとは、スターンドアローンで使うときの不具合なんかの修正。

    custom ROM 0.8 でスリープが具合悪いらしい。... というか、正規のファームウェアでも具合が悪いバージョンが 多々あるような。一旦ホーム画面にしてスリープしないとサウンドがなり続けたり。

    こういうことを考えると ... custom ROM 0.8 ベースが良いかも知れない。

    ちなみに、Windows でも USB gadget の network が、標準ドライバで使える。ルーティングも Windows 側がルータになる設定が可能らしい。Windows で ssh も問題なく使えるから Host を Linux に限定することはないかも知れない。CIFS は、ファイル置き場には使える。ワークファイルは、microSD にせざるを得ないが、2000 円ほどの microSD (たぶん SanDisk OEM) は幸いなことに小I/O が速い。

おまけ(2012/4/2)

    カーネルをビルドまでして使うなら、開発機がいつまで入手可能なのかが気になるところ。

    赤札天国では、basic (白/黒)、paladin(白)が売り切れで、paladin(黒)のみ。値段を 7980円に下げての販売で 売り切りっぽい。
    pandawill も basic (白/黒)、paladin(黒)が売り切れで、paladin(白)のみ。価格は、99.99 ドル。

    paladin が入手可能な (ほぼ)唯一の Jz4770 機で、ICS 対応の (ほぼ)唯一の MIPS 機なのだから、末永く売ってもらいたいこころなのだが....

    ちなみに、DealExtreame , focalprice でも 取り扱いはある。

    追記: ここ (UNICONE というショップ) でも取り扱っている。2012/5/21 までの取り扱いだが、送料無料で 8600円と 結構安い。過去に Ronzi A3 も取り扱っていたようだ。

github.com/naobsd/ingenic_android-3.0

    これを精査してみることに。

    基本は、最初に載せた ベース (Ingenic-Linux 3.0.8 r1123) と同じものではあるのだが... 微妙な違いがある。

    まず、最初のは 改行が CR+LF になっている点。統一されていないという点であまり良くない。

    arch/mips/configs/npm701_ab_defconfig
    arch/mips/jz4770/boards/npm701
    drivers/net/wireless/bcmdhd/dhd_cfg80211.c
    drivers/net/wireless/bcmdhd/dhd_cfg80211.h
    drivers/net/wireless/bcmdhd/wl_linux_mon.c
    include/trace/events/cpufreq_interactive.h

    次に以上のファイル(/dir) が 追加になっている。

    で、よくよく見ると drivers/net/wireless/bcmdhd が ingenic 版と AOSP では全く違う。
    ingenic 版は、古いものをベースとしているようだ。

      先に書いておくが、

      AOSP 版 Dongle Host Driver, version 5.90.195.46
      ingenic 版 Dongle Host Driver, version 5.90.125.94

      だった。上で思い悩んでいたのは何だったのだろう?

    いま一度整理してみることにした。

  • android-linux-3.0.8.tar.gz
  • android-linux-3.0.8.patch.gz
  • android-linux-3.0.8-bcmdhd.tar.gz
  • android-linux-3.0.8-bcmdhd.patch.gz

    ここまでが、AOSP (+MIPS)

  • android-linux-3.0.8-ingenic.tar.gz
  • android-linux-3.0.8-ingenic.patch.gz
  • android-linux-3.0.8-vivante.tar.gz
  • android-linux-3.0.8-vivante.patch.gz
  • android-linux-3.0.8-bcmdhd-ingenic.tar.gz
  • android-linux-3.0.8-bcmdhd-ingenic.patch.gz

    ここまでが Ingenic r1123 。android-linux-3.0.8-bcmdhd.tar.gz を 再度上書きすれば、 AOSP 版 に戻せるようにしている。

    -vivante は、GC860 ドライバ -- 規模を見るために分離してみた。(bcmdhd と vivante が AOSP / ingenic の修正それぞれの半分ぐらい占める。-- でかいから分離独立。)

    さて、興味があるのは、bcmdhd ドライバ。2 つあるわけだが、これらが実際にビルドできるのか?ちなみに、両方ともに BCM4336 をサポートしているような ...


    # CONFIG_WIFI_CONTROL_FUNC is not set
    # CONFIG_BCM4329 is not set
    CONFIG_BCMDHD=m
    CONFIG_BCMDHD_FW_PATH="/system/etc/firmware/fw_bcmdhd.bin"
    CONFIG_BCMDHD_NVRAM_PATH="/system/etc/wifi/bcmdhd.cal"
    # CONFIG_BCMDHD_WEXT is not set
    # CONFIG_DHD_USE_STATIC_BUF is not set
    # CONFIG_HOSTAP is not set
    CONFIG_WIFI_BRCM=y

    とりあえず AOSP 版を これでやってみると ...

    ERROR: "wlcfg_drv_priv" [drivers/net/wireless/bcmdhd/bcmdhd.ko] undefined!
    ERROR: "wl_dbg_level" [drivers/net/wireless/bcmdhd/bcmdhd.ko] undefined!

    zImage が出来た後 module のビルドで こんなエラーが出た。まぁこの程度なら調べる気も起きる。

      Makefile を見てみたが、dhd_cfg80211.o が余計なような ...

    ingenic 版は、drivers/net/wireless/bcmdhd/bcmdhd.ko がちゃんと出来上がった。ただし、動かすためには、firmware が必要。

    /system/lib/wifi/firmware/iw8101/fw_iw8101.bin (FW)
    /system/lib/wifi/firmware/iw8101/nvram_iw8101.txt (NVRAM)

    オリジナルはここにあるわけだから、少なくとも パスを変更する必要がある。-- ただ これが bcmdhd ドライバと互換性があるのかどうかは不明。違う名前なのだから ID ぐらい違うかも知れない。

usb gadget の件

    コードを見ていたら /sys/class/android_usb/android0/ というインターフェイスになっているので、ググってみたら ...

  • Androidのadbのメモ(10) adbdの起動のトリガー

    こんな記事がみつかった。... なるほど sys.usb.config に rndis,adb とでも書けば良さそうな .... カーネルビルドの必要ないのか

      ちなみに、sys.usb.config は、initramfs の default.prop に記述されるもの


      on property:sys.usb.config=rndis
      write /sys/class/usb_composite/rndis/enable 1
      setprop sys.usb.state $sys.usb.config

      on property:sys.usb.config=rndis,adb
      write /sys/class/usb_composite/rndis/enable 1
      write /sys/class/usb_composite/adb/enable 1
      start adbd
      setprop sys.usb.state $sys.usb.config

      on property:sys.usb.config=mass_storage,rndis,adb
      write /sys/class/usb_composite/usb_mass_storage/enable 1
      write /sys/class/usb_composite/rndis/enable 1
      write /sys/class/usb_composite/adb/enable 1
      start adbd
      setprop sys.usb.state $sys.usb.config

      ググるとこんな記述が見つかるのだが、paladin の init.rc はこんな風になっていない。
      簡単に対応できるようなものではなさそう。

    CONFIG_USB_NLUNS_NUM=2

    ちなみに、CDROM を出さないようにするには、カーネルビルドが必要になる。

充電を止めるには?

    #define GPIO_CHARG_SET GPF13
    #define GPIO_CHARG_DETE GPF14

    npm701.h/npm702.h ともにこういう定義はある。だが、使っていない。

    あと、npm702-pm.c

    {32 * 5 + 13, GSS_INPUT_PULL}, /* NC */
    {32 * 5 + 14, GSS_INPUT_NOPULL}, /* CHARG_STAT_N */
    {32 * 5 + 15, GSS_INPUT_PULL}, /* NC, CHARG_CURENT_SET */

    GSS_INPUT_PULL となっているが pull-up なのか pull-down なのかは、ピンによって決まっている。確かデータシートには書いてあったはず。

      確認した。いずれも pullup で 8mA のドライブ能力。

    さて、充電用 IC が 定番の LTC4054(互換) だとすると ... STAT 端子が CHARG_STAT_N に接続されていることになる。

    あと PROG 端子と GND の間にいれる抵抗の値によって最大充電電流が決まる。FET を使って AC 電源時の充電電流を変える回路は簡単で実際に良く使われている。ソフトでも制御できるような回路になっていて GPF15 に接続されている可能性はある。

    PROG 端子を FET を使って抵抗から切り離せば、充電禁止。LTC4054 を使ってできる制御はこれぐらいなのだが ... うまく当てはまりそうな ... 。だとすると GPF13 を出力 L で 充電禁止にできるかも。 NC とも書いてあるから、出来なくともやむを得ないが ...

    ただ、sleep 時には、充電禁止が解除されるし、それが正しい制御だろう。これを踏まえて充電禁止のコードを作るのは、少々面倒かも。

basic のビルド

    basic のビルドもやってみることにした。

    実際にやってみるとコンパイルエラーになる。調べてみると AT070TN93 ドライバの不整合が原因のようだ。

  • 02_npm701-AT070TN93.patch

    とりあえずパッチを作ってみた。

  • 01_distclean-fix.patch

    ついでなのだが、このパッチは、boards の Makefile から存在しないディレクトリのものを削除するもの。こうしておかないと Make distclean とかでエラーになってしまう。

    あと config 。paladin とは、入れているドライバが随分違うようなので、趣味が大分入っているが 合わせた config を作ってみた。

  • npm701_suz_defconfig (basic)
  • npm702_suz_defconfig (paladin)

      CONFIG_VT=y
      CONFIG_CONSOLE_TRANSLATIONS=y
      CONFIG_VT_CONSOLE=y
      CONFIG_HW_CONSOLE=y

    気になるのは、これ 。basic に入っていたので、VT_CONSOLE=y としてみたが... 意味あるのかどうか。

      CONFIG_USB_ACM=m
      CONFIG_USB_SERIAL_CP210X=m
      CONFIG_USB_SERIAL_FTDI_SIO=m
      CONFIG_USB_SERIAL_PL2303=m

      CONFIG_BINFMT_MISC=m

      CONFIG_BCMDHD=m
      CONFIG_BCMDHD_FW_PATH="/system/lib/wifi/firmware/iw8101/fw_iw8101.bin"
      CONFIG_BCMDHD_NVRAM_PATH="/system/lib/wifi/firmware/iw8101/fw_iw8101.bin"

    趣味で入れたのは大体 =m (モジュール)にしている。

      # CONFIG_NTFS_FS is not set
      # CONFIG_NFS_FS is not set
      # CONFIG_NFSD is not set
      # CONFIG_CIFS is not set

    こういうのも入れておきたいが未だ。CONFIG_BT も入れたい。そういえば CONFIG_NLS_CODEPAGE もデフォルトのままだ。ちなみに CONFIG_FUSE_FS=y となっていて、NTFS は FUSE 版が入っているはず。

      CONFIG_USB_NLUNS_NUM=3

    これも 2 に変更したいが、ユーザランドとの整合性があるし未だ。

サスペンド時の リフレッシュレート 変更

    どうやって設定すべきなのか調べていないが、ToDo のひとつとしてあげておこう。

    サスペンドでは、たぶん DRAM のリフレッシュが 消費電流の支配的要因のひとつ。Jz47xx は、たしかセルフリフレッシュと メモリコントローラによるリフレッシュが選べたはず。どっちを使っているかもチェックが必要。

    たぶん保証外な リフレッシュレート にすることになると思うが、うまくいけば待機時間を 2 倍ほどに伸ばせるかも知れない。

      arch/mips/jz4770/common/pm.c: jz_pm_do_sleep()
      が sleep というか、サスペンドの処理だった。

      で、みてみると ... PLL まで止める。 DRAM は、セルフリフレッシュモードになる。クロックを供給しないから、設定できる要素はない ... はず。

      セルフリフレッシュモードでの消費電流は、ISSI の DDR2 2Gb(256MB) は、12 mA。ただし 512 MB では 2 個使うし、電源電圧は、1.8V 。スイッチングレギュレータで降圧しているので、バッテリーの電圧では、10数 mA になりそう。一方 paladin の実測値はスリープ時 12.2 mA だそうだ。

      追記: Paladin は、H5PS1G83EFR (1Gb = 128MB, DDR2-800) x4 だった。データシートは入手できていない。basic は、HY5PS1G831CFP x4 でひとつ 8mA (Max) LFP なら 5mA(Max) 。ちなみに、動作時の消費電流は 225mA(IDD4W,IDD4W) (Max) 。どうもかなりの部分が DRAM で消費されるみたいだ。

      jzsoc_do_sleep() で、on-board modules を停止させているらしいが、本当にすべてなのかどうかは不明。LCD やタッチパネル、アンプを Off しているのかどうか? 大丈夫だとは思うがチェックはしておきたい。

      ついでに idle のコードチェック

      arch/mips/kernel/cpu-probe.c: cpu_wait = JZ4770_wait_irqoff;

      r4k_wait から変更になったようだ。ただ、CPU クロックを低くしたりはしていない。そんなことは不要なのかどうか?

      あと Android のスリープ状態とは何だろう? 2 段階あるのは分かるが、浅いほうは、ただの idle ?

      ところで、 サスペンドのコードを見ていると ...

      arch/mips/jz4770/include/mach/chip-misc.h cache_prefetch(label) というのがあった。

      これは、label から 128 キャッシュライン (4KB ?) コードをキャッシュにロードするもの。
      で、jz_set_div() という関数で これを使っている。

      どうも PLL を設定しているようだ。この間メモリにはアクセスできないということ。

      もちろん DMA 等もダメだから、サスペンドからの復帰でしか使えないわけだが ... サスペンドからの復帰なら PLL を含むクロックの変更が可能ということ。1GHz から 1.2 GHz にするようなことが、このポイントなら出来るかも知れない。

    ついでなので ... jz4770 には、BDMA という インテリジェントDMA 機能がある。この機能は、Linux では DMA_ENGINE として実装するもののようだ。Programmers Manual は入手できていないが、jz4760 にも同じ機能があるので実装できる可能性がある。 ただキャッシュコヒーレンシがあるのが前提だろうから、ただ移植すれば良いものではないかも知れない。

    BDMA の定義自体は、ヘッダファイルには、きっちり入っている。ただし、BDMAC (BCH & NAND DMA Controller) という説明。BDMA は、デスクリプタも使えて、メモリコピーにも使えるのだが ...

    NAND を直接使っていないから もちろん使ってはいないのだが、勝手に使って良いものかどうか。3CH あるから、1つ2つ DMA_ENGINEに回しても 問題はなさそうだが..

    ちょっと調べたのだが、 デスクリプタの構造が定義されていないような ... jz4760_pm にはちゃんと書いてあったので簡単に説明すると 4-word または 8-word の 2 種類のデスクリプタが選べるが デスクリプタをチェーンする場合は 8-word になる。その場合 32 バイト境界でないといけない。Stride という概念があって、二次元の矩形データを他の二次元データに書き込むような目的に使える。(ただし、DMA_ENGINEはそんな機能はサポートしてないはず)

usbboot-tool

    usbboot on Ronzi A3 という記事で Linux 用 usbboot-tool のアナウンスが。Qt を使った GUI 版もあるそうだ。

    ソースコードは、ここ 。Ronzi A3 用のように書いてあるが、Ingenic のコードを移植したなら、全ての Jz47xx に対応しているはず。

    まったく関係ないのだが、USBBOOT つながりで。Allwinner A10 のブートシーケンスが ここに に書いてあった。

    どうも、sdcard slot 0 → nand flash → sdcard slot 2 の順番でスキャンするらしい。A10 には、USBBOOT のようなツールがあるのだが、nand flash が壊れてしまうと 動かないはず。sdcard にブートローダを仕込めばなんとかなりそうだが、やり方は多分知られていない。

      訂正: これだいぶ間違っていた。sdcard のブートに行く前に USB からの BOOT をするかどうかの判断が入る。要するに Jz47xx と同様 USB からブートできる。USB からのブートでは、ボタンを数回押すという変なオペレーションになっているが、これが BROM でサポートしているとは思なかったので誤解していた。

      ところで A10 の カーネルソースコードも入手してみた。A10の機種は NAND FLASH を直に接続しているようなのだが、どういう制御を しているか興味があったため。

      みてみると、mtd は使っておらず drivers/block/sun4i_nand という独自のドライバーを使っていた。WEAR_LEVELLING もサポートしているようで、SDカードを直に使うような使い勝手になっている模様。MTD+UBI よりは随分使いやすそうだ。ただ、再インストールで書き込み回数の情報はどうなってしまうのか? このあたりがきになる。いずれ調査してみよう。

      A10 用の 新しいソースコードが出ている。linux-3.0.8 になって Ingenic のカーネルとの比較がしやすくなった。見てみると 追加になったドライバーが膨大で tar+gzip で 35MB にものぼる。 そのなかで興味深いのは、drivers/block の NAND 関係、sun5i_nand/ が追加になっている。

    最近話題になっている FT701W も USBBOOT が出来るようだ。『FT701Wでomap4bootに成功!』なんて記事がある。ただこれは、どっちの方式だろう? A10方式かも。

    こういうのを見てもわかるように、USBBOOT は便利なのだ。特に カーネル開発者にとっては。さらに カーネルは、Windows ではビルドできないので Linux で USBBOOT が動くのは 嬉しかったりする。

ちょっとビルドしてみる。

    どうも jzboot , xbboot あたりの ファイルが足りない。

    しょうがないので、
  • http://projects.qi-hardware.com/index.php/p/xburst-tools/downloads/

    ここから xburst-tools_201105.tar.bz2 を取ってきて足りない ファイルを埋める。(jzboot 全部, xbboot 全部)

    基本的に

    ./autogen.sh
    ./configure --enable-firmware CROSS_COMPILE=mipsel-linux- --prefix=/usr --sysconfdir=/etc

    とするようだ。

    さて、最初に引っかかるのは、libconfuse 。confuse-2.7.tar.gz これをインストールして再挑戦。

    次に引っかかるのが、 libusb の 1.x 。これはパッケージがあったので、devel をインストール。

    バイナリの作成に カーネル作成で使った Toolchain (mips-linux-gnu- ) を使ってみたのだが ... gcc のオプションに -EL を指定しないと Bigendian になってしまうようで 具合が悪い。

    ここを直しても xburst_stage2 のビルドで nrecognized option `-call_nonpic' なんて言われてしまう。

    configure で --disable-firmware とすると xburst_stage1 , xburst_stage2 を作らないらしいので、これで ビルドしてみたら とりあえずツールだけを作成して正常終了する。

    qt 版は、usbboot の下にある QtUSBBoot , configure 未対応だから qt4 環境を用意して手動でビルド。

追記: ACT8600

    PMU (Power Managiment Unit) として ACT8600 というチップが使われているのだが、思いついて ググってみたら データシート が見つかった。

    よくよく見れば ... Advanced PMU for Ingenic JZ4760/60B/70 と書いてある。なんと専用!

    ... ほかのプロセッサ専用の チップもあるから、専用といっても 最適化したという意味でしかない。I2C で 電圧をプログラミング可能な Step-down 3ch と Step-up 1ch の DC-DC コンバーター や 数 ch の レギュレータ、 バッテリー充電の機能まである。... なるほど こいつが充電していたのか。

    さて、充電のための ピンは、

    nSTAT : 充電中 on になる Open Drain 出力 (基本LED用 , 状態はレジスタでも読める)
    ISET : GND との間に入れる抵抗値で充電電流を設定
    CHGLEV : 充電電流の制御 L: 75mA H: 450mA or 900mA (最大)

    CHGLEV が充電電流を制御できるピンなのだが、充電自体を Off にはできないようだ。たぶん L が USB 充電 + フル動作の設定で、H は、AC アダプタ または USB 充電 時の充電設定。

    その他に機能はないか 調べてみると... レジスタでいくつか設定できる項目が ...

    APCH 0xA1 bit 7 に SUSCHG という 項目がある。これは 1 で充電を サスペンドするもの。

    ついに充電停止のやりかたを見つけたようだ。

    さて、もうすこし調べてみる。充電を停止するだけでは、バッテリーを減らすことはできない。無理やり 50% などにすることが出来そうかどうか ...

    よくわからないのだが ... ONQ3(OTG 0xB0 bit5) というレジスタがある。これは、USB を 外部電源として 使うかどうかの制御のようなのだ。USB は OTG もサポートしているから、電源があっても使わない設定が 出来るに違いなく それはこれではないか と思える。

    これらのことが分かったので、USB でホストと常時接続しても バッテリーを 50% に押さえるような使い方はできそうだ。ところで、サスペンド時はどう設定できるのか? ACT8600 はたぶん生きているので、そのまま という設定は可能なような気がする。だが、外部電源があれば、サスペンドそのものをしない(スリープはする) という やりかたはできる。そうであれば、サスペンド時は、デフォルトの動作(= 充電する)ということでも良いのかも知れない。あと電源 Off 時。このときの動作の設定は無理そう。やれるのかも知れないが ... デフォルトの動作(= 充電する)で良さそう。

    以上考察してみたが ... これは Paladin と Basic のみが関係する。Philips の 機種でも 適用できそうではあるが、Ronzi A3 は 関係ない。Ronzi A3 だと ACT8600 は使っていない。

    ACT8600 関係のコードを見てみる

    drivers/power/act8600_power.c
    drivers/power/jz47xx_battery/act8600_interface.c
    include/linux/act8600_interface.h
    include/linux/act8600_power.h

    関係ありそうなのはこのあたり。act8600_interface.c が、android としてのインターフェイスを 受け持つのだろう。ちょっと見てみる。

    act8600_read_reg(ACT8600_APCH_INTR1,&intr1);
    act8600_read_reg(ACT8600_OTG_CON,&otg_con);

    こんな感じで I2C の先のレジスタを制御している。( 書き込む場合は act8600_write_reg()) 。

    config 関係は、

    CONFIG_ACTBAT_DC
    CONFIG_ACTBAT_USB
    CONFIG_ACT8600_HAS_CHARGE_LED

    ACTBAT_DC は、AC アダプタからの 充電サポート。ACTBAT_USB は、USB からの充電サポートということらしい。ACT8600_HAS_CHARGE_LED は LED のありなしで制御をちょっと変えている -- 意味がわからない。

    さて、上記の制御関係。

    case ACT8600_APCH_STAT_STATE_SUSPEND:
    :
    act8600_set_q3(1);
    :

    なんて 関係ありそうなコードが。充電のサスペンド状態を見つけると 無条件に外部電源を enable にするような雰囲気。ここは変えないと。

    次に act8600_power.c

    probe で、 act8600_set_q3(1) をやっている。それ以外には、boards/npm702/npm702-misc.c 。(0) としているところはない。

    ちなみに 充電のサスペンドは、バッテリーが抜かれたり、電源異常? でも起きる。バッテリーをわざと消費したいのでなければ、外部電源にすみやかにするわけだ。

    制御的には、バッテリーをわざと消費したい という状態を作って act8600_set_q3(0) とするとともに 充電をサスペンドすれば良さそう。 で、状態をアプリから設定できるようにする 。そのために /proc に制御用のエントリを作ったりしてインターフェイスを作る。

    こんなところか。

    ところで ... RTC が結構ずれる。10 分とか平気で。

    /*new cpu need rtc power 3.3v , use pmu default value */
    if(strcmp(jz4770_cpu_version,JZ4770_V1)) {
    /** change rtc power to 2.35V **/
    act8600_write_reg(0x91,0xd0);
    act8600_write_reg(0x90,0x17);
    act8600_write_reg(0x91,0xc0);

    こんなコードがあるのだが ... 電圧を変えたらずれも少しは変わるのかなと思ってみたり。
    試してみたいような ...
posted by すz at 18:27| Comment(9) | TrackBack(0) | Jz47xx(Linux)

2012年01月16日

Jz47xx アンドロイドカーネルソース

アンドロイド用のカーネルソースがついに手にはいった。

    http://bbs.imp3.net/thread-10520163-1-1.html 

    ものはここ。カーネルだけでなく Android のソース で 333MB 。教えてくれた fun さんに感謝。

    一見すると不完全なソースに見えるが、Ingenic は前から 標準カーネルに上書きするソースだけを提供している。これもまた、ベースとなる 2.6.32.9 に上書きすれば良いはず。

    さて、まず確認したいのは、defconfig がどうなっているか? ベースとなるものがないとビルドするのは大変なのだ。

    arch/mips/configs を見ると

    • pisces_defconfig
    • npm701_defconfig
    • npm701_ab_defconfig
    • maple_defconfig

    がある。pisces というのは、Ingenic が出している リファレンスのボード(だと思う)。npm701 は novo7 basic のこと。2 種類あるのは何だろう? maple は何?

    ともかく、basic 用はビルドできそうだ。ひとまず安心。paladin は分からないが、なんとかなりそうな気がする。(カーネルは共通という気もするが まったく未確認)

      npm701 : CONFIG_NPM701_V_1_0=y
      npm701_ab: CONFIG_NPM701_V_1_1=y

      npm701 用カーネルの ver 1.0 と ver 1.1 の違いということで、npm701_ab を使うのが正しそう。paladin で使えるものなのかどうかは、コード見ても分からないはず。bootimg の中のカーネルだけ basic 用を 入れて動けば 共通かどうかは確認できる。

      追記: V_1_0/V_1_1 の違いは、カーネルの違いではなく ボードの違いだった。V_1_0 はたぶん Basic のプロトタイプで GPIO の割り当てもだいぶ違うようだ。このノリだと GPIO の割り当てが変わってしまっていると思えるから、Paladin 用カーネルは 作るのが難しそう。

      この割当は、arch/mips/mach-jz4770/boards/npm701/npm701.h に定義されている。一例をあげると次のような割り当てがある。

        GPIO_SD2_VCC_EN_N
        GPIO_HA2605_INT
        GPIO_VOLUMEUP
        GPIO_OTG_ID_PIN
        GPIO_HDMI_INT_N

        GPIO_LCD_PWM
        GPIO_USB_DETE
        GPIO_CHARG_DETE
        GPIO_CHARG_SET
        GPIO_LCD_VCC_EN
        GPIO_TP_DRV_EN

      要するに内部デバイスの 状態とか 電源ON とか ボタンとか そういうものの GPIO 割り当て。V_1_0 と V_1_1 でも結構違うが、basic と paladin の基板はまったく違う。GPIO 割り当ても随分違うことを覚悟しないといけない。

      Linux が動いている実機があるわけで、このうちのいくつかは、割り当てを見つけ出せるだろう。最悪はそういう努力をして 見つけていけば良いのだが ... 新機種もあるし コードを貰えるように努力した方が実りが多そうだ。

      ちなみに見つけるには、いろいろヒントがある。出力ピンは 、GPIO が出力に設定されているはずだし、割り込みに使うピンは、そういう設定がされているはず。デバッグメッセージもヒントになるものがあるかも知れない。これらで条件を絞った上で、実際の動作での状態変化を見る。... といっても簡単な話ではないが。

    さて、次にチェックするのは、どんな機種用のコードがあるか?
    arch/mips/jz4770/boards には上記のものがあるが、jz4760 と jz4760b もある。

      jz4760 /jz4760b
    • z800
    • lynx
    • lepus
      (のほかにもいくつか)

    4760/4760b 共に同じ機種がある。lepus は Ingeic が出している リファレンスのボードだが、lynx (jz4760) は Ronzi A3 , lynx (jz4760b) は、ramos V65PRO のはず。

      CONFIG_JZ4760_RESET_HIBERNATE=y
      CONFIG_TOUCHSCREEN_JZ4760=y
      CONFIG_FB_JZ4760_ANDROID_IPU=y
      CONFIG_FB_JZ4760_ANDROID_LCD=y
      CONFIG_JZ4760_ANDROID_LCD_USE_2LAYER_FG=y
      CONFIG_FB_JZ4760_ANDROID_TFT=y
      CONFIG_JZ4760_HDMI_DISPLAY=y
      CONFIG_JZ4760B_AOSDC=y

      本題とはあまり関係ないのだが、JZ4760 と共通のものが結構ある。FB や IPU が同じなのは、ユーザランドも基本同じということで結構嬉しかったりする。

    本当にビルドできるのかどうか分からないものの Ronzi A3/V65PRO 用のコードがあるのはうれしい。IQQ M1 はないようで残念。

    なぜカーネルソースを待ち望んでいたか .. というと 改造したいからだ。改造したい内容は Android として使う以外の用途も想定している。

    とりあえずやってみたいこと。

    • USB gadget に ether を追加

      Linux マシンや Windows に USB でつなぐことが多いのだから、その間 Network も HOST からルーティングしたい。

      単独のデバイスだと SmartQ でやったことがあるが、Android として使うのなら、複合デバイスとして 作り直さないといけないかも知れない。設定レベルでできるものなら嬉しいが、まずはソースを見てみないと。

    • NFS や CIFS クライアント , NFS サーバ

      こういったものは、Linux マシンとして使うためには便利なのでビルドしたい。既存のカーネル用のモジュールとして作れるかどうかは、config 見てみないとはっきりしない。

    • binfmt_misc

      これあると開発には便利なはず。組み込んでおきたい。

    • USB ドライバ

      どれだけ標準に組み込まれているのか分かっていないが、足りないものはあるだろう。既存のカーネルは module にしていないように思えるが、これまた調べていない。

        defconfig を grep して整理してみると ...

          CONFIG_USB_HID=y

          CONFIG_USB_SERIAL=y
          CONFIG_USB_SERIAL_GENERIC=y
          CONFIG_USB_SERIAL_OPTION=y
          CONFIG_USB_SERIAL_VIA=y

          CONFIG_USB_NET_AX88772A=y
          CONFIG_USB_NET_CDCETHER=y
          CONFIG_USB_NET_DM9601=y
          CONFIG_USB_NET_QF9700=y
          CONFIG_USB_NET_NET1080=y
          # CONFIG_USB_ACM is not set
          # CONFIG_USB_SERIAL_PL2303 is not set
          # CONFIG_USB_SERIAL_FTDI_SIO is not set
          # CONFIG_USB_SERIAL_PL2303 is not set

          CONFIG_USB_STORAGE=y
          CONFIG_USB_STORAGE_DATAFAB=y
          CONFIG_USB_STORAGE_FREECOM=y
          CONFIG_USB_STORAGE_ISD200=y
          CONFIG_USB_STORAGE_USBAT=y
          CONFIG_USB_STORAGE_SDDR09=y
          CONFIG_USB_STORAGE_SDDR55=y
          CONFIG_USB_STORAGE_JUMPSHOT=y
          CONFIG_USB_STORAGE_ALAUDA=y
          CONFIG_USB_STORAGE_ONETOUCH=y
          CONFIG_USB_STORAGE_KARMA=y
          CONFIG_USB_STORAGE_CYPRESS_ATACB=y

          CONFIG_USB_BELKIN=y
          CONFIG_USB_ARMLINUX=y
          CONFIG_USB_NET_ZAURUS=y
          CONFIG_USB_VBUS_POWER_CALLBACKS=y

        HID は入っているし、USB メモリや 有線 Ethernet も 大丈夫そう。シリアルは貧弱で ACM すらない。かわりにどうでも良さそうなものが入っていたり。

        基本的に =m がほとんどない。そのため、デバイスを追加するのには module だけの addon ではなく、カーネルも置き換えが必要そう。

      とりあえずは、この程度。USB デバイスになる機能は、PC では使えないから 興味深い。

      そのほかだと何だろう?

    • 充電を 50% ぐらいで止める機能

      こういうのがあると良いような気がする。バッテリーを常に充電するのはどうかと思うので。
      開発用専用には バッテリーを外してしまっても良いかも知れないのだが ... Paladin などは、USB からの電力共有だけで動くのかどうか? Rozi A3 は問題ないのだが、殻割りしないといけないし、UPS としての機能が使えないというのも もったいない。

      ところで、なぜ充電中に 残量が分かるのだろう? ときどき充電を止めて測定している? ならば、話は簡単なのかも知れない。

    Wifi と USB

      Ronzi A3 の Wiki は、USB ドングルの中身のようなモジュールが メインボードにつけられている。これを外すことは簡単で Wifi が使えなくなる代わりに USB の HOST 専用 ポートを 1 つ確保できる。たぶん V65PRO も同じ。

      novo7 新機種の legend には、USB HOST の標準コネクタ(Type A メス)がついている。

      よく知らなかったのだが、内臓 Wifi は USB ではなさそう。SDIO ? ちなみに これのドライバは、ソースコードもなく module になっている。

        CONFIG_JZ4770_MSC0_BUS_4=y
        CONFIG_JZ4770_MSC1_BUS_4=y
        CONFIG_JZ4770_MSC2_BUS_4=y

        3 つの SD/MMC が Enable になっている。たぶんこれ。
        (fun さんのコメント 参照 MSC0 : internal Flash / MSC1 : Wifi / MSC2 : microSD )

      そうなると basic や paladin では USB HOST は空いていることになる。... あ、basic には 2 個目のカメラがあった。ちゃんと調べれば分かると思うが、解像度の高いほう (basic では back ) は Jz4770 直付けで 解像度の低いほう は USB だと思う。

      ちなみに、basic は、ここに殻割りを含めた詳細な記事があるのだが、基板の裏 (液晶と反対側)に シリアルらしき パッドがある。

      paladin はどうなのだろう? 探してみているのだが、分解写真を見つけられていない。まぁ、自分で殻割りしてみれば良いのだが、だれか分解するだろうと思って他力本願になっている。

      追記:fun さんに教えてもらった URL に paladin の分解写真がある。


      内部には、USB 引き出し用らしき 4pin コネクタのパターンがある。これは改造の楽しみがありそう。

        追記: 違うかも。抵抗膜式タッチパネルも 4pin で この位置ならそれもあり得る。その場合は、JZ4770 の専用端子に接続されていることになる。GPIO の機能もあれば 他の使い方もできそうだが、残念ながら アナログ専用。

        端子のピッチは、1.0mm (か ひょっとすると 0.8mm) 。適合するコネクタは、フラットケーブル用のような気がする。たとえば これとか。そうであれば、ますます タッチパネルのような気がしてくる。

        そうであっても、カーネルがイジれれば工夫次第でなにかに役に立つかも知れない。たとえば、8 個〜10個のボタン入力(同時押し可能)ぐらいには使えそう。



      こちらは全体。液晶のコネクタに互換性があるものが出れば、入れ替えることも可能かも知れない。ちなみに basic や aurora とは全然違う。(advanced II/elf とも違うのだろうか?) taobao では、結構リプレース(or 修理)用の液晶モジュールが出ているから、後に解像度などが違うものが手に入る可能性も皆無ではない。

      追記: paladin の裏側



      paladin を分解する人がボチボチ出て来ている

      この写真は、裏側をしっかり撮ってくれているのでありがたい。

      よく見れば UART2 TXD と UART2 RXD のシルクが見える。端子は、USB コネクタ近くの 3 つのランドらしい。

    カーネル開発のすすめ

      Jz47xx を使った basic / paladin は、カーネル開発に向いている。USBbootTool を使えば、いつでも元に戻せるから、たとえ動かないカーネルを作ってしまったとしても 文鎮になるリスクは少ない。( ただし、カーネルはなんでもできてしまうから、ハードウェアを壊してしまう可能性がないわけではない。そうなれば、元に戻せても意味はなくなる。)

      一般的に Android は ブートローダ と recovery.cpio.img さえ生きていれば、壊れたカーネルを書き込んでも 元に戻せはする。だが、署名つきの update.zip を作成しないと、作ったカーネルを試せないし 少々手間が増える。それも面倒だが、ブートローダ か recovery.cpio.img が壊れてしまえば、元に戻すのが とても困難になる。

        普通の SoC だと、JTAG という機能で ブートローダ を書きこんだり しなくてはいけないのだが、専用の装置と ツールが必要で 敷居が高い。

        Jz47xx のように 簡単に復旧できる ものは、少数派。

        novo8 の AMLogic AML8726-M は、SD card から 復旧できるようだが、カーネルソースが 入手できるものなのかどうか?

        TeleChips tcc8803/8902 は、USB からリカバリーできるし カーネルソースも入手可能だが、このチップを採用したタブレットは、今は あまり人気がない。

        ついでに書いておくと、Jz47xx を採用した機器は、ほぼ 特定のボタン+リセット で USBbootTool が使えるようになっている。 殻割りなど特殊なことをする必要もない。これは、SoC メーカの Ingenic が このツールを公開していて 十分認知されているのが理由として大きい。

      そして、jz47xx タブレットは、いまのところ NAND Flash を直接使うのではなく、SD カードの中のコントローラを通してアクセスしている。

      これも メリット。SD カードが中に入っているようなものなので、UBI とか yaffs2 とか 一般的ではないレイヤー を使わなくても済む。

        NAND Flash を直接扱うと、構成に関する情報の扱いが面倒なのだ。何回書き換えたかといった情報や代替ブロックの情報を壊さないようにしないと 。

      これらの特長があるので、basic / paladin は カーネルをいじるのに向いているのだ。

      Ronzi A3 や V65Pro もまた 向いてはいる。ただ、入手したカーネルソースでビルドできるかどうか分からない上に Android として動かすには ユーザランドとの互換性とかがあるので、敷居が高そう。Ronzi A3 / V65PRO はまだ入手できるのだが、ファームウェアがアップデートされない。いずれ入手できなくなることを考えると あまり労力をかけたくなくなる。

      追記:いくらかさわって分かってきたのだが、これは 基本 Android 2.2 用のカーネルなのだ。basic/paladin は これをベースに変更していって ICS に対応させたと言える。そうであれば、Ronzi A3/V65Pro 用カーネルはビルドできそうだ。そして flash/sdcard へのアクセスが遅い問題が解決されているかも知れない。インターフェイスの変更にしても、Ronzi A3/V65Pro は、カメラはもとより 3G-sensor すら持っていない。変更があったとしても関係ないだろう。... となると これらも試してみたくなる。

    カーネルビルドを試す(1)

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

      これを linux-2.6.32.9 に適用した上で android2.2-npm701-r9738/kernel のファイルを上書き。

      次にクロスコンパイル環境だが、android-ndk-r6m-linux を使うことにしよう。

        設定するのも面倒なので、toolchains/mips-linux-android-4.4.3/* を /usr に コピー。

        方法は、tar で一旦固めて展開した。
        例:

        tar -C /opt/android-ndk-r6m-linux/toolchains/mips-linux-android-4.4.3 -cvf XXX .
        tar -C /usr -xvf XXX

      で、最初のトライ

      # export CROSS_COMPILE=mips-linux-android-
      # arch/mips/configs/npm701_ab_defconfig .config
      # make oldconfig
      (プロンプトが出るが、とりあえず全部 デフォルト)
      # make

      結構進むのだが、arch/mips/kernel/process.o で

      121: Error: unrecognized opcode `s32i2m xr16,$2'

      でエラー。これは MXU 命令だ。(以前書いた記事

      arch/mips/include/asm/mxu.h で使っている。

      ... 昔のカーネルにはなかった MXUレジスタ (16 個) のセーブリストアが入っている。
      それはともかく mxu_as を as の前にフィルタとして実行すれば良いのだが、さて。

      最初は、ビルドできるかどうかの確認を優先して、arch/mips/include/asm/cpu-features.h の cpu_has_mxu を 0 に固定することにした。

      これでともかくも ビルドは通る。make zImage も OK 。

      ところで、make clean/make distclean はエラーになる。これは、arch/mips/mach-jz4770/boards/Makefile に 存在しない board が含まれているためで、編集すれば OK。

    ファイルを整理

    カーネルビルドを試す(2)

      さて、mxu はどうしよう。

      as をいじくるよりも cc1 の方が楽だと気がついた。cc1 は必ず 標準出力に 出力するから。

      /usr/libexec/gcc/mips-linux-android/4.4.3/

      ここに cc1 があるとする。cc1 を cc1.org に rename して、同じディレクトリに mxu_as を置く。

      そして

        #!/bin/sh

        DIR=`dirname &0`

        $DIR/cc1.org $* > /tmp/$$-xxx
        egrep -i '(S32I2M|S32M2I)' /tmp/$$-xxx > /dev/null
        if [ $? == 0 ]; then
        $DIR/mxu_as < /tmp/$$-xxx
        else
        cat /tmp/$$-xxx
        fi
        rm -f /tmp/$$-xxx

      こんなスクリプトで cc1 を置き換える。わざわざ XMU 命令があったときのみ mxu_as を使うようにしている。よくわからないのだが、こうしないと エラーが出るものがあるのだ。

      このやり方は 適当だから カーネル専用。あまり良い方法でもないが、兎にも角にも MXU 対応カーネルはビルドできるようになった。

      結局編集しないといけないのは、arch/mips/mach-jz4770/boards/Makefile のみになった。

      追記:簡単に分かるとこだけ。
      drivers/usb/gadget/f_mass_storage.c:
       NPM701_V_1_1 だと npm701 にならない。
      arch/mips/mach-jz4770/boards/npm701/npm701-misc.c
       get_board_type() で npm701 という文字列をリターンしている。
       (Paladin のとき修正忘れに注意)

    シュリンク版カーネルソースリスト

      FILES-SHRINKED-BASE-ingenic-2.6.32.9.txt
      というのを作ってみた。

      npm701_ab_defconfig でビルドする際に使用するファイルのリストで、このファイルだけを tarball にすると 10MB ほど になる。

      もっとも config を変更すれば、必要なファイルが増えるので、これを完全に信用するのではなく、ベースとして使う。

      ビルドすると 依存関係のファイルが .xxx.cmd という名前 (xxx はファイル名) で作成されているので、ここから スクリプトで抽出した 使用ファイルと ベースをマージすれば、かなり 信用できる リストになる。

      作ったリストを元に一旦 tarball を作り、ビルドと distclean ができるか確認するようにすれば、完全なものになる。足りないファイルが出るかも知れないが、手動で対応できる数になるはず。

      何故こんなものを作るかというと、改造したものの tarball を小さくしたいため。あと grep して検索するときに、関係ないファイルが出るのを防ぐ目的もある。tarball を作らなくとも リストだけ作っておくのも 有用だ。

    カーネルソースコードを見てみる(1)

      バッテリーをたとえば 50% までで止める ... なんてことはできるのだろうか?

      drivers/power/jz47xx_battery.c
      arch/mips/mach-jz4770/boards/npm701/npm701-misc.c

      このあたりが実際のコードらしいのだが ... 充電を止める機能は実装されていないようだ。
      どうも 充電中と放電中で、% を求めるパラメータが違うだけらしい。

      さらに、CHARG_DETE , CHARG_SET 共に使っていない。USB か DC から電源供給されれば、即充電中 ということになるようだ。

      したがって、今のコードは 充電を止めることはできない。では CHARG_SET をなんとかすれば、止められるのだろうか? これをやってみるためには、充電 IC を確認して そもそも止めるために なにをするのか調べないと。

      あと、スリープしたときには、INPUT_PULL 状態になる。PULLUP か PULLDOWN かは ピンによって決まっている。(npm701v11-pm.c より) 充電を止めるなら、この状態設定も対応しないといけない。

      結論としては、CHARG_SET が機能すれば、コードを書いて対応させることで そういう機能を作れるかも知れない。... といったところ。

    paladin GPIO 調査(1)

      徒労に終わるような気がするが、簡単に調べられるものは調べてみよう。

      まず、実機の /proc/interrupts を cat してみる。... と GPIO に割り当てられたものがすぐ分かる。これでただちに 10 個。

        73: 48262 GPIO mma8452
        94: 2 GPIO end call key
        120: 0 GPIO jz-msc (gpio)
        123: 5348 GPIO ldwzic_ts
        178: 1 GPIO volum down key
        206: 0 GPIO otg-id-irq
        211: 0 GPIO jz47xx_battery_act8600
        221: 0 GPIO volum up key
        230: 1 GPIO menu key
        233: 0 GPIO back key


        npm701 は、GPIO_OTG_ID_PIN GPE14 となっているのだが、paladin は、206 = (6 * 32) + 14 。GPIO が 64 オフセットされていると仮定すると 同じ GPE14 。

        MSC2_HOTPLUG_PIN=GPIO_SD2_CD_N=GPB24 だが、jz-msc も GPB24 。

        GPIO_MMA8452_INT1 は GPA9 だが、mma8452 も GPA9 。ただし、INT2 の方はない。
        GPIO_GT801_INT は、GPB27 だが、ldwzic_ts も GPB27 。

        けっこう互換性があるのかも ... ただ、まだまだある。

      あと、/proc/jz47xx_battery/info
                                        
        capacity: 100
        max_vol : 4050000
        min_vol : 3600000
        dc_chg_max_vol : 4150000
        dc_chg_min_vol : 3740000
        usb_chg_max_vol : 4050000
        usb_chg_min_vol : 3675000
        battery_mah: 4000
        dc_charg_ma: 750
        usb_charg_ma: 400
        update_time: 1326873997
        curve:
        -- NULL --

      これで、npm701-misc.c の jz47xx_battery_info の値が分かった。ただ、npm701-misc.c の値とはちょっと違う。
      basic 実機の jz47xx_battery_info も違った。

        capacity: 99
        max_vol : 4080000
        min_vol : 3600000
        dc_chg_max_vol : 4120000
        dc_chg_min_vol : 3720000
        usb_chg_max_vol : 4120000
        usb_chg_min_vol : 3675000
        battery_mah: 4000
        dc_charg_ma: 750
        usb_charg_ma: 400
        update_time: 1326894417
        curve:
        -- NULL --

      次に実機どうしの dmsg の違いから

        basic:
        jz_i2c0 jz_i2c0.0: JZ4770 i2c bus driver.
        jz_i2c1 jz_i2c1.1: JZ4770 i2c bus driver.
        jz_i2c2 jz_i2c2.2: JZ4770 i2c bus driver.
        i2c-gpio i2c-gpio.3: using pins 153 (SDA) and 156 (SCL)
        i2c-gpio i2c-gpio.4: using pins 6 (SDA) and 3 (SCL)
        i2c-gpio i2c-gpio.5: using pins 103 (SDA) and 102 (SCL)
        Device 0x5a with i2c speed:100K
        act8600_power:
        1 26 1
        4 87 1
        5 49 1
        6 57 0
        7 57 0
        8 36 0
        --
        input: jz-gpio-key as /devices/platform/jz-gpio-key/input/input0
        input: jz-remote as /devices/platform/jz-remote.2/input/input1
        Device 0x62 with i2c speed:100K
        input: ha2605_key as /devices/virtual/input/input2
        input: touchscreen as /devices/virtual/input/input3
        --
        jz_lcd_panel: AT070TN93_panel_probe(): board_pin: LCD_POWERON=0, LCD_RESET_PI
        N=139.
        panel AT070TN93 selected
        --
        mmcblk0: mmc0:0002 CHYUA 3.69 GiB
        mmcblk0: p1 p2 p3 p4
        --
        HDMI-GPIO_I2C: SCL(32*3 + 6), SDA(32*3+7)
        HDMI reset pin :(32 * 0 + 0)
        HDMI hotplug pin :(32 * 3 + 4)
        HDMI hotplug Level: 1 ,connect_active(0)
        HDMI driver in HDMI_HOTPLUG mode !
        HDMI ite6610_drv_probe done!
        HDMI ite6610 driver register done!
        --
        sensor_name:gt2005 id:0 facing:0
        ===gc0308_power_down==
        sensor_name:gc0308 id:1 facing:1
        default is gc0308
        CIM--- get new page!
        CIM--- get_max_mem_size
        CIM--- preview size = 1800KB
        CIM--- capture size = 3750KB
        CIM--- mem_size=12750K
        CIM--- order=12
        Virtual Driver of JZ CIM registered
        android init
        android_probe pdata: 804c11c4
        --
        Gt801 touch screen init!
        Device 0x55 with i2c speed:100K
        input: gt801_ts as /devices/virtual/input/input6
        gt801_ts 2-0055: Start gt801_ts in Interrupt mode
        gt801 ts probe suscess!

        paladin:
        jz_i2c0 jz_i2c0.0: JZ4770 i2c bus driver.
        jz_i2c1 jz_i2c1.1: JZ4770 i2c bus driver.
        jz_i2c2 jz_i2c2.2: JZ4770 i2c bus driver.
        i2c-gpio i2c-gpio.3: using pins 153 (SDA) and 156 (SCL)
        Device 0x5a with i2c speed:100K
        act8600_power:
        4 87 1
        5 49 1
        6 57 0
        7 57 0
        8 36 0
        --
        input: jz-gpio-key as /devices/platform/jz-gpio-key/input/input0
        Device 0x 1 with i2c speed:200K
        input: ldwzic_ts as /devices/virtual/input/input1
        input: jz_touchscreen as /devices/virtual/input/input2
        --
        jz_lcd_panel: AT070TN93_panel_probe(): board_pin: LCD_POWERON=0, LCD_RESET_PI
        N=139.
        panel AT070TN93 selected
        --
        mmcblk0: mmc0:0002 CHYUA 7.40 GiB
        p1
        mmcblk0: p1 p2 p3 p4
        --
        android init
        android_probe pdata: 804b0564

      とりあえず気になったとこを抜き出してみた。

      act8600_power が違うのが気になったが、HDMI I/O 用だったかも。
      タッチスクリーン関係がだいぶちがう。あと i2c-gpio の数。

      android_probe pdata は何の値? 後で調べないと。

      GPIO の割り当ては極力同じになるようにしている印象がある。デバイス関係の違いの方が不安になってきた。

      /sys/platform/devices の違い

        i2c-gpio.4
        i2c-gpio.5
        ite6610-drv.0
        jz-remote.2
        jz_cim.0

        power
        uevent

      ITE6610 は、HDMI 関係。jz-remote は、リモコン。

      cmdline の比較

      basic : mem=224M@0x0 mem=128M@0x30000000 console=ttyS2,57600n8 ip=off
      root=/dev/ram0 rw rdinit=/init memcfg=512M
      rd_start=0x80A00000 rd_size=0x000F1C13 cpu_version=4770v1
      paladin : mem=224M@0x0 mem=128M@0x30000000 console=ttyS2,57600n8 ip=off
      root=/dev/ram0 rw rdinit=/init memcfg=512M
      rd_start=0x80A00000 rd_size=0x000F1CA8 cpu_version=4770v1

      rd_size が違う。これはどこに書きこまれているのだろう? mbr-xboot.bin だとすると paladin の 1.2 GHz 化は、ちょっとまずい。

        これは、mbr-xboot.bin で実際のサイズを元に計算しているから大丈夫だった。


      あと、4770v1 って何? ひょっとして 40nm 版は v2 なのか?

    作ったカーネルを試す (basic)

      USBbootTool:n7b_burn_tool.zip も使える。
       - 右のチェックボックスのチェックを外すと、指定したものだけを書き込む。
       - mbr-xboot.bin , boot.img のみの書き換えも OK

      mkcfw-v65-2.1.zip の src にあるツールで zImage を入れ替えた boot.img を作り 試してみたところ ...

      不完全なドロイド君が表示されたあと 画面が黒(バックライトは付いている)に。

      元の boot.img にしたら、普通に立ち上がった。(元に戻せることの確認)

      そもそも ツールがダメかも知れないので、動くboot.img を バラす → boot.img の再作成で確認しないと。

      厳密にはちょっと違うが、再構築しただけの boot.img は立ち上がった。

        元のやつは、0x240 からの SHA_DIGEST の後ろ 0x260 から 8 バイトの データが入っている。これだけが不一致。

      そうなると、カーネルが全然ダメということに。シリアルとかつなぐの面倒だしどうやって進めよう?。

      FB 変になっているし、まずは、mem の指定が対応しているか見てみよう。

    4.0.3 のファームウェアのカーネル

      Paladin でのサスペンドが調子悪いので、4.0.3 のファームウェア(2 回目のリリースのやつ)からカーネルだけを取ってきて boot.img を作りなおしたものを試してみることにした。

      なんとなく動いているので、adb で dmesg を見たら ...

        Linux version 3.0.8-svn649 (yliu@android10) (gcc version 4.3.2 (Sourcery G++ Lite 4.3-51) ) #3 PREEMPT Fri Jan 13 17:59:41 CST 2012
        bootconsole [early0] enabled
        CPU revision is: 2ed1024f (Ingenic Xburst)
        FPU revision is: 00330000
        CPU clock: 1200MHz
        PCLK: 200MHz
        Memory clock: 200MHz
        H1CLK: 400MHz
        H2CLK: 200MHz
        AUX clock: 400MHz
        REG_CPM_PSWC1ST = 0x00000017
        REG_CPM_PSWC2ST = 0x0000000b
        REG_CPM_PSWC0ST = 0x00000000
        REG_CPM_PSWC3ST = 0x00000000
        JZ4770 NP_M702 board setup
        Power Management for JZ

      カーネルが fake じゃない 3.0.8 になっていた。

      wifi の モジュールはそのままなので

        Version magic maybe different, please check!!!
        dhd: Unknown symbol dma_map_single (err 0)
        dhd: Unknown symbol dma_alloc_coherent (err 0)
        dhd: Unknown symbol dma_free_coherent (err 0)
        dhd: Unknown symbol alloc_etherdev_mq (err 0)
        dhd: Unknown symbol dma_unmap_single (err 0)

      なんてエラーが。折角カーネルソースを手に入れたのに、動かす前に時代遅れとは ...

      まぁ今まで 3.0.8 に見せかけて動かしてきたのだろうから、インターフェイスは同じかも知れないし、Ronzi A3/V65Pro は 3.0.8 では逆に困ったりするかも知れないし。

      3.0.8 のソースが手に入るまで、もう少し調べていこうかと思う。

      ところで、この カーネル 3 つのドライブが見えるようになった。増えたのは CDドライブ。

      あと、ちょっと試してみたが、動画は具合が悪い。scanning が出たまま動画が再生され終了できなくなった。非互換なところもあるみたいなので、4.0.3 のユーザランドで古いカーネルというのは無理がありそうだ。

    Ronzi A3 用 (JZ4760-lynx) がビルドできないか試す。

      Ronzi A3 は、defconfig がない。あればビルドできるのか? という気もするのだが、ちょっとやってみた。

    • config-n7b-tst1.txt (ベースにした basic 用 / ビルドはできたが動かない)
    • config-a3-tst1.txt 作ってみたもの。

      ただ、 arch/mips/mach-jz4760/boards/lynx/lynx-misc.c で、コンパイルエラーが出る。

      __wifi_power_on()/__wifi_power_off() のところ だが、とりあえず これをコメント化してみると ...

      なにやら ビルドできたのだった。だが、ベースとした basic 用すら動かないわけで、動くことはまず期待できない。それでも ビルド出来たというのは進歩なのだから、ここに記録しておく。

      さて、どうやってデバッグしていこう。まぁ、basic 用を動かすのは、第一歩だから それをやるとして ...

        とりあえずは、adb だけ動かす ramdisk イメージを作って 状態を見れものなのかどうか 調べる。これがクリアできれば、なにが問題なのか分かるかも知れない。

        だめなら、デバイスをどんどん減らしていく。adb だけ動かせるようにして、後はモジュールとか。usb device と adb のドライバは、普通は確実に動きそうなものだが .. これでもダメなら、他の手を考えよう。

        うまくいくようなら、A3 も同じやり方で試す。

      こんなところか。ちなみに、Ronzi A3 をばらしてみると ... 4 つのパターンが並んでいるところがある。たぶんシリアル。最悪はここにシリアルつなぐとなんとかなるかも知れない。

      あとは、LCD に なんとか表示することができるかも知れない。panic した後も表示をしつづけるような仕組みを入れないといけなさそうだが ...

      昔にトライしていた libusb 版 usbboot を使ってカーネルのロード / メッセージの表示ができるようにするとか ... ただ、これはうまくいかなくて途中で放置しているし、JZ4770 用をマージしないといけないので 敷居が高い。
posted by すz at 22:07| Comment(5) | TrackBack(0) | Jz47xx(Linux)

2012年01月04日

ICSメモ

Novo7basic など ICS のカスタマイズについてのメモ


    注意! 変化が速いので、情報はすぐ古くなってしまいます。ここに書いてあることを、鵜呑みにしないよう。常に元に戻す方法を確保してから試すよう心がけること。

フォント

    2.3 では、DroidSansJapanese.ttf を /system/fonts にコピーすればよかったのだが、ICS では、xml ファイルの変更も必要とのこと。(FREE WING さんとこの情報)

    /system/etc/fallback_fonts.xml に追加:

    <family>
    <fileset>
    <file>DroidSansJapanese.ttf>/file>
    </fileset>
    </family>

    (改行コードは LF なので注意)

    どうしても自分で出来ないなら、Font Changer (説明) を試してみると良いかも。(root) と書いてあるから Root化後に導入できる。

nicoWnnG

Youtube

    Youtube.apk が使えるらしい。

    マーケットからインストールできるという話も。
    お薦めは、英語版ファームウェアに入っている Youtube.apk

  • TubeMate

    というアプリも良いらしい。

    動画つながりで ... 「SoftMedia Player」なるものがあって、DLNAサーバー と接続して再生できるらしい。動画プレイヤーは自前ではなく、組み込みの MediaPlayer を使う。

Skype

APK 集とか

    ainol から APK 集(503 MB) がダウンロードできる。paladin 用となっているが basic でも問題ないだろう。

    http://www.ainol.com/plugin.php?identifier=ainol&module=download

    basic での正式ファームウェアは、Android 3.2 2011/12/17 版 で上記 URL でダウンロードできる。1.44 GB のほうは、4GB 用/8GB 用 それぞれが入っているとのこと。

    では 302MB の方は 、8GB 用なんだろうか?

    4.0 は、正式には update として出ていない。赤札天国の firmware 置き場からダウンロードできるこれは 初期ファームウェア(2011/12/21 版)らしい。

      注意! paladin は、未だダウンロードできるファームウェアがない。(2012/1/7 時点)
      ファームウェアを手に入れるまでは、Root化など システムを変更するようなカスタマイズは控えた方が良いだろう。

      4GB 版 basic も 未だ公式ICS はないようだ。8GB用と思われるのが インストールできてしまったが、具合が悪いのは当然なのかも。

        これの原因は良く分からない。8GB 用でも問題なさそうな ... 。そうなると 1.2GHz に無理があるのかも知れない。昔の mbr-xboot.bin を使えば 1GHz になるかも知れないわけだが ... update.zip を作りなおす方法を知らない ... ううm.

      追記: paladin のファームウェアが出た。初期ファームウェア? (osakanataro 氏 コメント 参照) なぜか 788 MB もある。

      これで どうなっても元に戻せる。

        ただし、mbr-xboot.bin の領域が壊れると、update.zip は使えない。その場合でも USBbootTool を使って元に戻せる 方法はあるのだが ... それ用の ファームウェアは出ていない。

        出なくとも なんとか出来るはずではあるが、たぶん出るんじゃないかと思えるし、説明が面倒なので ここでは説明しない。

        追記2: paladin のファームウェアは USBbootTool 専用だった。basic も 3.2 (1.44G) は USBboot 用。update.zip 形式より不便ではあるが確実に インストールできる。

        詳しくは、この記事の下の方を参照。

    https://github.com/i-rinat/mips-apk/downloads

      Opera Mini 4.3 などがある。slatedroid 『[REQ] MIPS Ports of APK's (Updated 30 Dec 2011) 』の記事より。

      http://bbs.imp3.net/thread-10503353-1-1.html

      APK 集(ライセンス許諾済みらしい)。個別にダウンロード可能。
      結局使ってみたのは ES taskmanager ぐらい。

      http://bbs.imp3.net/thread-10503421-1-1.html

      ゲーム集。中国語版ばかりなのでパスしたが、興味があるかたはどうぞ。

    Dalvik Turbo

    MagicCode

      ARM NDK の アプリを動かせるようにするもの。

      MagicCode_ics_v1.1-n7b-n7p.apk

      ICS対応版が出た。(FREE WING さんとこの情報)

      動かせるようになる アプリがかなりある模様。

      4.0.3 までに対応する v1.3 が出ている。

      MagicCode_hc_ics_v1.3.apk

    フォーラム

    ClockworkMod Recovery 5

    • http://androtab.info/mips/ingenic/clockworkmod/

      まずこれをインストールして、

      Superuser-3.0.7-bb-mips32r2-ics.zip

      を clockworkmod で インストールするのがお手軽。

       ※ basic 用と paladin 用は違うので注意。

      バックアップも簡単にできるようになるのでお勧めとのこと。

      ClockworkMod について疎いのだが、Recovery ツールだけが先に出来たということ?
       ※ ClockworkMod は、Recovery ツールで 他のものの一部ではないとのこと。(fun さんのコメント)

      ところで、Root化(Superuser.apk の導入)は、必要なのか?

        Root 権限が必要になるアプリを持っていないし 不要かも。
        もともと 画面のスナップショットを取るのに必要かと思っていたのだが、ICS は標準でその機能を持っている。(音量(-) + 電源ボタン 2秒)
        ただし、busybox 入れ替えはした方が良く セットになっているので、一応入れることを推奨。

    マーケット

      HD安卓市場とか GO Market とかが入っているが、アンインストールして、Ronzi A3 から com.android.vening-2.apk (いつだったか マーケットでダウンロードできた) をインストール。

      ... システムアプリもインスートール出来るのか 。

        -rw-r--r-- 1 root root 3488144 Dec 21 19:08 system/app/com.android.vending-2.apk
        -rw-r--r-- 1 1000 1000 3708455 Jan 10 15:39 data/app/com.android.vending-1.apk

        あとで確認したらこうなっていた。


      ちなみに、GMail com.google.android.gm-1.apk もインストールしようとしてみたが、こちらはエラー .. もともと不要だし問題はない。

    Basic のファームウェア

    • 赤札天国の firmware 置き場

      NOVO7 Basic4.0.rar/NOVO7 Basic3.2.rar が置いてある。これは 8GB の basic の初期ファームウェア (4.0 2011/12/21 版 , 3.2 2011/12/xx 版)

    • aniol ダウンロードセンター(公式)

      公式なのは良いが、レジストとしないとダウンロード出来ない?
      ちなみに paladin のファームウェアも公式に出ている。(2012/1/11)

    • ainovo

      2012/1/05 版 (ICS_MR0 eng.mdliu.20111227.112122) がある。これは上記とは違うもの。英語版?

      中国語アプリが削除されていて Facebook, Kindle, MSN_Windows_Live_Messenger, Pandora, YouTube が入っている。あと AngryBirds とかいくつかのゲームも。

      system.img はもとより boot.img や mbr-xboot.bin も違う。

        system.img の違い (ファイル構成)

        中国語版のみ
         app/Baidu_Input_v2.1.1.47_mips.apk
         app/GoogleServicesFramework.apk
         app/MyGmail.apk
         app/NetworkLocation.apk
         app/com.android.vending-2.apk
         app/com.google.android.apps.maps-1.apk
         etc/permissions/com.google.android.maps.xml
         etc/permissions/features.xml
         framework/com.google.android.maps.jar
         lib/libinputcoreoem-2.so
         lib/libkpencoreoem.so

        ainovo版のみ
         bin/ に *.sh test_* など多数

         bin/write_bootimg
         bin/xplayer
         customize/default_workspace.xml

      Market/GMail は入っていないようだ。信用できないなら自分で入れろ? みたいな感じ。
      だが、カスタマイズのベースとしては良さそうな印象。paladin 用のも いずれ出そう。

      4GB の basic に入れて試してみよう。

    ainovo版ファームウェアを試す

      問題なくインストールでいた。1.2 GHz だが問題ないようだ。

      AnTuTu bench

        basic ICS paladin basic 2.3(+turbo)
        RAM: 229 192 195
        CPU integer: 615 517 517
        CPU float-point: 240 201 203
        2D graphics: 318 319 299
        3D graphics: 431 440 440
        Database IO: 165 145 245
        SD card write: 61 90 79
        SD card read: 117 107 134
        Total score: 2176 2011 2112

      ちょっと試してみた。basic ICS/paladin は SD カードに内蔵 Flash を指定。

      CPU のみが 1.2 GHz で GPU などは変更ないようだ。あと 8GB モデルは少し Write が速い。
      また、以前 basic で Dalvik Turbo VMを試したときの値も併記しておく。

      AnTuTu では、Android Version が変わっても 値があまり変わらない。Dalvik Turbo ですらあまり変わらない。(速くなるのは、何故か DB I/O)

        Qualdant の方は、随分値が下がるようだが、あまり実際の性能を反映していないかも。

      さて、GMail/Market がないわけだが、用意したものを 通常の APK と同じようにインストールできてしまった。ただし、GoogleServiceFramework.apk がないので全然動かない。これも後でインストール。

      だが、ちゃんと動かないような...

      さて、これは後でちゃんとするとして ... ファームウェア自体は問題なさそう。

        How to install Market, Gmail and Maps on the official 4.0.1 firmware 』という記事も出ている。

        抜粋すると

        - # adb push GoogleServicesFramework.apk /system/app/
        - # adb push com.android.vending-2.apk /system/app/
        - # adb push MyGmail.apk /system/app/
        - # adb push com.google.android.apps.maps-1.apk /system/app/
        - # adb push com.google.android.maps.jar /system/framework/
        - # adb reboot

        こう。足りないファイルは以上。中国語版から取ってきても良さそうではある。CWM 用の zip ファイル(N7B-ICS-Gapps.zip)も出ている。こういう風に便利に使われているなら 日本語フォント用も誰か出してくれると良いのに。

      次に CWM を入れてみる。問題ないようだ。

      あとはフォント。これも無事追加完了。

    paladin のファームウェア

      fun さんにダウンロードさせてもらった ファームウェア を見てみた。
      バージョンは ICS_MR0 eng.dmzhang.20111230.155247 。

      788 MB もある が、ほとんどは VFAT に収められた APK集。あと update.zip がなく USBbootTool 専用。

      USBbootTool 専用ではあるが、userdata.img , cache.bin , recovery.cpio.img がない。あるのは、update.zip と同じで mbr-xboot.bin , boot.img , system.img 。あと vfat のイメージファイル。

      paladin 用初期ファームウェアは、vfat のイメージファイルもない。あと、pretest.img というのがあって、recovery.cpio.img の領域に書きこむようになっている。

      おそらく、通常立ち上げでのインストールで system.img の中にある userdata.img , recovery.cpio.img を書き込むようになったのだろう。cache.bin はもともと空だから mkefs で作るようになった?

        paladin では boot.img まで含まれるようになった。recovery.cpio.img で立ち上げたときしか書き込めるはずはないが、CWM 使うのなら関係ないので使う機会がない。

        あと、pretest.img は、最初の通常立ち上げ前しか使えないのだろう。無視して良いはず。

      (ainovo 版) system.img との違い

      paladin ⇔ basic の違いによるもの
       app/Camera.apk (paladin にはない )
       app/Contacts.apk (paladin にはない )
       lib/libjni_mosaic.so (paladin にはない )
       lib/libvariablespeed.so (paladin にはない )
       lib/hw/audio.primary.npm701.so (paladin は npm702 )
       lib/hw/camera.npm701.so (paladin は npm702 )
       lib/hw/lights.npm701.so (paladin は npm702 )
       lib/hw/sensors.npm701.so (paladin は npm702 )

      中国語版 ⇔ 英語版の違いに関係するもの (paladin のみ )
       app/Baidu_Input_v2.1.1.47_mips.apk
       app/GoogleServicesFramework.apk
       app/MyGmail.apk
       app/NetworkLocation.apk
       app/com.android.vending-2.apk
       app/com.google.android.apps.maps-1.apk
       etc/permissions/com.google.android.maps.xml
       etc/permissions/features.xml
       framework/com.google.android.maps.jar
       lib/libinputcoreoem-2.so
       lib/libkpencoreoem.so

      Version の違いによるもの (paladin のみ)
       boot.img
       sndtest.pcm
       testsd.data
       bin/getpartionblkcount

      設定関係 (テキスト)
       build.prop
       customize/default_workspace.xml
       etc/media_profiles.xml
       etc/permissions/tablet_core_hardware.xml
       etc/disk_preparing.sh (ラベル名が違う)

      バイナリファイルは結構違うが、本質的な違いは わずかなようだ。

      ついでに書くと ... USBbootTool で書き込む際に basic 用の mbr-xboot.bin を書くと どうなるのか? 1.2 GHz でちゃんと動いたりするのかも。

      あと、basic 用も update.zip の中にある mbr-xboot.bin , boot.img , system.img を USBbootTool で書き込むことで インストールできそうだ。逆については update.zip の作り方を知らないので 無理。 USBbootTool は、2.3 CFW 用に用意した n7b_burn_tool.zip も使えそう。

    USBbootTool

      n7b_burn_tool.zip も使える。ただし、右のチェックボックスのチェックを外すこと。

      1.2 GHz 化

      basic の mbr-xboot.bin だけを書き込むことで、初期化なしに 1.2 GHz にできる。
      paladin の mbr-xboot.bin だけを書き込めば 1.0 GHz にできる。

        1.2 GHz にしてみたが、スリープさせていると 知らない間に暴走しているようになった。短期間のスリープではちゃんと復帰するのだが...

        1.2 GHz 化のせいかも知れないので、1.0 GHz に戻して様子をみることに。

        追記: 1 GHz に戻しても状況が変わらない。バッテリーが減ってるから、スリープ中になにか起きている?。

      追記: Novo 7 Paladin overclocking to 1.22GHz (and Basic 1.3GHZ)

      なんて記事が出ている。1.2 GHz よりもっとオーバクロックが可能なようだ。paladin の周波数が低いのは何故なんだろう? 手持ちの個体でギリギリの周波数ということ?

    カスタム system.img 案 (paladin)

       fonts/DroidSansJapanese.ttf (追加)
       etc/fallback_fonts.xml (編集 : 上記参照)

       bin/su (追加 Superuser-3.0.7-bb-mips32r2-ics.zip)
       xbin/su (../bin/su を symリンク)
       bin/busybox (追加 Superuser-3.0.7-bb-mips32r2-ics.zip)
       app/Superuser.apk (追加 Superuser-3.0.7-bb-mips32r2-ics.zip)

       app/Baidu_Input_v2.1.1.47_mips.apk (削除 )
       app/PinyinIME.apk (削除 )
       lib/libinputcoreoem-2.so (削除 )
       lib/libkpencoreoem.so (削除 )

       app/MyGmail.apk (削除 )
       app/com.android.vending-2.apk (削除 )
       app/Vending.apk (追加 or vending-2 をそのまま使う?)
       app/GMail.apk (追加 or MyGmail をそのまま使う?)
       app/com.google.android.apps.maps-1.apk (ない場合追加)
       framework/com.google.android.maps.jar (ない場合追加)

       app/NetworkLocation.apk (ない場合追加)
       etc/permissions/com.google.android.maps.xml (ない場合追加)
       etc/permissions/features.xml (ない場合追加)

       recovery.cpio.img (置き換え NOVO7P-recovery-signed.zip)

       build.prop (編集)
         ro.product.locale.language=ja
         ro.product.locale.region=JP
         persist.sys.timezone=Asia/Tokyo
       userdata.img :
         app/apkInstaller.apk (削除)
         app/ES_file_explorer_V2.4.9.8_mips.apk (追加 ainovo版)
         app/MoreLocale2.apk (追加)

      これで作った system.img を USBbootTool でインストールしてみる。
      プレインストールアプリは ES_file_explorer と MoreLocale2.apk のみ。

      userdata.img が小さいためだが、出来たら入れたいものは
       nicoWnnG-2011.1207.1-mips.apk
       MagicCode_ics_v1.1-n7b-n7p.apk
       ES_Task_Manager_V1.2.apk
       TubeMate_1.05.23.150.apk
       com.joeykrim.rootcheck.apk (Tasselhof-RootScript)
       com.speedsoftware.rootexplorer.apk (Tasselhof-RootScript)
       Documents_To_Go_V3.004.apk(ainovo版)
       YouTube.apk(ainovo版)

      基本は、マーケットにないものか ainovo版。system.img も空きは少ないから入れられるのはせいぜいこれぐらい。

        fun さんのコメントで update.zip を作るのは 可能だそうなので、ainol_update_temp_dir を作ってそこにアプリを入れるのが正しく userdata.img に詰め込まない方が良さそう。


      注意: これを作ってリリースするつもりは、ほとんどない。システムアプリはだいたい CWM のパッケージがあるようだし。あとは中国語システムアプリを削除するやつと 日本語フォントを入れてくれる CWM用パッケージがあれば事足りる。


      追記: この構成の動作確認

    • CWM OK
    • GMail/Maarket OK (置き換えたが動作 OK)
    • Font OK
    • 初期言語 , 初期タイムゾーン OK

      どうも大丈夫そうだ。

    パーティション関係

      Disk /dev/loop1: 0 MB, 921088 bytes
      1 heads, 63 sectors/track, 28 cylinders, total 1799 sectors
      Units = sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disk identifier: 0x00000000

      (basic 4.0)
      Device Boot Start End Blocks Id System
      /dev/loop1p1 131072 655359 262144 83 Linux
      /dev/loop1p2 657408 2754559 1048576 83 Linux
      /dev/loop1p3 57344 118783 30720 83 Linux
      /dev/loop1p4 2768896 15220735 6225920 b W95 FAT32

      (旧 basic 2.3)
      Device Boot Start End Blocks Id System
      /dev/loop1p1 131072 655359 262144 83 Linux
      /dev/loop1p2 657408 2754559 1048576 83 Linux
      /dev/loop1p3 57344 118783 30720 83 Linux
      /dev/loop1p4 2768896 16777215 7004160 b W95 FAT32

    基本は同じだが、FAT32 のサイズが小さくなっている。8GB のモデルにきっちり合わせた?

    以前の記事から抜粋。

    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 +------------------------+

    mbr に含まれるパーティション情報と USBBootTool を元に マップを作ると このようになっている。

    system.img のサイズは、ばらばらなのだが、最大は paladin の 240MB+α。一応 256 MB までは大きくすることができる。() の値はパーティション間の隙間。パーティションの情報を変更すれば この部分も使用は可能になる。

    あと、4.0 とかの system.img は、vfat.bin を書きこまなくとも 初期化するようだから user 領域を 広げるのは mbx-xboot.bin の パーティション情報 を変更するだけで良さそう。

    ICS ファームウェアまとめ (2011/1/13)

      上から読んでいっても分からないかも知れないので、まとめておく。

    • basic 中国語版 (4.0.1 ICS_MR0 eng.szhao.20111221.000803)
    • paladin 中国語版 (4.0.1 ICS_MR0 eng.dmzhang.20111230.155247)
    • basic 英語版   (4.0.1 ICS_MR0 eng.mdliu.20111227.112122)

      ICS に限定すると、いまのところ、この 3 種類。

      ファイル構成は、中国語版の paladin/basic であまり違いはない。basic 英語版は、中国語版から 中国語アプリと いくつかのファイルを取り除き、Youtube とかのアプリを加えたもの。

      『ES ファイルエクスプローラを除いて アンインストール可能なアプリを全部削除して basic 英語版 に 含まれるアプリをインストールしたもの』は、『basic 英語版に Market/GMail を追加したもの』に近い。

        basic 英語版にMarket/GMail を追加する N7B-ICS-Gapps.zip( CWM 用) がある。

      これをベースとして次のカスタマイズを行うことを推奨

    • ClockworkMod Recovery (CWM) の導入 (NOVO7B-recovery-signed.zip for basic, NOVO7P-recovery-signed.zip for paladin)
    • Superuser + busybox の導入 (Superuser-3.0.7-bb-mips32r2-ics.zip)
    • 日本語フォントの追加
    • nicoWnnG の導入 (nicoWnnG-2011.1207.1-mips.apk)
    • MoreLocale2 の導入
    • MagicCode の導入 (MagicCode_ics_v1.1-n7b-n7p.apk)
       MagicCode_hc_ics_v1.3.apk (3.2/4.0.1/4.0.3 に対応)

      次は好みで

    • TubeMate の導入
    • Dalvik Turbo の導入 (4.0.1/4.0.3) (Dalvik Turbo CWM Install Files by Pyth0n.rar, ミラー: dalvikturbo-mips32r2-fp.zip)

      あと paladin を 1.2 GHz にする方法がある。(たぶん大丈夫)
       ファームウェアを書き込むときに basic の mbr-xboot.bin に変えるだけ。

      ファームウェアの 書き込み方

        ファームウェアの 書き込む方法には 2 種類ある。

      • ひとつは、update.zip を microSD に置いてアップデートする標準のやりかた。

      • もうひとつは、update.zip に含まれている mbr-xboot.bin ,boot.img , system.img の 3 つのファイルを USBbootTool を使って書きこむやりかた。

        今の paladin のファームウェアは、update.zip の形式になっていないので、後者のやりかたしかできない。前者ができないぐらい壊れた状態でも、後者のやりかたで書きこむことができる。

          注意: VFAT 領域は、勝手には初期化されないようだ。初期化したい場合は、ダミーのファイルを指定して壊す。

        以前 2.3 CFW 用に用意した n7b_burn_tool.zip の USBbootTool も使えるが、右のチェックボックスを外す必要がある。
         わからない場合は ここ参照のこと。
        mbr-xboot.bin ,boot.img , system.img を元に update.zip を作成する方法もあるが、私はまだ勉強中。

      Tips

    • 自力でフォント変更できない人は、font changer を使うと良い。

      これ使うと adb の操作 なしで 全部できることになる。

    • スクリーンショットは ICS の標準機能

      音量(-) + 電源 長押し。

    • 中国語キーボードのアンインストール

      以下のファイルを削除して reboot
       /system/app/Baidu_Input_v2.1.1.47_mips.apk
       /system/app/PinyinIME.apk
       /system/lib/libinputcoreoem-2.so
       /system/lib/libkpencoreoem.so


    ICS 4.0.3


      http://bbs.imp3.net/thread-10548598-1-1.html

      Basic : update_Basic_4.0.3.zip 約 300 MB
      Paladin: update_knight_4.0.3.zip 約 300 MB (4.0.3 IML74K 651)

      公式版 http://bbs.imp3.net/thread-10550694-1-1.html
      Basic : 蜂巣版4.0.3公測固件.zip 約 300 MB (4.0.3 IML74K 715)
      Paladin: 騎士版4.0.3公測固件.zip 約 300 MB (4.0.3 IML74K 715)
      VFAT イメージ:(中国語版アプリばかり?)
       Basic 4GB 用 約 700 MB
       Basic 8GB 用
       Paladin 8GB 用
       

      MagicCode は、v1.3 が必要、DalvikTurboVMは、最初から 4.0.3 に対応
       MagicCode_hc_ics_v1.3.apk (3.2/4.0.1/4.0.3 に対応)
       DalvikTurboVM: CWM用パッケージ
       (ミラー: dalvikturbo-mips32r2-fp.zip)
      カレンダー同期の問題は、GoogleCalendarSyncAdapter.apk の更新が必要らしい。

      その他 CWM 導入済みの場合 2 回同じ update をするのが安全?
       失敗すると Wifi が使えないという問題あり? 2 回目の update で OK となる?

        1回目は、単に recovery.cpio.img を書き込むために行うらしい。
        起動すると /system/ にあるのを flash の所定の領域に格納する。

        2 回目で、それが動くのでアップデートできる。ということ。

        時間がかかるので、adb 使って /system/ にある recovery.cpio.img のバックアップを元に戻して アップデートをすると 1 回で済む。

      Host PC から Disk が mount できないという話も。
       PCのドライバの更新で直る?

      マーケットは、MoreLocale2 で 日本語導入後に接続するのが良い。

      4.0.3 のメリット:
       HTML5 対応?
       FXCameraとDolphinBrowserとPulseがちゃんと動く
       高速化 (Quadrant の結果)

      いずれも未確認、情報を集めただけ。

    Paladin に 4.0.3 (IML74K 651)をインストールしてみる。

      どうも良く分からないのだが、スリープでおかしくなるようになったので、4.0.3 に変えてみることに。

        ちなみに問題が起きたのは、スリープのみ。しかも短時間のスリープでは起きていない。
        現象は、電源ボタンを押しても復帰してこない。バッテリーはかなり減っている。本来ならば、数日間は持つはずで、スリープ中に暴走しているのではないかと思う。

      カスタマイズは、4.0.1 と同じく、上記のようにしたうえで再度 1.2 GHz に。

      何回か、タッチパネルが効かなくなった。が、一旦 sleep してすぐ復帰させると元に戻った。
      タッチしたところを表示させるようにしたところ、タッチパネルは反応しているのにアプリが一時止まっているような現象だった。
      正常ではあるみたいだし、1.2 GHz の影響ではなさそうに思える。

      しばらく使ってみたが、1.2 GHz にしたための不具合はないようだ。ちなみに使っているのは、4.0.3 IML74K 651 。最新版は、715 にまで番号が上がっている。

      4.0.3 から PC 接続で CDROM が マウントされるようになった。

      えんどう豆アイコンがでるが、どうせ使わないし、他のものと置き換えたいところ。/system/etc/cd_rom.iso がそれだから、adb と ドライバ(+ 編集したinf ファイル)の ISO 作っておいて、入れ替えると便利かも。

    Basic に 4.0.3 (IML74K 715) をインストールしてみる。

      CWM の問題があるので、USBbootTool を使った。これだとアプリが全然入らないから却って楽。

      CWM で、Root 化して、DalvikTurboVM を入れてみたのだが、なんかおかしい。

      busybox が エラーになるようになったし、DalvikTurboVM が入っていない。

      Root 化しない方が良いかも。

      それはともかく、715 になると 少し速くなるようだ。

    追記: Custom ROM by pinkflozd

      Paladin Custom ROM by pinkflozd

      とんと疎くなってるのだが ... こんなものが出ている。

        Kernel Features:
        Kernel 3.0.23
        Zram (256mb of compressed swap in ram)
        File scheduler set to BFQ
        VR, SIO, Deadline, CFQ, noop scheduler support
        Cleancache + KTZMEM
        Lot more improvements + Patches
        EXT4, XFS, JFS Support
        TUN + CIFS Support

      気になるのは、これ。XFS, JFS Support なんてカーネルソースがないと作れないだろう。... それはどこにあるのだろう? 

      その他についても徹底的にいじっている感じで Android の範疇を逸脱している感じまでする。なかなか素晴らしい。

    paladin の消費電流

      http://bbs.imp3.net/thread-10628979-1-1.html

      に Jz4770 , A10(Cortex-A8), RK2818(Cortex-A9) の消費電流の比較がある。機種は 7inch 800x480 で似た様なものを選んでいるようだ。(osakanataro 氏の twitterで知った)

      項目が多いので、どこを見るべきか ...

      まずは、憤怒的小鳥 ... Angrey Birds 。Angry Birds は、常に CPU 100 % で動作している。この状況でどれぐらいかというのは、分かりやすい基準かも。測定条件は、輝度 50 % , 音量 50 % とのこと。

      Jz4770  405 - 488
      A10 720 - 871
      RK2818 899 - 1110

      単位は mA だが、どこのポイント? バッテリー?

      動画、H.264 720p, 1080p

      720p 1080p
      Jz4770   276 - 349 372 - 442
      A10 474 - 638 564 - 654
      RK2818 659 - 976 850 - 1143

      720p だとどれも余裕があるから Angry Birds より消費電流が少ない。A10 は 1080p でもあまり増えてない。

      A10 はハードウェアアクセラレータの条件だと思う。RK2818は、NEON を使ったソフトウェアアクセラレータのはず。Jz4770 は、VPU を使っていると思うが、CPU と同じものなので、あまり関係なさそう。

      次に 待机 -- スリープ

      Jz4770   12.2
      A10 10.5
      RK2818 30

      スリープの状態には 2 つある。多分 アイドル状態でサスペンド状態ではない。といっても サスペンド状態は桁が変わるほど低消費電力ではない。DRAM のリフレッシュがかなり電流を消費するので、多分良くてこの 1/2 程ではないかと思う。

      ついでなので、Jz4770 の性能について

      http://www.zdor.cn/news/html/pc/230373.html

      PD10 という低価格 Android (TCC8923: A5 Single 1.2 GHz) の AnTuTu ベンチマークの結果が出ている。これと Paladin 1.22 GHz と結果を比べてみた。

        Paladin 1.22 G PD10
        RAM: 231 249
        CPU integer: 615 526
        CPU float-point: 242 364
        2D graphics: 240 331
        3D graphics: 392 1028
        Database IO: 155 230
        SD card write: 107 24
        SD card read: 102 67
        Total score: 2084 2819

      Total では大差だが、主に 3D の差みたい。2D も大分負けてるけど。
      唯一の救いは、CPU integer で勝ってるところか。これだと 1.0 GHz でも良い勝負。

      Allwinner A10 も PD10 と似た様な感じだったかも。Jz4770 は Mail-400 との差で 2D,3D が負ける。ただ、通常アプリのもっさり具合は CPU integer だと思うので ベンチで負けても体感上は 結構よい勝負のはず。
    posted by すz at 18:08| Comment(19) | TrackBack(0) | android

    2011年12月28日

    JZ47XXの動画デコード

    動画デコードがGPUの機能だと誤解している人が多そうなので、整理してみようかと思う。

    Jz47xx は、PMP用に使われた JZ4755 の世代から 同じ能力の CPU を 2個積んでいる。1 つは 動画専用プロセッサとして使われていて、SMP ではない。

    この CPU は、SIMD 命令を持っていて DCT/IDCT などの動画の処理が高速に出来るようになっている。ARM だと Cortex-A8 以降で NEON という命令群をサポートしているが、それと同じような機能だと考えて良い。

      細かいことを言うと SIMD命令 には、SIMD と SIMD2(JZ475X以降で追加) がある。これらをまとめて XMU(Xburst Multimedia Extension)命令 ということもある。これらの命令の詳細は公開されていないが、それを使った mplayer のソースコードは以下で公開されている。

      ftp://ftp.ingenic.cn/3sw/JZ4770/05mplayer/

      あと、Xburst の SIMD命令は、32bit を対象にする。NEON が 128bit を一気に処理できるのと比べると しょぼいのではあるが、命令が最適化されているのか 実用的なレベルになっている。

    要するにほとんど CPU とそれが持つ SIMD命令 が 動画の処理をしているのだ。

    ほとんどと書いたのは、他にも 動画用の機能があるため。ひとつは、IPU (Image Process Unit) と呼ばれるもの。これは、リサイズと 色空間の変換 をして フレームバッファに 画像を送り込む機能。回転はできない。

      GPU は、回転するときに使われるかも知れないのだが、メインの機能では関与しない(はず)

    JZ4760 からは、CPU の中に bitstream をハンドリングする 機能が加わっている。詳細はよく分からないが、CABAC と呼ばれているようだ。

    さて、VPU だが、上に書いた DCT/IDCT を含めていつかの機能しか持たない。

    • Motion compensation
    • Motion estimation
    • De-block
    • DCT/IDCT
    • Parser (JZ4760以降)

    これで全部。Parser というのがよく分からないが、CABAC を使った 機能に思える。

    JZ4770 は、CPU を 1GHz で動かすが、VPU は 500 MHz にクロックダウンしている。1080p のデコードではもはや フルスピードで動かす必要はないのだろう。


    ファイル → Parser MC IDCT De-block 色空間変換  → LCD
       (bitstream処理) (YUV → RGB)

    CPU/VPU CPU/VPU CPU/VPU CPU/VPU IPU     LCD-IF

    図で書くとこんな感じ。VPU で出来ることは CPU でも出来る。どう分担するかは コード次第。

    さて、JZ4770 の次の CPU として、Xburst1 の 40nm のプロセッサがある。(Roadmap) これには SMP の機能が追加されていることだけが 分かっている。VPU を汎用に使えるようにしたものだと思う。たぶん SMP として使う場合は、VPU は使えない。

      2012年1月発売予定の Aurora/Wizard は、Xburst1 の 40nm のプロセッサを使っているのではないかと思われるのだが、最初から SMP かどうかは分からない。

      対応するのは、結構大変だと思うのだ。最初は、VPU として使うようにして、あとで SMP 対応ファームウェアを出して来るような気がしている。

      あと、40 nm が 1.3 - 1.5 GHz となっているが、ちょっと 低いような。65nm の JZ4770 が 1.2 GHz までいけるなら 1.8 GHz 以上でも不思議はない。これも後で クロックアップするのかも。

    追記: GPU の 解説 URL
    posted by すz at 20:09| Comment(0) | TrackBack(0) | android

    2011年12月20日

    novo7新機種

    novo7 の新機種の情報が出ている。

    ここを見ると

    • novo7 paladin (800x480) カメラ/HDMI出力なし Flash 8GB 499元
    • novo7 basic (800x480) Flash 8GB 599元
    • novo7 advanced II (800x480) RAM 1GB / 899元?
    • novo7 wizard (1024x600) RAM 1GB / 999元?
    • novo7 aurora (1024x600 IPS液晶) RAM 1GB / 1199元?

    CPU は、全部 MIPS で android 4.0(ICS) , 静電タッチパネルなのも全部同じ。

      全部 MIPS というのは間違い。以下は、全部 MIPS の場合の考察

    筐体は全部同じに見える。( 画面外のボタンが消えた? )

    驚いたことに、日本では評判が良かった Allwinner A10 の機種が 消えて、全部 MIPS になっている。何故こういうことになったのか興味がある。あと、advanced II は 一体何が特徴なのか?

    機種として興味があるのは、aurora かなぁ。値段次第だが... 100元刻みだと考えると 899元。これより安いことはないはず。 999元かも知れないが どっちかという気がする。

    そうそう paladin は赤札天国で予約中で 7980円とのこと。カメラがむしろ邪魔な人には良いかも。

      追記 2011/12/27: 予約期間終了で、通常価格(9280円)になったようだ。499元だから 予約中は、16円/元 換算 で終了後は 18.6円/元 換算。まぁこんなものじゃないかな。

      ちなみに pandawill は、送料込み $ 109.99 (8776円)。

    さて疑問と予想

    Advance II とは?

      IPS液晶とは書いてないから CPU か メモリ が違うとしか思えない。4.0 になるとメモリを使うのかも知れないし 1GB のような気がするが、ひょっとすると 1.3 GHz とかクロックアップした 新CPU かも知れない。 従来の JZ4770 だったら 全機種同時発売でも良いぐらいだが、年内に発売されそうなのは、basic と paladin のみ。理由は CPU 待ちに思えてくる。

      1.3 GHz 新CPU + DDR3 1GB

      とりあえずこんな風に予想しておこう。ちなみに 1.3 G Hz の根拠は、年末に 1.3G Hz という噂を見たことがあるから。CPU名は予想できない。案外 JZ4770B だったりするかも。

    なぜこんなことになったのか?

      JZ4770 のマシンは他社からも出ると思っていたのに ainol からしか出なかった。いま考えると、安かろう悪かろうになるのを避けるためにメーカーを絞ったような気がしている。

      alnol 側も CPU だけ違う 2 機種を 出すという変な 製品ラインナップだった。こちらも 今となっては、JZ4770 の販売テストみたいな感じがしてくる。で、テストに合格したのか? ... 日本では散々だったと思うが、中国本国では 売れたのだろうか?

      結果は知らないが、ainol は、MIPS にかけるようだ。そして新CPU も ainol が独占するのだろう。

      そんな関係なら、開発も ainol + Ingenic社 共同で行なっているはず。MIPS 社もからんでいるかも知れない。

      さて、MIPS にかけるという判断ができるための要素。

      MIPS では動かないアプリの問題が解決される見込みがなければ、MIPS only はリスクがありすぎる。よくわかっていないのだが、google がなんらかの手を売って x86/MIPS も 対応されるようになるのだろうか? そうであれば、MIPS だから不利ということにはならなくなってくる。結構 期待してしまう。

    novo7 basic 1機種が出ただけで消える不安があったのだが、 JZ47xx の将来は 思っていたよりは明るいようだ。どう転ぶか分からないが、ここ一年で アプリの問題がなくなり、ある程度のシェアを獲得できれば 当面は安泰かも知れない。

      ... ここまで書いたところで、最初の リンク先 を見直すと、Allwinner A10 の機種があるかも知れないとのこと。

      もしそうならば、残念なことに、上の考察はハズレる可能性が高くなってくる。Aurora が A10 ならば、新CPU の可能性もない。もともと 予想に反して all MIPS らしい というのを前提にしている。前提が崩れるならハズレるのもやむなし。

      あと、Aurora は もうすぐ発表だそうだ。

    何故 ainol は JZ4770 / Allwinner A10 の 2種類を 出すのか?

      2 種類出すとしても、このラインナップだと どれが A10 なのだろう?

      Advance2 が A10 なのは良いとして、1024x600 が IPS液晶 と IPS液晶でないの 2種類なのが引っかかる。
      それに IPS液晶 の 方が JZ4770 で 千元(999元?) という話もある。

      そうなると、IPS液晶 でない方もへたをすると JZ4770 の可能性が。

      普通に考えれば、paladin/basic のみ JZ4770 で あと A10 にした方が 短期的には有利だろう。でもそんな売り方すると JZ4770 の独占(or 優先)権は得られないような気も。

      IPS液晶でないほうが、A10 だとすると また微妙なことになる。いっそのこと両方 IPS液晶 なら すっきりするのだが ... 。

      本当に paladin/basic のみ JZ4770 という可能性もある。そうなれば Ingenic の立場はよほど弱いと 思わざるを得ず MIPS の将来は暗い。どうなるのか、かなり気になる。

      で、本題の疑問なのだが、ラインナップが FIX しないと良くはわからない。とりあえずは、Jz47xx の優先権をキープした上で リスク回避だと思っておこう。そうであれば、いずれリスク回避の必要がなくなれば MIPS only にするはず。そうなれば安泰だが、まったく逆の結果も可能性としてはあり得る。

    新CPUはあり得るのか?

      あくまで希望的推測なのだが、あってもおかしくないと思っている。

      JZ4770 は 65nm プロセスなのだ。もう自分のところでは作っていないはずで、そうであれば ライバルの RockChip の 45nm プロセス(RK2918) と同じでないのが むしろ不自然。

      いずれは、45nm プロセスを採用するのは、ほぼ自明で 問題は時期。それが、新製品が出る今であっても不思議ではないだろう。

      年内 1.3 GHz という噂もあったので、大いに期待してみることにした。

      ところで、JZ4770 の独占(or 優先)権を得るための条件というものがあるはず。リスク回避のための A10 採用を許すにしても JZ4770より上位の機種を出すのを許すとは思えない。そう考えると IPS液晶でない方が A10 というのは納得できる。ただ、JZ4770 が最上位というのは、ラインナップとしてバランスが悪い。paladin のような 普及版以下の機種と同じCPU というのは やっぱり変。新CPU が(存在して)最上位に来ないと収まりが悪い。

    1024x600 の 2機種が両方 MIPS かも

      この記事 には、

        Ainolは上記2機種のほか、Basicをベースに解像度1,024×600ピクセル(WSVGA)のIPS液晶にディスプレイをアップグレードした「NOVO 7 Wizard」、「NOVO 7 Aurora」の発売も予定しています。

      なんて書いてある。A10 を 期待していた人には、がっかりするような内容だが ... 1024x600タイプの基板が共通なら普通にあり得そう。

      まぁ MIPSは、ainol からしか出ないが、A10 は、他社から出るだろうし。

      それはともかく、2 機種ということは価格差が大きそう。200元差では済まないかも。一応 799元 , 999元が予想なんだが、どうなるのかな。

      さて、上位 2 機種とも MIPS なら 本当に ainol は、JZ47XX に社運をかけることになる。それが可能になる条件が成立したと考えられるから、将来は明るそうでなによりだ。

      ... 予想はこれぐらいにしておこう。年末か年明けぐらいに実際に発表されるだろうし。

    Ingenic 社の Roadmap

      fun さんのコメントで、Roadmap が出ていることを知った。

      ここには、Xburst1 (2011年), Xburst2(2012年), Xburst3(2013年?) のロードマップが載っている。

      コメントには、適当なことを書いてしまったが、Xburst1 でも 65nm と 40nm があるような記載になっている。... となると Xburst2 は、2012年のいつかに出るもので、今回でる製品とは関係ない。

      Xburst1 40nm は、クロックが高くなるだけでなく、SMP が 新たに採用されるようだ。一時キャッシュも 2倍。たぶんこれが、Aurora/Wizard に採用されるのだろう。ただ、History で 2012年と書いてあるのがちょっと気にかかる。

        SMP は、今までVPU としてのみ使ってきた コアを 汎用に使えるようにしたものに思える。そうであれば、従来どおりの使い方もできるものかも知れない。Android としての製品は、SMP として使えるものになっていないかも。

        カーネルをはじめ対応するのは結構たいへんかもしれないし、あまり期待はしない方が無難かも知れない。

        追記: Ingenic 社は、CES (1/10 - 1/13) に参加するようだから そのときに NOVO新機種と合わせて 発表かな。それまでは、情報がなさそう。

      それとは、別に Xburst2 があるわけだが、結構すごいスペック。2命令同時実行+ 2スレッド +SMP 。64bit まで対応している。こんなのをいきなり設計できるとも思えないから、MIPS社のコアに切り替わるんじゃないかと思える。Ingenic 社というのは、低価格帯のみターゲットにしているイメージだったが、あまりに意欲的で驚いた。それとも 2012年は、これが低価格帯のコアなんだろうか?

      ところで、チップ(Soc)名 は、どうなるのだろう? Xburst1 が JZ47XX だとすると 40nm は、JZ4780 ? あと 65nm の方も JZ4770B になるような気がすこししている。

      さらに、Xburst2 は? JZ48XX のような ...

      予想をやめようと書いたのに、また書いてしまった。まぁ予想するのは、楽しいのだから仕方がない。

    Novo7 Paladin の 仕様

      Novo7 Paladin がいろいろなところで売られていて、スペックとか がちゃんと出るようになった。
      例えば pandawill のスペックから 抜粋すると...

        Model Ainol Novo 7 Paladin

        Flash Don't support it right now, support HTML 5
        Android Market Yes
        Youtube Yes
        Skype Yes
        Language Czech, Danish, Dutch, English, Spanish, French, German, Greek, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Swedish, Turkish, Chinese

      こんな風に書いてある。

      一応マルチランゲージで Market もちゃんと入っているようだ。

      ちなみに、Flash は No と書いてあるが、他のレビューだと

        Flash: Support Flash 10.3

      となっているものもある。どちらが正解かはよく分からない。

      それはともかく、旧 basic 用の 正式 4.0 ファームウェアが出てくれば、私の CFW も晴れてお役御免だ。

      追記: ... と思ったのだが甘かったようだ。

      赤札天国から basic用のファームウェアが出ているのでインストールしてみたのだが ...

    • 4.0.1 ICS_MR0 eng.szhao.20111221.000803
    • Kernel Version 3.0.8
    • 多言語対応になっている。 .. のだが日本語がない。
    • 1.2 GHz クロックアップ版
    • microSD , 内蔵FLASH ともに、ファイルを転送するとハングアップ。

      1.0 GHz の paladin では、ハングアップしないなら、1.2 GHz の問題? 3.2 も出ているがこれはどうなんだろう?

    ainol のすすめ

      最初の novo7 basic/advanced が出た時 basic を勧める理由は希薄だった。MIPS というハンデがある上に Allwinner A10 の方が 性能が若干上だったりしたからだ。だが、事情は変わりつつある。

      変わった事情というと

    • ICS 一番乗りなど MIPS の ファームウェアの開発に力を入れていることが明らかになった。
    • Ingenic JZ4770 を採用した機種が 他のメーカから出てこず、どうやら独占契約を結んでいるらしいことが分かった。
    • novo7 Wizard/Aurora という最上位機種が MIPS で、どうやら MIPS に社運をかけるらしいことがわかった。
    • Ingenic の Roadmap が出て、40 nm の 新 CPU のみならず、Xburst2 が予定されていることが分かった。

      相変わらず MIPS のアプリ事情は悪いのだが、ここまで力を入れるからには、良くなる見込みがあるのだろう。ひょっとするとそうはならないかも知れないのだが、『MIPS の アプリ対応が進む』と仮定しよう。

      MIPS と ARM の垣根が取っ払われてしまえば、ainol の MIPS 機を 勧める理由が出てくる。

    • コストパフォーマンス

      Paladin をはじめとして、現行はコストパフォーマンスはかなり良い。 Wizard/Aurora も 良いと期待できる。

      現時点のアプリ事情は悪いのだから、コストパフォーマンスが良くないと 相手にされないだろう。魅力はそれだけかというとそうではない。

    • (ファームウェアの)開発力

      ICS 一番乗りしたことからも分かるように、ainol +Ingenic の開発力は充実している。開発が終わったはずの JZ4770 についても 10bit の動画対応だとか、basic の 1.2 GHz 化とかいろいろやっている。
      開発力に差があれば、他の中華タブレットと比べて、ファームウェアの完成度で優位にたてるという期待ができる。

      中華タブレットの欠点は、開発力のなさだと感じている。だいたい、SoC メーカが出す ベースをカスタマイズして 終わりみたいな ... 。SoC メーカ自体がどれぐらい開発力があるかについてもちょっと怪しい。

      『MIPS の アプリ対応が進む』までは、コスパとこれぐらいしか、優位に立てる要素がないのだ。『MIPS の アプリ対応が進んだ』後は、これが優位として残る。... といいなぁ。

      2012年は、xburst1 の 新CPU 以外に xburst2 が予定されている。開発力が分散されてしまうと、思惑通りにならないかも知れない。これが、不安材料。

    2012年の CPU

      ARM について言えば、Rockchip RK2918 と AllWinner A10 の 2つが、優勢だった。特に A10 は人気だった。これらは、両方共最新ではない Cortex-A8 コア。A10 が人気だったのは、動画再生能力や消費電力で優位だったから。

      2012 年になると Cortex-A9 Dual Core に切り替わるだろう。これらに対抗するのが xburst1 40nm ということになりそうだ。

      xburst1 だと Cortex-A8 コアに若干劣るぐらいの性能。SMP がちゃんと使えれば、周波数の差でなんとか対抗出来る感じ。問題は製品が出荷される時期だが、Rockchip / AllWinner には先んじるはずだ。

      xburst2 が 2012年中に出るかどうかは、怪しい。とりあえず、2013年早々だとだと思っておこう。 とい言ってもどうなるか予想できない。Allwinner なんて A10 が出るまで無名だったし。

      Ingenic にしても、JZ4770 が出るまで 低価格タブレットの一角を占めるなど予想できなかった。むしろ JZ4760 しか出せなかった時点で 終わったと思ったものだった。

    追記: FREE WING さんとこの情報が更新

      かなり詳しく情報が載っている。

      ICS での日本語フォント インストール方法とか、要チェック。

      中でも気になったのは、不具合とファームウェアに関するもの。

        ●Novo7 Basic 問題発生

         P1) 画面が固まってハングアップ(死机)
         P2) 画面が乱れてハングアップ(花屏)
         P3) 画面の表面パネルの端が浮き上がる(翹屏)
         P4) タッチパネルの端を押すとギシギシ音がする(P3と関連)(響屏)

         NOVO7にはこの問題が多く発生しています。私の買った物も同様の問題が発生しました。
         P3と P4は「中華品質」と言う事で許容と言うか「納得」できますが、P1と P2は許容できないので新品交換をしようとしましたが、ファームの更新で改善出来る様なので様子見をします。とりあえず、現時点では安定した「製品」とは言えない感じです。

         その他にも掲示板などの情報では下記問題も多く出ているようです。
         P5) 液晶ドット抜け・常時点灯

         ※ この製品を扱う販売店はサポートが大変な感じがします。
         ※ その他、処理の負荷状況?で「キューキュー」鳴きます

        ●Novo7 Basic用の各種ファームウェア
        Froyo
         Android 2.2.1 2011/11/08版(最終版) ハングアップ多発

        HoneyComb
         Android 3.2 2011/11/25版 ハングアップ多発
         Android 3.2 2011/12/15版 ハングアップ改善?

        Ice Cream Sandwich ICS
         Android 4.0.1 2011/12/21版(初期提供版) ハングアップ改善?

      なんだか、まだまだな感じ。継続的に開発してくれるなら、まぁ許容できないことはないが...

    新機種の価格

      android-sale.com でリストが出ている。

      http://android-sale.com/ainol-novo7-aurora-android-tablet.html
      http://android-sale.com/ainol-novo7-advanced-ii-7-inch-android-ics-tablet.html

      などを見るとCPU は、1.5GHz powerful processor なんてぼかして書いてある。

      とりあえず価格をチェック。

        paladin $90
        basic $100
        advanced II $150
        wizard $170
        aurora $200

      basic が、600元 だとすると aurora は 1200 元ということに。-- 赤札天国だと通常価格は 2万円超えそう。予約特価で 2万円を切る感じか。

      クラムシェルなら 決まった体勢で見るから IPS でなくとも良いのだが 、タブレットは IPS が欲しくなる。高くとも aurora か。

        もうちょっと安いような気もするが、大差はないだろう。たぶん、赤札天国の予約特価に釣られることになりそうだ。

      advanced II が 900 元? なんか高い。

      メモリが DDR3 1GB だそうだから多少高くなるのは良いとしても ... それでも Allwinner A10 では高すぎ。これにまで、1.5GHz powerful processor なんて書いてあるし、最初の予想通り MIPS ?

      ... といっても 液晶がグレードアップしてたりしないと、買うメリットなさそうだ。

      もし、MIPS なら、基板が共通とかの理由があるのだろう。そうなると従来機とは違う液晶を採用してもおかしくはない。

      もし MIPS でないなら、MIPS が失敗したときの押さえの機種? そうであれば、液晶を換装して aurora/wizard クラスをすぐ出せるようにしているに違いない。

      発売日(うわさ, FREE WING さんとこから)

      極光:1月15日 (aurora)
      精靈:1月15日 (wizard)
      巫師:1月15日 (なにこれ?)
      領先2:2月1日 (advanced II)

      3 機種が 1/15 ってことは、CES 発表待ちの機種ということだろう。
      そういえば 新型筐体の basic があったはず。それが、上記で Advanced II と書かれたやつで 巫師 では?

      そして 真の advanced II (Allwinner) は別にある ... とか。

      ところで、意味的には 巫師 == Wizard 。精靈 は Elf , Spirit あたり。

      まぁ 騎士が paladin になったから、どうなるか分からないが。

    Ainovo の新機種 とか

      Ainovo ブランドから Swordman , Legend が出る。

      Swordmanは、Paradin タイプの筐体で、1024x600 の LCD 。さらに、フロントカメラと HDMI 出力がついたもの。

        よく見たら Paladin とは違う。Paladin は枠があるが、これはない。

      Legendは、Basic タイプの筐体で、1024x600 の IPS LCD 。あとスタンドがついている。

      この2つは、JZ4770 で CPU には変更ない。価格も あまり高くならないらしい。(Paladin/Basic に対してそれぞれ + 10-15 ドルとのこと)

      さらに FREE WING さんとこの情報では、Aurora 799元, Wizard 699 元, Advanced II , 599元で、いずれも Allwinner A10(?) とのこと。そして MIPS 機は、2月。

      いったいどういうこと? そして、同じ 7 インチでどれだけの機種が出ることになるのか?

      http://android-sale.com/?android_product_manufacturer=137

      の内容が変わっている。aurora/wizard が消えて swordman/legend になっている。advanced II はそのまま。basic は値上げ。

        paladin $90
        basic $100
        basic $110
        advanced II $150
        swardman $150
        legend $170
        wizard $170
        aurora $200


      ガセネタを元に 予約取っていたわけではないだろう。急遽予定が変わった?

      価格差から考察してみる。legend - basic が $60 。液晶しか違わないとすると IPS 液晶で +$60 。swardman - paladin も $60 だが、カメラ + HDMI コネクタ等が違う。IPS でなくとも 1024x600 の液晶は高い? .. そんなはずはないと思うんだが?

      swardman - basic としても $40 。swardman は割高なのか?

      aurora - legend が $30 。メモリ 1GB (+ 512MB) 分のみなら高すぎ。+ CPU のグレードアップ分でこんなものか?

    2011 CES

      CES が始まったのだが ... Ingenic の情報が少ない。新CPU の発表はなし?

      Ingenic Semiconductor、MIPSベースXBurst搭載$120のAndroid 4.0タブレットを用意

      この記事ぐらい?

      $120 って何? swordman ぐらいしか該当しそうなものはないのだが ... basic のことだと萎える。

      ところで、Xburst の CPU (タブレット?) を 中国市場で100万ユニット/四半期 を目標にしているとのこと。

      ちょっと調べたのだが、タブレットは iPad を含め 150 万台/四半期 の市場規模だそうだ。実際は この倍ぐらいな気がするが ... それでも 100万ユニット/四半期 とは無謀な目標に見える。スマートフォンは 1000万台/四半期 以上だったと思うので これも含めれば 無謀とまでは言えなくなる。

      とは言えかなり大胆な計画のようだ。

    Ainol から 公式記事が出ている

      http://www.ainol.com/plugin.php?identifier=ainol&module=article&action=info&articleid=414

      Ainol が公式の記事を出した。Advanced II / Wizard / Aurora とも Allwinner A10 (?)。

      全部 ボタンがなくなったタイプで swordman のような筐体。

      これで確定。

      Aurora 799元 も合っているかも知れない。これだけ安いと Advance 以上に評判が良くなりそう。といっても ICS だそうだから、ファームウェアの完成度が少々不安。

      Ingenic はどうした? 40 nm の CPU は? ひょっとして出せなかった?
      CPU 自体は作れても、カーネルが間に合わなかったという可能性もある。

      いずれにしても、チャンスを逃したのでは? これでどうやって 100万ユニット/四半期 を狙えるんだろう?

    筐体のタイプ


      basic paladin swordman legend

      W 112 110 120 111
      H 187.5 176 189 187
      D 12 13.2 11.5 13

      ainovo でスペックは出ているのでサイズをチェックしてみた。

      basic をベースにして見ると paladin は幅が若干短く 縦は 10mm 以上小さい。
      legend は basic に近いが スタンドのためのスペースの分 暑みがある。
      あと paladin のみ枠がある。

      swordman が新タイプで、aurora とかと同じっぽい。幅が 結構増えている。
      あと このタイプはメクラ蓋が側面にない。裏面にもネジ穴らしきものが見えない。
      -- どうやって分解するのだろう?

      あと、swordman/legend は共にフロントカメラが 2.0MP 。たぶん aurora なども 同じだろう。

    pandawill でも予約開始


             FreeShipping
      aurora $200
      elf $180 (旧 wizard ?)
      advanced II $140
      paladin $104 (参考)

      pandwill の場合 FreeShipping で送料が含まれている。android-sale.com とは違う。
      スペックは Allwinner A10 1.2 GHz 、aurora/elf は RAM 1GB 。

      paladin が 通常 $89 だとすれば、送料分は $25 ぐらいと見積もれる。

      とりあえずそう考えると 本体価格は aurora で $175 , elf が $155 , advanced II が $115 。思ったより高いものの aurora が 15600 円 ほどで入手できるのは確か。

    新機種 FIX

      赤札天国でも 予約が始まり 新機種は 次のものに定まった。

      Allwinner A10:
    • novo7 advanced II (800x480) RAM ? 699 元?
    • novo7 wizard (1024x600) RAM 1GB 799 元?
    • novo7 aurora (1024x600 IPS液晶) RAM 1GB 999 元?

      Ingenic JZ4770(MIPS):
    • novo7 paradin (800x480) RAM 512MB 499元
    • novo7 swaordman (1024x600) RAM ? 
    • novo7 legend (1024x600 IPS液晶) RAM ? 

      生き残っている basic も含めると 7inch のみで 計 7 機種。そして 新 CPU は出なかった。

        Ingenic の計画では 2 世代分の CPU が 2012年になっているし、数ヶ月後にはさらに新機種が出るだろう。だが、しばらくは考えないでおこう。

      しかし、これほどの機種を出すのは、一体どういうことなのだろう?

      A10 の場合、筐体もメインボードも共通だから作るだけなら 設計コストはあまり増えない。色違いのモデルを出すのと同じ感覚だったりするのだろうか? swordman を追加するとしても メインボード分のみで済む。ファームウェアも既にベースがあるから、あまりコストが嵩まないと見ておこう。

      つまり、この 4 機種は、従来の basic/advance のような兄弟機。だが、paladin と legend はちょっと違う。それぞれ専用の筐体だ。paladin は、普及を狙った低価格機で数が出るんだろう。専用のデザインでも不思議ではない。

      不思議なのは、legend 。なんでこれだけ違うのだ?

      一見すると basic/advance と同じように見えるが、USB コネクタが付いていたり、スタンドが付いていたりして、メインボードも筐体も違う。

      どうも卓上に置いて キーボードやコントローラをつなぐような使い方を想定しているようだ。そういえば、basic/advance は持つところがなくて困ったのだが、もともと 卓上に置くのがメインだと想定していたのかも知れない。で、評判が悪かったので 一般的な形状の aurora タイプにした。一方で卓上での使い勝手を良くした legend も作った。 ... というところか。

      paladin は、持って使うのを追求した感じがする。枠は持ちやすくしている要素だし、幅が一番狭く 片手で掴むのにも向いている。

      一応、特徴を出そうとしているのは いずれも MIPS 機であり、未だ ainol は MIPS の方を向いている ... と思っておこう。

      ところで、aurora タイプ は、スマートになった代わりに メクラ蓋がなくなっている。はめ合わせ式?
      IPS液晶 や 1024x600 の液晶のほうに気をとられるが、デザインは昔に戻ったような。分解できないし、いじる要素が減った。

      paladin は、実は面白いかも知れない。ハンドル付きのケースとかクラムシェル用のケースがサードパーティから出たりして... という展開は無理なんだろうか? 数が出て 長期間売られればあるいは ... という気がする。もっとも内部に隠れた USB HOST コネクタがないと厳しいかもしれないが。

        追記:

        http://bbs.imp3.net/thread-10540339-1-1.html

        ここに paladin の分解写真がある。



        内部には、USB 引き出し用らしき 4pin コネクタのパターンがある。これは改造の楽しみがありそう。Bluetooth を内蔵するようなことも出来そう。ただし 12Mbps で HI-Speed ではないはずだから、Wifi などはむり。

        ただ、位置関係から、抵抗式 タッチパネルのコネクタという気もする(これも 4pin)。その場合 JZ4770 の タッチパネルインターフェイスに接続されていることに。

      そうそう、800x480 で良いから IPS 液晶が改造パーツで出ないものかとも思う。

    Aurora の詳細

      ここに出ている。

      殻割写真とかもある。

      ところで、筐体の リアケース? (プラスチックの部分) は、Aurora / それ以外で違う。
      コネクタ位置も違うから Aurora のメインボードは 専用設計のようだ。

      あと、basic / legend の フロントの部分 (液晶側のケース) は 同じように見える。
      ここだけは共通化しているのか。

    追記: 2012/1/18

      Aurora の価格は、Pandawill が $167.99 (13500円ぐらい)になった。赤札天国も 14,780 円 での予約特価。ここから考えると 899元 ? さて、2 月になると思われる Swordman/Legend だが、これより安いのだろうか? 書いてあるとおり JZ4770 なら安くなくては おかしい。
      Elf が Pandawill $147.99/赤札天国 12900円だから Sowrdman なら 1000円-2000円ぐらい安くならないと。 Legend は 筐体が違うしわからないが、せいぜい Aurora と同じでないと。

      ただ、すぐにでも出せそうなのに 2月になってしまうのはどういうことだろう? これだと xburst1 40nm の機種 発売までの間隔が短くなってしまう。発売を遅らせて 新CPU に切り替えだと嬉しいのだが ... 。

      /proc/cmdline を見なおしたのだが、cpu_version=jz4770v1 という指定がある。ひょっとして 40nm 版は v2 なのだろうか?

    追記: 2012/3/7

      Swordman , Legend が出ない。これはもう 出ないんじゃないかと思えてきた。もうタイミングを逸しているだろうから仕切り直すに違いない。

      aurora は評判良いようで、そちらに注力? ただ、入手難みたいだし 実際に数が出ているのかどうかは、よくわからない。

      ところで、なにやら妙に安いタブレットが出てきている。

      ひとつは、LingYunXianFeng の LY-F2S

      Allwinner A10 512MB で $62(388元) 。写真を見るとコネクタが多い。USB Host もあるような感じ。

      いったいどうやったらこの価格で出せるのか? と思っていたら、インドネシアのメーカから $33 のタブレットが ... 情報元は MIPS の ニュース・リリース 。$33 というのは、販売促進のための特別価格 ということだそうだ。

      問題の CPU については、『SpeedUpレジスタードマーク Pad Iceは、1GHz周波数のMIPS-Based XBurstトレードマーク(TM) CPUを利用するIngenic社のJZ4770モバイル・アプリケーション・プロセッサを採用しています。』... ということで (壊れなければ)まともに使えるものになるかも。ちなみに、7inch マルチタッチ・スクリーン 。RAM 容量は 512 MB らしい  → 『SpeedUp Ice Pad : Specification and Price

      なんだか Paladin っぽい ... というかそのもの?

        スペックの方の写真は、カメラ付きだし、たぶん違うもの。そして、バッテリー容量 4100mAH やサイズ 176x110x13 は Paladin と同じような ...

        SpeedUp Pad Ice : Cheap Android PC Tablet こっちは最初の記事だが、写真は Paladin のように見える。

        製品ページ を見ると SpeedUp Pad と SpeedUp Pad Ice の 2 製品がある。Ice の方が Paladin 似で $33 。

      あと Ingenic 関係では、別のニュース・リリース も。

      Altair社の FourGee LTEチップ と接続するインターフェイスを追加した CPU を出すという意味らしい。たぶん 40nm のやつに採用されるのだろう。

        追記:
        LY-F2S は、pandawill で既に扱っていた。$96.99 (送料込み)。Paladin が $99.99 だから確かに Paladin より安い。Paladin にはない HDMI , USB HOST , (0.3mpixel だが)カメラが付いている。バッテリーは 3000mAH 。$62 というのは、セールかなにかの価格のような気がする。正規品だと $70 台という感じ。

    2012/4/12

      novo7 の新機種がまたまた出るそうだ。

      今度は Amlogic で Tornado (8726-M3L), Mars(8726-M3), Elf2 (8726-MX DualCore)。

      Aurora は人気があったものの製造上の問題を抱えていた。仕切りなおすのはおかしくはないが .... それにしても ... これだけチップを取り替えてちゃんとメンテナンスできるものなのだろうか?

      あるいは、ソフトウェアはチップメーカまかせだからこういうことになるのだろうか?

      さて、今年は、中華タブレットも Cortex-A9 Dual Core になってくるようだ。Allwinner は、Dual core が出せなかった?

      あと、今年は、ローコストのチップも出てくる。Allwinner A13 , RK2906 , TCC9823(Cortex-A5) 。共通点は Mali-400 。特に Rockchip は、GC800 からの乗り換え。

      これ以上 800x480 7inch を出してもしかたがないように思えるし、ローコストといっても 1 ドル2ドル安いだけのような ...

      ところで、Ingenic はどうなるのだろう? 以前のニュース・リリースによると、今年の第2四半期に、LTEを搭載したバージョンのサンプル出荷、2012年下半期に量産出荷だそうだ。新チップだから 40nm の SMP ?

      2012年下半期というと 6 月〜 もうすぐではないか。もっとも 40nm にして もともとの Dual Core を SMP として使えるようにするだけだから、作るのは可能だろう。

      ただ、単なる Dual Core なら Cortex-A9 dual に性能で負けるし、GC-860 も Mali-400 に水を空けられている。消費電力あたりの性能なら結構良さそうだが ...

      mips が 正規NDKに入ったようだし、Ingenic には持ちこたえて欲しい。

    追記: 2012/4/24

      Philips から Jz4770 を使った端末が出ているそうだ。

      Philips、MIPSベースのCPUを搭載したAndroid 4.0タブレットを発売

      1024x600 TFT(not IPS) の PI3800B2 が 1399元と Aurora より 高価 だが、有名メーカ製としては 格安?

      Wi-Fi b/g/n、Bluetooth 2.1+EDR というのは、嬉しい機能かも。

        追記: 2012/5/14 現在 taobao で 売られている。価格は 横ならびで 1299元。メモリは 512MB , Flash 8GB , バッテリー 4000mAH だそうだ。

      1.8 Million MIPS-powered Tablets Shipped to Date

      あとこんな記事が ... そうか ほぼ Paladin だけで 180万 台も出たのか ... これなら次はちゃんと出そうで安心した。

    Ingenic その他の話題 (2012/05/14)

      ぼちぼち JZ4780 という名前が聞かれるようになった。2012/9月に 出るとのこと。上記 LTE 関係では、Q2 サンプル Q3 リリースとなっていたが、少し遅れる?

      JZ4780 の CPU は Xburst1 で JZ4770 から想像できる範囲の性能になりそう。あと、GPU は、GC1000 あたり? これも Mali 400 に差を付けられそうな気がする。総合的には、そこそこの性能に低消費電力 ということになりそう。ただ、メモリコントローラは、JZ4770 はいまいちだったから なんとかして欲しいところ。DDR3 には対応するだろうが、バンクを活用できるようなものになるのかどうか?

      心配なのは、どこがタブレットを出してくれるのか? という点。ainol でも悪くはないが、ainol は、ラインナップがすごいことになっている。他に喜んで出してくれるところがあるのだろうか? あったとしても ファームウェアとかソースコードとか ちゃんと更新してくれるのだろうか? 結構不安だったりする。
    posted by すz at 12:35| Comment(6) | TrackBack(0) | android

    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