-
Android2.1端末を入手!(書いてる途中だけど公開)
Posted on 8月 30th, 2010 はおりん No commentsAndroid2.1端末を入手して、ファームウェアをいじってるので、メモ書きっていうか走り書きっていうか・・・
HaiPadっていう端末。中華製。
CPUはTelechipらしい。CPU周波数は36MHz~720MHz。NANDは2GB。ユーザーエリアは1.5GB?
microSDHCの8GBは無事認識。なぜかマナーモードにならない。マナーモードにしても、戻される。
FWDNってツールを入手して、ファームウェアを焼く。
ファームウェアを焼くモードに入る
- 端末からUSBケーブルを抜く
- 端末をシャットダウンする
- USB端子の間にある電源スイッチをOFFにする
- PCで、FWDNに付属の「VTC Driver」をインストールしておく
- PCでFWDNを起動する
- 書き変えたいファームをFWDNに追加する
・lk.romとかそういう名前のファイルと、なんとかmtd.imgとかそういう名前のファイルを両方追加する
・ファイルを選択して、FWDNにドラッグ&ドロップでOK
・BOOTファイル(lk.romとかいうほう)に、ブート時のロゴも入ってる。 - 端末の固有キー(?)を変更する
参照:OrverWrite Serial Number
・「Tools」メニューから「Option」を起動。上の方にある「OrverWrite Serial Number」をチェック
・下の方にある「Insert WiFi MAC Address」にチェックを入れる
・OUIに、自分のPCのMACアドレスの前半を、NICに後半を入力する
・これをやらないと、マーケットが使えない。いらんアプリを勝手にインストールしたりするのは、これが原因 - 端末とPCをUSBで接続する
・USBを接続する端子は、USB端子を右にしたとき、上側。microSDスロット寄り - 端末の「家のアイコン」が書かれたボタン(USB端子を右にしたとき、上側面の右側のほう)と、電源ボタンを押したまま、電源スイッチをONにする
・PCからUSB経由でBOOTファイルが送られ、起動する。
・端末に書きこまれているBOOTイメージは無視される? - FWDNで「NAND Data」のエリアを認識して、しばらく動きが無ければOK
・ファームウェアによっては、画面が真っ黒だったり、「I Love You」って書いてあったりする - FWDNで「START」を押して、ファームを焼く
・失敗しても、よっぽど運が悪くなければ、再度このモードに入って焼ける。板にはならない - 焼き終わったらUSBケーブルを抜いて、電源スイッチを入れ直す。
・うまく焼けてれば新しいファームで起動する
違うファームを焼いて起動しなくなったので、起動するファームのrarをここに置く。再配布が可か不可かは確認すらしていない・・
USBデバッグ
adbはPIDとVIDが違うので、ドライバがインストールできない。
\android-sdk-windows\usb_driver\android_winusb.inf の、[Google.NTx86]セクションと[Google.NTamd64]に以下を追記;MID701 %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_DEED %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_DEED&MI_01
これでドライバがインストールできる。
initramfs
rootfsはinitramfsなので、書き変えられない。
NANDからイメージを吸い出して、中身を書き変えて、書き戻す必要がある。
参考:http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images- split_bootimg.zip と mkbootimg を入手
・勝手バックアップ
・split_bootimg.zip
・mkbootimg - NANDのboot領域を確認する
・MID701のrootfsはmtd0
・cat /proc/mtd で確認できる。# cat /proc/mtd cat /proc/mtd dev: size erasesize name mtd0: 00a00000 00080000 "boot" mtd1: 00500000 00080000 "kpanic" mtd2: 09600000 00080000 "system" mtd3: 00400000 00080000 "splash" mtd4: 02800000 00080000 "cache" mtd5: 12300000 00080000 "userdata" mtd6: 00a00000 00080000 "recovery" mtd7: 00100000 00080000 "misc" mtd8: 00100000 00080000 "tcc"
・”boot”と書いてある部分がソレ。機種とかファームウェアによって変わるみたい。
- NANDからbootイメージを抜く
・MID701の場合、SDカードに抜いてもいいし、内臓のNANDエリアに抜いて、USBマウントで取り出してもいい
・cat /dev/mtd/mtd0 > /nand/mtd0.img - Linux機に持ってって、バラす
$ ls -l -rwxr--r-- 1 maya maya 10485760 8月 31 2010 mtd0.img -rwxr--r-- 1 maya maya 6121 12月 3 2008 split_bootimg.pl $ ./split_bootimg.pl mtd0.img $ ls -l -rwxr--r-- 1 maya maya 10485760 8月 31 2010 mtd0.img -rw-r--r-- 1 maya maya 4233600 8月 31 09:55 mtd0.img-kernel -rw-r--r-- 1 maya maya 767650 8月 31 09:55 mtd0.img-ramdisk.gz -rwxr--r-- 1 maya maya 6121 12月 3 2008 split_bootimg.pl $ mkdir ramdisk $ cd ramdisk $ gzip -dc ../mtd0.img-ramdisk.gz | cpio -i $ ls -l drwxrwx--x 2 maya maya 4096 8月 31 09:56 data -rw-r--r-- 1 maya maya 118 8月 31 09:56 default.prop drwxr-xr-x 2 maya maya 4096 8月 31 09:56 dev -rwxr-x--- 1 maya maya 103220 8月 31 09:56 init -rwxr-x--- 1 maya maya 1677 8月 31 09:56 init.goldfish.rc -rwxr-x--- 1 maya maya 14145 8月 31 09:56 init.rc -rwxr-x--- 1 maya maya 5937 8月 31 09:56 init.tcc92xx.rc drwxr-xr-x 3 maya maya 4096 8月 31 09:56 lib drwxr-xr-x 2 maya maya 4096 8月 31 09:56 proc drwxr-x--- 2 maya maya 4096 8月 31 09:56 sbin drwxr-xr-x 2 maya maya 4096 8月 31 09:56 sys drwxr-xr-x 2 maya maya 4096 8月 31 09:56 system
- 好きなように書き変える
・init.rcとか。
・僕は、後述するswapのために、以下を追記したservice dumpstate /system/bin/dumpstate -s socket dumpstate stream 0660 shell log disabled oneshot //service dhcp-service /system/bin/netcfg eth0 dhcp // oneshot service userinit /system/etc/userinit.sh oneshot on property:dev.bootcomplete=1 stop dhcp-service start dhcp-service
- イメージを作り直す
$ find . | cpio -o -H newc | gzip > ../ramdisk-new.gz $ cd .. $ mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel mtd0.img-kernel --ramdisk ramdisk-new.gz -o mtd0-new.img $ php replace_ramdisk.php mtd0.img ramdisk-new.gz
・mtdの構造が違うらしく、mkbootimgでは、書きこむと板になるイメージが出来上がる(といっても、FWDNで復旧できるが)
・自作のスクリプトを作ったので、これを使用してほしい。現状では、ramdiskのサイズはオリジナルとほぼ同等である必要がある。
init.rcの修正程度のことならできるが、それ以上の大きな修正は、/system/etcなどを活用すべきだろう。
・replace_ramdisk.php - /nand とか /sdcard にコピーする
- 端末でNANDにフラッシュする
# cat /dev/zero > /dev/mtd/mtd0 cat /dev/zero > /dev/mtd/mtd0 write: No space left on device # flash_image boot /nand/mtd0-new.img
- 再起動して動作確認する
・ダメだったりすると、たぶんFWDNでNANDの焼き直しになるので、バックアップ等はお忘れなく!
busybox
adbで入ることが出来ても、busyboxが無いと、「アレができないコレもできない」になる。
- busyboxを入手
ググると、いくつかAndroid用のbusyboxが見つかる。
置いておく。
busybox - adbでAndroidに転送する。
> adb remount > adb push busybox /nand
- シェルに入り、インストールする
> adb shell # cp /nand/busybox /system/bin # ln -s /system/bin/busybox /system/xbin/busybox # cd /system/bin # chmod 755 busybox # ./busybox --install -s /system/xbin
swapを作る
大変残念なことに、/dev/block/ndda2 にswapを作ると、nddaというプロセスがCPUを大きく消費する。そのため全体的な処理速度が落ちるので、swapはSDカードに作った方が速い。
swapをSDカードに作るなら、swapper2を利用するのがオススメ。下記のRoot化を行った後なら、動くはず。busyboxがあれば、swapなんて怖くない。
/nand の中身(USB接続でマウントしたときに見える部分)は消去されるので注意!- NANDのユーザー領域にパーティションを切る
(赤文字が、ユーザー入力)# fdisk /dev/block/ndda The number of cylinders for this disk is set to 44480. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/block/ndda: 1457 MB, 1457520640 bytes 1 heads, 64 sectors/track, 44480 cylinders Units = cylinders of 64 * 512 = 32768 bytes Device Boot Start End Blocks Id System /dev/block/ndda1 2 44480 1423328 83 Linux Partition 1 does not end on cylinder boundary Command (m for help): d Selected partition 1 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (2-44480, default 2):(Enter) Using default value 2 Last cylinder or +size or +sizeM or +sizeK (2-44480, default 44480): 36655 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (36656-44480, default 36656):(Enter) Using default value 36656 Last cylinder or +size or +sizeM or +sizeK (36656-44480, default 44480):(Enter) Using default value 44480 Command (m for help): p Disk /dev/block/ndda: 1457 MB, 1457520640 bytes 1 heads, 64 sectors/track, 44480 cylinders Units = cylinders of 64 * 512 = 32768 bytes Device Boot Start End Blocks Id System /dev/block/ndda1 2 36655 1172928 83 Linux Partition 1 does not end on cylinder boundary /dev/block/ndda2 36656 44480 250400 83 Linux Partition 2 does not end on cylinder boundary Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): 6 Changed system type of partition 1 to 6 (FAT16) Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 82 Changed system type of partition 2 to 82 (Linux swap) Command (m for help): p Disk /dev/block/ndda: 1457 MB, 1457520640 bytes 1 heads, 64 sectors/track, 44480 cylinders Units = cylinders of 64 * 512 = 32768 bytes Device Boot Start End Blocks Id System /dev/block/ndda1 2 36655 1172928 6 FAT16 Partition 1 does not end on cylinder boundary /dev/block/ndda2 36656 44480 250400 82 Linux swap Partition 2 does not end on cylinder boundary Command (m for help): w
- 一旦再起動する
- userinit.shを作り、/system/etcに書き込んでおく
(swappinessの値はお好みで。)#!/system/bin/sh # swapon to ndda2 count=10 until test $count -eq 0 ; do if test -b /dev/block/ndda2 ; then swapon /dev/block/ndda2 echo 30 > /proc/sys/vm/swappiness sysctl -w vm.swappiness=30 break fi done
> adb remount > adb push userinit.sh /system/etc > adb shell # chmod 755 /etc/userinit.sh
- 再度、adb shellに入り、/nand と swap を作る
# newfs_msdos -F 16 -L HAIPAD /dev/block/ndda1 # mkswap -L SWAP /dev/block/ndda2
- 再起動して、シェルに入ってfreeってやれば、swapが出来上がってるハズ。
SSHでつなぐ
adb shell だと、イマイチ使いにくい場合があるので、SSHで接続できるようにする。
なお、Androidのrootにはパスワードが無いらしいので、証明書を作って接続する。参考:http://wiki.cyanogenmod.com/index.php?title=Howto:_Connect_to_Device_with_SSH
- dropbear
SSHサーバ。
ここに置いておく。
dropbear - Linux機でSSHのカギを作っておく。
必要なファイルは、id_rsa と id_rsa.pub
この辺の手順は略す - zipを解凍して出てきたファイルと公開鍵を全部転送する
> adb remount > adb push dropbear /system/xbin > adb push dropbearconvert /system/xbin > adb push dropbearkey /system/xbin > adb push id_rsa.pub /nand
- パーミッションとかディレクトリの作成とか
> adb shell # cd /system/xbin # chmod 755 dropbear dropbearconvert dropbearkey # cd /data # mkdir dropbear # dropbearkey -t rsa -f /data/dropbear/dropbear_rsa_host_key # dropbearkey -t dss -f /data/dropbear/dropbear_dss_host_key # chmod 700 /data/dropbear # mkdir /data/dropbear/.ssh # chmod 700 /data/dropbear/.ssh # cp /nand/id_rsa.pub /data/dropbear/.ssh/authorized_keys # chmod 600 /data/dropbear/.ssh/authorized_keys # rm /nand/id_rsa.pub # echo "root:x:0:0::/data/dropbear:/system/bin/sh" > /etc/passwd # echo "root::14531:0:99999:7:::" > /etc/shadow # echo "root:x:0:" > /etc/group # echo "root:!::" > /etc/gshadow # echo "/system/bin/sh" > /etc/shells # echo "PATH=\"/usr/bin:/usr/sbin:/bin:/sbin:/system/sbin:/system/bin:/system/xbin:/system/xbin/bb:/data/local/bin\"" > /etc/profile # echo "export PATH" >> /etc/profile
- userinit.shに追記し、起動時に自動起動させる
・userinit.shに以下の行を追記する# listen ssh dropbear -s -g
- 再起動して、できあがり
bashを使う
tabキーが使えなかったりとかいろいろ面倒なので、bashを入れる。
- 必要なファイル
例によってここに。
bash類 - ファイルを転送する
> adb remount > adb push bash /system/xbin > adb push profile /nand > adb push inputrc /nand
- shを置換する
> adb shell # chmod 755 /system/xbin/bash # mv /system/bin/sh /system/bin/sh.org # ln -s /system/xbin/bash /system/bin/sh # cp /nand/profile /system/etc/profile # cp /nand/inputrc /system/etc/inputrc # rm /nand/profile # rm /nand/inputrc
- お好みで.bashrcにいろいろ書く
export PS1="[\w]\\$ " export TZ=Asia/Tokyo
.bashrcの場所は、/data/dropbear(というか、rootのHOME)
root化する
adbで入ればroot権限があるが、端末内のアプリからroot権限を取るには細工が必要。とっても簡単!(でも調べるのはすんげー苦労した・・・)
- 必要なファイル
Superuser.apk
su - ファイルを転送する
> adb remount > adb push Superuser.apk /system/app/ > adb push su /system/xbin/
- suを置き換える
> adb shell # mv /system/bin/su /system/bin/su.org # ln -s /system/xbin/su /system/bin # chmod 6755 /system/xbin/su # sync
- 端末の電源を入れなおして出来上がり!
- SetCPU for Rooted の設定ファイル。僕のオススメの設定。
36000,54000,72000,126000,144000,294000,364500,500000,600000,720000# echo 36000,54000,72000,126000,144000,294000,364500,500000,600000,720000 > /data/local/setcpu
SetCPUでcustomを選べば、周波数が変えられるようになる。ScreenOFFのときに、Max72MHzに抑えてどれだけバッテリが長持ちするか楽しみw
Sambaを動かす
Root化してswapをSDカードに作ったりすると、今度はSDカードの読み書きが非常に面倒くさい。そうでなくてもUSBケーブルをつなげるのが面倒くさい。そこでAndroid側でSambaサーバを動かし、Windowsからエクスプローラで読み書きしてしまえ。「非常に大容量」なファイルでなければ、これで十分であろう。
- 参考
http://forum.xda-developers.com/showthread.php?t=653336 - Sambaは3.0以降じゃないと日本語が文字化ける。
sambaAndroid-0.4a.tar.gz
sambaAndroid-20101101.1155.tar.gz - tar.gzを置いて、解凍
> adb push sambaAndroid-20101101.1155.tar.gz /nand > adb shell # mkdir /data/local # cd /data/local # tar zxvf /nand/sambaAndroid-20101101.1155.tar.gz # echo interfaces = wlan0 > /data/local/samba/interfaces.conf # /data/local/samba/bin/samba-rc fixperms
- WiFiと同時にONOFFさせる(ちゃんと動いてるかどうかは未検証)
# cp /system/bin/sh /system/bin/dhcprootshell # chown 0:1014 /system/bin/dhcprootshell # chmod 4550 /system/bin/dhcprootshell # ln -s /data/local/samba/bin/dhcp-samba-script /system/etc/dhcpcd/dhcpcd-hooks/96-restart-samba
- ユーザを作る
# /data/local/samba/smbpasswdbin -a ユーザー名
- 各種設定
vi /data/local/samba/smb.conf でいじる
netbios name = サーバ名 - 再起動すれば、「\\サーバ名」でWindowsからアクセスできるはず。
Flashを動かす
Flashの動かないAndroidなど、林檎の形をしたステージで踊るピエロのようなものだ。 (1892年 イタリア ベラマッチャ・クオモ) 大ウソ
- 必要なファイル
FlashUpdate.zip - /system/libにファイルを書き込む
> adb remount
> adb push libflashlite_jni.so /system/lib/
> adb push libflashlitepackage.so /system/lib/
> adb push libflashliteplugin.so /system/lib/ - パッケージをインストールする
apkをSDカードあたりに置いてインストールしても良い。
> adb install flash_for_21.apk
> adb install FlashPlugin.apk
> adb install FlashSVGPlayer.apk - 端末を再起動する。
なんとこれだけで、Flashが見れるようになる!!
少なくともFlash9なサイトは動いた模様。っていうかNANACA CLASHは動いた。
高解像度(?)
このタブレット、デフォルトの状態だと文字がデカいっていうか、解像度の割に、画面が狭い。
なぜかというと、DPIが違うらしい。というわけで、以下のファイルを編集する。
編集前にバックアップを取っておきましょう。/system/build.prop
ro.sf.lcd_density = 160162にすると良いという意見もある。
書き変えたら再起動すると、画面が広い!
うん、たしかに、800×480。日本向けアプリをマーケットで入手
どうやらこの端末に入っているマーケットは、日本ロケールでは無いらしく、NAVITIMEなどは出てこない。
パッチを当てれば、世界中のアプリが手に入るようになる。http://forum.xda-developers.com/showthread.php?t=645286
Tattoo-Market-patched-v2-Eclair-for-Android-2.1.rar
いらないアプリを消す
中華向けのマーケットアプリとかイラナイ。何書いてあるかわからないし。
http://bb2.atbb.jp/nushipad/viewtopic.php?p=106&sid=6dd542e05a0324b703a3d3bf596599c2簡単に手順を書くなら、
- /system/app の中のapkを消す
- adb uninstall でアンインストールする
ファームウェアイメージを書き変える
FWDNに投入するイメージを書き変えて、最初からカスタマイズ済みのファームウェアを作ろうじゃないのさ
- 必要なもの
mkyaffs2.tar.gz
tccutils.tar.gz
コンパイル済みバイナリも同梱しているが、コンパイルする場合は、$ cd tccutils $ gcc tccpack.c -o tccpack $ gcc tccsplash.c -o tccsplash $ gcc tccunpack.c -o tccunpack $ cd .. $ cd mkyaffs2/unyaffs $ gcc unyaffs.c -o unyaffs $ cd .. $ cd yaffs2/utils $ make $ cd ../../..
- ファームウェアイメージをLinux機に置く
- ファームウェアイメージをバラす
$ mkdir tcc8900_mtd_20100914 $ cd tcc8900_mtd_20100914 $ mv ../tcc8900_mtd_20100914.img . $ ../tccutils/tccunpack tcc8900_mtd_20100914.img
- ブートイメージをバラす
$ mkdir boot $ cd boot $ ../../split_bootimg.pl ../boot.img $ mkdir ramdisk $ cd ramdisk $ gzip -dc ../boot.img-ramdisk.gz| cpio -i $ cd ../..
- systemをバラす
$ mkdir system $ cd system $ ../../mkyaffs2/unyaffs/unyaffs ../system.img $ cd ..
- ramdisk やら system を好きなようにいじる
どんだけいじっても、ファームウェアを書きなおせば良いので、好きなだけいじる! - ブートイメージを作る
$ cd boot/ramdisk $ find . | cpio -o -H newc | gzip > ../boot.img-ramdisk-new.gz $ cd .. $ php ../../replace_ramdisk.php ../boot.img boot.img-ramdisk-new.gz $ cd ..
- system を作る
$ cd system $ ../mkyaffs2/yaffs2/utils/mkyaffs2image -f system system.img.new
- ファームウェアを固める
$ ../tccutils/tccpack boot-new.img system.img.new recovery.img tcc8900_mtd_20100914-new.img
- FWDN で焼く
ハードウェア, 買っちゃった Android5 Responses to “Android2.1端末を入手!(書いてる途中だけど公開)”
-
Emmon.com 1月 14th, 2011 at 16:48
初歩的な質問ですみません。コメントお願いします。該当機種で、マーケットからアプリをダウンロードしようとすると、ダウンロードしそうな画面にはなるのですが、一向に処理が進みません。これって、どこかの設定を変更しないと正常に動作しないモノなのでしょうか?それとも機器自体が不良なのでしょうか?違う機種のタブレット(OSは1.5のタイプ)では同じネットの環境でダウンロード処理を行ってアプリをインストールすることは出来ています。
-
「ダウンロードを開始中」から先に進まない現象ですよね?
ファームウェアを焼くモードに入るの部分で、7の、端末のシリアルナンバーの変更作業を行わないと、その症状に陥るようです。
というか、MACアドレスを書き換えるチェックボックスを付けたら、マーケットからダウンロードできるようになりました。 -
Elude 1月 16th, 2011 at 01:59
こんにちは。私も最近この機種を入手して、色々なハックについて調べていました。
Flashの適用についてですが、私の環境だとブラウザ上では再生できず、ダウンロードしたswfがアプリで開ける、な状態なのですがこれで正しい動作なのでしょうか?
-
Eludeさんもこんばんわ。
最近HaiPad人気?wFlashは「Flashを動かす」のところの手順に従えば、うちの環境のブラウザでは動きましたね。
確認したのは・・・2010/08/29版のファームだったと思います。それ以降はそういえばアップデートした後、ブラウザでのFlash再生は確認してないかも・・・Flashゲームがプレイできないかなー、と思ってFlashを入れてみたので、SWFプレーヤーのアプリ上でしか確認してないかもです。
ただ、ゲームも、マウス押しっぱなしや、ドラッグ操作を必要とするゲームは、かなりプレイしにくいですが・・・ -
[…] Android2.1端末を入手!(書いてる途中だけど公開) […]
コメントを書く