月別アーカイブ: 2012年3月

出荷時ファームウェア

Wikiに出荷時ファームウェアがダウンロード出来る様にリンクが有りました。
バックアップした内容と一致するか比較してみました。
ーーーーーーーここから
C:¥Android¥M726HN-without-updateimg>fc /b misc.img ..¥backup¥b0
ファイル misc.img と ..¥BACKUP¥B0 を比較しています
00004000: 62 00
00004001: 6F 00
00004002: 6F 00
00004003: 74 00
00004004: 2D 00
00004005: 72 00
00004006: 65 00
00004007: 63 00
00004008: 6F 00
00004009: 76 00
0000400A: 65 00
0000400B: 72 00
0000400C: 79 00
00004040: 72 00
00004041: 65 00
00004042: 63 00
00004043: 6F 00
00004044: 76 00
00004045: 65 00
00004046: 72 00
00004047: 79 00
00004048: 0A 00
00004049: 2D 00
0000404A: 2D 00
0000404B: 77 00
0000404C: 69 00
0000404D: 70 00
0000404E: 65 00
0000404F: 5F 00
00004050: 61 00
00004051: 6C 00
00004052: 6C 00
FC: ..¥BACKUP¥B0 は misc.img より長いファイルです

C:¥Android¥M726HN-without-updateimg>fc /b kernel.img ..¥backup¥b1
ファイル kernel.img と ..¥BACKUP¥B1 を比較しています
FC: ..¥BACKUP¥B1 は kernel.img より長いファイルです

C:¥Android¥M726HN-without-updateimg>fc /b boot.img ..¥backup¥b2
ファイル boot.img と ..¥BACKUP¥B2 を比較しています
FC: ..¥BACKUP¥B2 は boot.img より長いファイルです

C:¥Android¥M726HN-without-updateimg>fc /b recovery.img ..¥backup¥b3
ファイル recovery.img と ..¥BACKUP¥B3 を比較しています
FC: ..¥BACKUP¥B3 は recovery.img より長いファイルです

C:¥Android¥M726HN-without-updateimg>fc /b system.img ..¥backup¥b4
ファイル system.img と ..¥BACKUP¥B4 を比較しています
FC: ..¥BACKUP¥B4 は system.img より長いファイルです

C:¥Android¥M726HN-without-updateimg>fc /b update.img ..¥backup¥b5
ファイル update.img と ..¥BACKUP¥B5 を比較しています
FC: ..¥BACKUP¥B5 は update.img より長いファイルです
ーーーーーーーーーーーーーここまで
長さが違うのは全領域をバックアップしたからで
b0以外は一致しています。b0の不一致部分をみるとASCIIコードのようなので
テキストレベルで比較すると
C:¥Android¥M726HN-without-updateimg>fc misc.img ..¥backup¥b0
ファイル misc.img と ..¥BACKUP¥B0 を比較しています
***** misc.img

boot-recovery

***** ..¥BACKUP¥B0

*****

***** misc.img

recovery
–wipe_all

***** ..¥BACKUP¥B0

*****
で公開されている方でコマンドの様なものが書き込まれています。
b0では、先頭から0が続きmisc.imgサイズ以降は0xffになっています。
バックアップは正常にとれているようです。’

cramfs-tools

バックアップしたファイルですが、cramfs-toolsでばらす事が出来る様なので試したみました。
cramfs-toolsは、ソースコードもCygwinのバイナリも公開されています。

..¥cramfs-tools¥cramfsck.exe -x opt -d opt.dt b4
でばらせます。
..¥cramfs-tools¥Mkcramfs opt system.img
でまとめる事が出来ます。
fc/bで確認しましたが、バイナリレベルでの一致はしませんでした。

Wikiに書かれているカスタムファームをダウンロードして比較してみます。
— backup/opt.dt   2012-03-06 10:40:07.357445300 +0900
+++ nextbook-v0.1/opt.dt   2012-03-06 11:01:39.471703200 +0900
@@ -38
6 +38
7 @@
/app/GlobalTime.odex    f    100777 0    0    -    -    -    -    –
+/app/GoogleServicesFramework.apk   f    100777 0    0    -    -    -    -    –
/app/HTMLViewer.apk  f    100777 0    0    -    -    -    -    –
@@ -49
6 +50
7 @@
/app/LiveWallpapersPicker.odex    f    100777 0    0    -    -    -    -    –
+/app/MarketUpdater.apk    f    100777 0    0    -    -    -    -    –
/app/MediaProvider.apk    f    100777 0    0    -    -    -    -    –
@@ -91
6 +93
7 @@
/app/UserDictionaryProvider.odex   f    100777 0    0    -    -    -    -    –
+/app/Vending.apk   f    100777 0    0    -    -    -    -    –
/app/VideoPlayer.apk f    100777 0    0    -    -    -    -    –
@@ -281
6 +284
7 @@
/etc/permissions/com.android.location.provider.xml f    100777 0    0    -    -    -    -    –
+/etc/permissions/com.google.android.maps.xml f    100777 0    0    -    -    -    -    –
/etc/permissions/handheld_core_hardware.xml  f    100777 0    0    -    -    -    -    –
@@ -304
6 +308
7 @@
/fonts/DroidSansHebrew.ttf f    100777 0    0    -    -    -    -    –
+/fonts/DroidSansJapanese.ttf f    100777 0    0    -    -    -    -    –
/fonts/DroidSansMono.ttf   f    100777 0    0    -    -    -    -    –
@@ -338
6 +343
7 @@
/framework/com.android.location.provider.odex   f    100777 0    0    -    -    -    -    –
+/framework/com.google.android.maps.jar    f    100777 0    0    -    -    -    -    –
/framework/core-junit.jar   f    100777 0    0    -    -    -    -    –

思ったほど多くの変更がされている訳では無いようです。
個別のファイルの差異は調べていません。

ダウンロードしたファームに書き換えて無事動作しています。

追記
個別のファイルのmd5sumを求め比較したところ不一致なのは1ファイルのみでその内容は以下です。
— backup/opt/build.prop 1970-01-01 09:00:00.000000000 +0900
+++ nextbook-v0.1/opt/build.prop 1970-01-01 09:00:00.000000000 +0900
@@ -28
7 +28
7 @@
bbbbb=MVPM726HN
# Do not try to parse ro.build.description or .fingerprint
ro.build.description=MVPM726HN V1.0.8 eng.root.20120214.193832
-ro.build.fingerprint=rockchip/MVPM726HN/MVPM726HN:2.3.1/GINGERBREAD/eng.root.20120214.193832:user/test-keys
+ro.build.fingerprint=google/soju/crespo:2.3.1/GRH78/85442:user/release-keys
# end build properties

Androidバックアップ

前の続き
C:\Android\Allwinner_Essential_v0.8pre2>adb shell /data/local/tmp/zergRush
[**] Zerg rush – Android 2.2/2.3 local root
[**] (C) 2011 Revolutionary. All rights reserved.
[**] Parts of code from Gingerbreak (C) 2010-2011 The Android Exploid Crew.
[-] Cannot copy boomsh.: Permission denied

エラーになるのでファイルを消す
C:\Android\Allwinner_Essential_v0.8pre2>adb shell
$ ls /data/local/tmp
ls /data/local/tmp
sh
boomsh
zergRush
$ rm /data/local/tmp/sh
rm /data/local/tmp/sh
$ rm /data/local/tmp/boomsh
rm /data/local/tmp/boomsh
$ ls /data/local/tmp
ls /data/local/tmp
zergRush
$ exit
exit

再度実行
C:\Android\Allwinner_Essential_v0.8pre2>adb shell /data/local/tmp/zergRush
[**] Zerg rush – Android 2.2/2.3 local root
[**] (C) 2011 Revolutionary. All rights reserved.
[**] Parts of code from Gingerbreak (C) 2010-2011 The Android Exploid Crew.
[+] Found a GingerBread ! 0x00000118
[*] Scooting …
[*] Sending 149 zerglings …
[+] Zerglings found a way to enter ! 0x10
[+] Overseer found a path ! 0x000161e0
[*] Sending 149 zerglings …
一回目はここで止まるので、USBケーブルを一旦はずして再度接続する

二回目
C:\Android\Allwinner_Essential_v0.8pre2>adb shell /data/local/tmp/zergRush
[**] Zerg rush – Android 2.2/2.3 local root
[**] (C) 2011 Revolutionary. All rights reserved.
[**] Parts of code from Gingerbreak (C) 2010-2011 The Android Exploid Crew.
[+] Found a GingerBread ! 0x00000118
[*] Scooting …
[*] Sending 149 zerglings …
[+] Zerglings found a way to enter ! 0x10
[+] Overseer found a path ! 0x000161e0
[*] Sending 149 zerglings …
[+] Zerglings caused crash (good news): 0x40119cd4 0x0054
[*] Researching Metabolic Boost …
[+] Speedlings on the go ! 0xafd193a3 0xafd38fbf
[*] Popping 24 more zerglings
[*] Sending 173 zerglings …
[+] Rush did it ! It\’s a GG man !
[+] Killing ADB and restarting as root… enjoy!

バックアップ
C:\Android\Allwinner_Essential_v0.8pre2>adb shell
# df
df
Filesystem    Size  Used  Free  Blksize
/dev       147M   32K  147M  4096
/mnt/asec     147M   0K  147M  4096
/mnt/obb     147M   0K  147M  4096
/system      193M  193M   4K  4096
/data       247M   39M  208M  1024
/cache      112M   5M  106M  1024
/mnt/sdcard     2G   4M   2G  4096
/mnt/secure/asec  2G   4M   2G  4096
/mnt/sdcard/external_sd  15G  466M  14G  32768
sdcardがある事を確認する

# ls /mnt/sdcard
ls /mnt/sdcard
LOST.DIR
external_sd
Android
DCIM

ファイル名の確認
# ls /dev/block
ls /dev/block
vold
mtdblock9
mtdblock8
mtdblock7
mtdblock6
mtdblock5
mtdblock4
mtdblock3
mtdblock2
mtdblock1
mtdblock0
mmcblk0p1
platform
mmcblk0
loop7
loop6
loop5
loop4
loop3
loop2
loop1
loop0

ddでファイルに書き込み
# dd if=/dev/block/mtdblock5 of=/mnt/sdcard/b5
dd if=/dev/block/mtdblock5 of=/mnt/sdcard/b5
532480+0 records in
532480+0 records out
272629760 bytes transferred in 99.049 secs (2752473 bytes/sec)
# dd if=/dev/block/mtdblock4 of=/mnt/sdcard/b4
dd if=/dev/block/mtdblock4 of=/mnt/sdcard/b4
524288+0 records in
524288+0 records out
268435456 bytes transferred in 77.517 secs (3462923 bytes/sec)
# dd if=/dev/block/mtdblock3 of=/mnt/sdcard/b3
dd if=/dev/block/mtdblock3 of=/mnt/sdcard/b3
16384+0 records in
16384+0 records out
8388608 bytes transferred in 1.063 secs (7891446 bytes/sec)
# dd if=/dev/block/mtdblock2 of=/mnt/sdcard/b2
dd if=/dev/block/mtdblock2 of=/mnt/sdcard/b2
8192+0 records in
8192+0 records out
4194304 bytes transferred in 0.590 secs (7108989 bytes/sec)
# dd if=/dev/block/mtdblock1 of=/mnt/sdcard/b1
dd if=/dev/block/mtdblock1 of=/mnt/sdcard/b1
16384+0 records in
16384+0 records out
8388608 bytes transferred in 0.962 secs (8719966 bytes/sec)
# dd if=/dev/block/mtdblock0 of=/mnt/sdcard/b0
dd if=/dev/block/mtdblock0 of=/mnt/sdcard/b0
8192+0 records in
8192+0 records out
4194304 bytes transferred in 0.538 secs (7796104 bytes/sec)
# dd if=/dev/block/mtdblock6 of=/mnt/sdcard/b6
dd if=/dev/block/mtdblock6 of=/mnt/sdcard/b6
237568+0 records in
237568+0 records out
121634816 bytes transferred in 35.353 secs (3440579 bytes/sec)
# dd if=/dev/block/mtdblock7 of=/mnt/sdcard/b7
dd if=/dev/block/mtdblock7 of=/mnt/sdcard/b7
524288+0 records in
524288+0 records out
268435456 bytes transferred in 80.402 secs (3338666 bytes/sec)
# dd if=/dev/block/mtdblock8 of=/mnt/sdcard/b8
dd if=/dev/block/mtdblock8 of=/mnt/sdcard/b8
8192+0 records in
8192+0 records out
4194304 bytes transferred in 0.597 secs (7025634 bytes/sec)
# dd if=/dev/block/mtdblock9 of=/mnt/sdcard/b9
dd if=/dev/block/mtdblock9 of=/mnt/sdcard/b9
/mnt/sdcard/b9: write error: No space left on device
4034137+0 records in
4034136+0 records out
2065477632 bytes transferred in 664.474 secs (3108440 bytes/sec)

バックアップしたファイルの確認
# ls /mnt/sdcard
ls /mnt/sdcard
LOST.DIR
external_sd
Android
DCIM
b5
b4
b3
b2
b1
b0
b6
b7
b8
b9
# exit
exit
C:\Android\Allwinner_Essential_v0.8pre2>

USBを接続し直してUSBマスストレージをONにして、b0-b9をPCに移動させました。

追記
こちらのWikiにバックアップや
ファームのアップデート方法があります。
追記2
バックアップした領域は以下の様になっていました。
赤字の部分はWikiのバックアップでの名前です。
b0: data
b1: data [kernel.img]
b2: data [boot.img]
b3: data [recovery.img]
b4: Linux Compressed ROM File System data
[system.img]
  little endian size 144650240 version #2 sorted_dirs CRC 0x6c973e7f
  edition 0
49507 blocks
661 files
b5: data [update.img]
b6: Linux rev 1.0 ext3 filesystem data
  UUID=595f6887-a816-4edb-b27f-76fbe3c99575 (needs journal recovery)
b7: Linux rev 1.0 ext3 filesystem data
  UUID=94c58d7d-6692-488b-ba66-e787a0d18d1e (needs journal recovery)
b8: data
b9: x86 boot sector
  code offset 0x58
  OEM-ID \”MSDOS5.0\”
  sectors/cluster 8
  reserved sectors 38
  Media descriptor 0xf8
  heads 255
sectors 5931008 (volumes > 32 MB)
  FAT (32 bit)
  sectors/FAT 5781
  serial number 0x8f24cb5
  unlabeled

追記2
$ dd bs=512 skip=20080 count=282520 if=b5 of=b5_system.img
282520+0 レコード入力
282520+0 レコード出力
144650240 バイト (145 MB) コピーされました、 38.9994 秒、 3.7 MB/秒

$ file b5_system.img
b5_system.img: Linux Compressed ROM File System data
little endian size 144650240 version #2 sorted_dirs CRC 0x6c973e7f
edition 0
49507 blocks
661 files

$ cmp -l b4 b5_system.img |head
cmp: ファイルb5_system.imgの末尾

cygwin上で実行しています。
b5(update.img)=update_prog(?)+b4(system.img)になっているようです。
ddのパラメータ2ch掲示板で見た値です。

Androidタブレットを購入しました

楽天で50%offクーポンが有ったので、Androidタブレットを購入してしまいました。
nextbook Premium7 M726HN
7インチ 800×480
Cortex-A8 1GHz
RAM 512MB
Android 2.3
Androidもタブレットも初めてです。

普通に使える事は判ったので、webで調べてadbを使える様にしてみました。
AndroidSDKを入れれば良いのですが、今の所そこまで必要ないので
Allwinner_Essential_v0.8pre2.zipをダウンロードして解凍します。
USBドライバが認識するように以下を追加します。
android_winusb.inf
;next book
%SingleAdbInterface%=USB_Install,USB\\VID_0BB4&PID_2910
%CompositeAdbInterface%=USB_Install,USB\\VID_0BB4&PID_2910&MI_01

デバイスマネージャのドライバの更新で変更したドライバをインストールします。
デバイスが認識される事を確認して、
C:\\Android\\Allwinner_Essential_v0.8pre2>adb start-server
C:\\Android\\Allwinner_Essential_v0.8pre2>adb devices
List of devices attached
デバイスがみつかりません。

タブレット側で
設定、アプリケーション、開発、USBデバッグをチェック
して接続する事でうまく行きました。
C:\Android\Allwinner_Essential_v0.8pre2>adb devices
List of devices attached
0123456789ABCDEF device

とりあえずrootを得るために
C:\Android\Allwinner_Essential_v0.8pre2>adb push ..\\zergRush /data/local/tmp
push: ..\\zergRush/zergRush -> /data/local/tmp/zergRush
1 file pushed. 0 files skipped.
170 KB/s (23060 bytes in 0.131s)
C:\Android\Allwinner_Essential_v0.8pre2>adb shell chmod 755 /data/local/tmp/zergRush
C:\Android\Allwinner_Essential_v0.8pre2>adb shell /data/local/tmp/zergRush
[**] Zerg rush – Android 2.2/2.3 local root
[**] (C) 2011 Revolutionary. All rights reserved.
[**] Parts of code from Gingerbreak (C) 2010-2011 The Android Exploid Crew.
[+] Found a GingerBread ! 0x00000118
[*] Scooting …
[*] Sending 149 zerglings …
[+] Zerglings found a way to enter ! 0x10
[+] Overseer found a path ! 0x000161e0
[*] Sending 149 zerglings …
[+] Zerglings caused crash (good news): 0x40119cd4 0x0054
[*] Researching Metabolic Boost …
[+] Speedlings on the go ! 0xafd193a3 0xafd38fbf
[*] Popping 24 more zerglings
[*] Sending 173 zerglings …
[+] Rush did it ! It\’s a GG man !
[+] Killing ADB and restarting as root… enjoy!
C:\Android\Allwinner_Essential_v0.8pre2>adb shell
#
プロンプトが$から#になりrootになれたようです。
zergRushの一回目の実行では途中で止まってしまいましたが、再度実行したところうまくいきました。
# df
df
Filesystem    Size  Used  Free  Blksize
/dev       147M   32K  147M  4096
/mnt/asec     147M   0K  147M  4096
/mnt/obb     147M   0K  147M  4096
/system      193M  193M   4K  4096
/data       247M   42M  205M  1024
/cache      112M   5M  106M  1024
# exit
exit
C:\Android\Allwinner_Essential_v0.8pre2>

FlashROMのバックアップを取るつもりでしたが、sdcardが見えません。
しかしストレージデバイスとして、Windows上からはアクセスできます。
Windowsからアクセス出来る様にsdcardをunmountしてるのかな?

追記
USB接続するとタブレット側に表示される「USBストレージをONにする」のままにしておくと
C:\Android\Allwinner_Essential_v0.8pre2>adb shell
$ df
df
Filesystem    Size  Used  Free  Blksize
/dev       147M   32K  147M  4096
/mnt/asec     147M   0K  147M  4096
/mnt/obb     147M   0K  147M  4096
/system      193M  193M   4K  4096
/data       247M   42M  205M  1024
/cache      112M   5M  106M  1024
/mnt/sdcard     2G   4M   2G  4096
/mnt/secure/asec: Permission denied
/mnt/sdcard/external_sd  15G  466M  14G  32768
/mnt/asec/com.androidgames.pactheman-1 4M  2M  1M  4096
でSDカードが見えました。
でも今度はrootになれません。