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