2011年11月24日

microSDリーダ

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

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


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

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

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

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



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

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

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

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

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

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

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

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

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

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

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



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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ついでに ...

    Aluminum Shell Micro SD/TF Card Reader $1.48

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

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

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

記念に 軽く性能調査

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2011年11月15日

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

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

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

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

      主な変更点:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    実行環境

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

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

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

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

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

    • REPLACE_DIR

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

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

    • BASE_DAT_FILE

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

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

    • IN_NIB_FILE

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

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

    • IN_SYS_FILE

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

    • IN_DAT_FILE

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

    • OUT_SYS_FILE, OUT_DAT_FILE

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

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

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

    qemu-user 環境

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

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

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

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

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

      で展開。

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

    • chroot

      # chroot /system/bin/busybox sh

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

    設定について

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

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

    • APPLY_TURBO_VM
    • APPLY_LARGE_HEAP
    • APPLY_EXTERNAL_BROWSER
    • APPLY_ROOTKIT
    • CLEANUP


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

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

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

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

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

    動作確認:

    • Superuser.apk

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

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

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


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

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

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

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

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

    • Superuser.apk

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

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

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

       Root Explorer
       -

       Screen Shot It
       -

    • Media Player

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

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


以下設計メモ(初期)

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

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

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

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

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

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

  • system.img

    もともとは、

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


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

    で、出来たものを

    custom_files/system-init.img.gz 

    gzip で圧縮しておいて、

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

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

    ここで最初の問題

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

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

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

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

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

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

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

  • userdata-out.img の作成

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

      custom_files/lib/local.prop

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

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

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

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

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

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

  • system-out.img

    ちょっと端折る。

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

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

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

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

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

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

以下ただのメモ

    環境変数

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

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

    mount の仕方
    init.rc: mount tmpfs tmpfs /mnt/asec mode=0755,gid=1000
    init.rc: mount rootfs rootfs / ro remount
    init.rc: mount tmpfs none /mnt/tmpfs nosuid nodev size=1m
    init.rc: mount ext4 /dev/block/mmcblk0p1 /system
    init.rc: mount ext4 /dev/block/mmcblk0p1 /system ro remount
    init.rc: mount ext4 /dev/block/mmcblk0p2 /data nosuid nodev
    init.rc: mount ext4 /dev/block/mmcblk0p3 /cache nosuid nodev

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

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

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

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

    Create, extract, or list files from a tar file

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

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

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

    Usage: rm [OPTIONS] FILE...

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

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

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

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

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

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

2011年11月12日

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

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

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

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

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


    2012/1/1 追記:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

初期設定

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 設定 : HDMI 出力

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

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

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

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

  • ファイラー

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

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

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

  • Turbo Fly 3D

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

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

カスタマイズの詳細

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

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

    • ファイラー ASTRO_3.0_218.apk (n7b から)
    • 動画 MediaPlayer.apk (n7b のみ) / SeeJoPlayer (v65 から v65/a3 へ)
    • pdf DocumentsToGo_V3.004.apk (n7b から)
    • ランチャー Zeam_Launcher_v315.apk (マーケットから)
    • ゲーム AngryBirds_2011-03-14_1.5.3_MIPS.apk(全部同じ)
    • ゲーム Fruit_Slice_V1.3.3.apk (n7b から)
    • ゲーム turbofly3d_4_V1.21.apk (n7b のみ: 入れ忘れた)

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

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

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

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

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

    system/app の変更詳細:

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

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

      削除:
      GoMarket_Ingenic_N802_VER_2_1_2.apk

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

xx_burn_tool.zip について

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

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

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

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

Tasselhof-RootScript

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

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

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

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

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

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

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

    5-9 について

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

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

    Root 化とは何?

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

      Superuser.apk (system/app)

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

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

      osakanataro 氏のコメントより

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

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

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

      あと次のコメントも

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

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

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

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

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

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

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

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

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

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

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

    (メモ: 元の su の動作)

      # ls -l /system/bin/su

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

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

      # su 1000.1000

      $ id

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

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

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

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

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

    再現性:

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

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

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

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

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

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

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

    heap 不足:

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

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

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

今後について

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

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

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

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

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

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

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

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

2011年11月08日

Novo7 basic 購入

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

    まずは、df

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

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

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

      # busybox fdisk /dev/block/mmcblk0

      Command (m for help): p

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

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

      Partition table entries are not in disk order

      Command (m for help): q

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

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

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

      64+0 records in
      64+0 records out

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

      # cd /system
      # ls

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

      # busybox cp *.img /mnt/flash/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

もう少し使ってみた

  • まずは動画

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

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

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

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

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

  • パチスロゲーム

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

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

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

  • Quadrant

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

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

  • xPiano

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

  • pdf

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

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

  • その他

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

      # cat /proc/filesystems

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

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

  • 所感2

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

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

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

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

    結論から言うと

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

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

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

    ついでに マップ

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

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

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

CFW の作成方針

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

AnTuTu bench

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


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

    Total score: 801 945 2112

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

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

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

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

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

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

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

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

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

MediaPlayer の調査(1)

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

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

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

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


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

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

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

      /dev/pmem

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

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

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

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

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


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


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

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

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

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

      Novo7:
      libmedia.so
      libmedia_jni.so

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

      libvorbisidec.so
      libjzipu.so

      Ronji A3:
      libmedia.so
      libmedia_jni.so

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

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

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

      libvorbisidec.so
      libjzipu.so

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

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

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


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

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

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

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

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

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

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

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

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

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

ed を使う

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

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

      # busybox ed /system/build.prop

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

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

      dalvik.vm.heapsize=48m
      : $p

      dalvik.vm.heapsize=48m
      : w

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

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

Novo7 advance との違い

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    EKEN も 2 機種

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

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

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

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

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

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

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

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

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

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

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

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

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

2011年11月05日

開発環境の整備(2)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    # tar -zxvpf mindev10.tgz

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

    # mount /sys
    # mount /proc

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

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

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

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

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

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

mipsel 開発環境

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

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

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

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

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

クロス版 binutils , gcc , glibc

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

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

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

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

    さて、これからが大変

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

    という手順。

  • 0) 準備

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

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

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

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

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

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


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

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

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

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

      # make DESTDIR=xxx install

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

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

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

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

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

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

      make install_root=/tmp/new-glibc install


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

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

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

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

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

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

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

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

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

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

    擬似セルフ環境

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

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

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

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

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

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

    正確には、

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

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

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

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

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

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

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

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

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

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

    これでできた RPM に対して

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

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

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

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

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

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

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

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

    *) 現在のバイナリ

    devkit にある

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

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

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

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

追記: 問題点多数

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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