ESP01 firmwareぶっこぬき

4ピンのソケットをUSBに変えるだけのちょっとした工作が... 何しろ大学を出て以来2年以上も電子工作から遠ざかっていたから「あるはずの工具/部品がないないない」ばっかりで時間を浪費してしまった.USBの口は確かに昔買ったやつが1個余ってたはずなんだが... しょうがないので余ってたケーブルを1本切断.細目のUEWを媒介に適当につないでLinux PCに刺すと認識した:

$ dmesg|tail -n 30
(略
[2173339.700061] usb 1-8: new high speed USB device using ehci_hcd and address 17
[2173339.832896] usb 1-8: New USB device found, idVendor=1234, idProduct=5678
[2173339.832905] usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[2173339.832911] usb 1-8: Product: Flash Disk
[2173339.832916] usb 1-8: Manufacturer: Generic
[2173339.832921] usb 1-8: SerialNumber: CCCB1102231412290411559308
[2173339.833989] scsi11 : usb-storage 1-8:1.0
[2173339.935214] usbcore: registered new interface driver usbtouchscreen
[2173340.834428] scsi 11:0:0:0: Direct-Access     Generic  Flash Disk       5.00 PQ: 0 ANSI: 2
[2173340.836267] sd 11:0:0:0: Attached scsi generic sg2 type 0
[2173340.836940] sd 11:0:0:0: [sdd] 4505600 512-byte logical blocks: (2.30 GB/2.14 GiB)
[2173340.837658] sd 11:0:0:0: [sdd] Write Protect is off
[2173340.837670] sd 11:0:0:0: [sdd] Mode Sense: 0b 00 00 08
[2173340.838543] sd 11:0:0:0: [sdd] No Caching mode page present
[2173340.838553] sd 11:0:0:0: [sdd] Assuming drive cache: write through
[2173340.842166] sd 11:0:0:0: [sdd] No Caching mode page present
[2173340.842175] sd 11:0:0:0: [sdd] Assuming drive cache: write through
[2173340.847270]  sdd: sdd1 sdd2 < sdd5 sdd6 sdd7 sdd8 >
[2173340.851014] sd 11:0:0:0: [sdd] No Caching mode page present
[2173340.851025] sd 11:0:0:0: [sdd] Assuming drive cache: write through
[2173340.851034] sd 11:0:0:0: [sdd] Attached SCSI removable disk
[2173341.392955] EXT3-fs: barriers not enabled
[2173341.751394] kjournald starting.  Commit interval 5 seconds
[2173341.751443] EXT3-fs (sdd5): warning: checktime reached, running e2fsck is recommended
[2173341.752225] EXT3-fs (sdd5): using internal journal
[2173341.752234] EXT3-fs (sdd5): recovery complete
[2173341.754300] EXT3-fs (sdd5): mounted filesystem with ordered data mode
$ /sbin/blkid
/dev/sda5: UUID="2c79ea0e-758f-45cf-8854-a43bfe0443b6" TYPE="swap"
/dev/sda1: LABEL="zboxRoot" UUID="e9da30f8-1ce6-4dd2-a7f6-c7f133dc51dc" TYPE="ext3"
/dev/sda6: LABEL="zboxHome" UUID="a3b5e1c8-df04-46cb-90ca-3890ccf22575" TYPE="ext3" SEC_TYPE="ext2"
/dev/sdd1: SEC_TYPE="msdos" UUID="386D-43BB" TYPE="vfat"
/dev/sdd5: UUID="f9cdfa5a-59b8-442b-b478-42fbcc3b1fb4" TYPE="ext3"
/dev/sdd6: UUID="0941c78e-520b-4530-ad74-fd5b33781717" TYPE="ext3"
/dev/sdd7: UUID="19524c2a-f81b-407f-8a36-eb1c9fdb46a4" TYPE="ext3"
/dev/sdd8: UUID="386D-4475" TYPE="vfat"
$ /sbin/sfdisk -l -uS /dev/sdd

Disk /dev/sdd: 35758 cylinders, 2 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sdd1            63     64637      64575  83  Linux
/dev/sdd2         64638   4505507    4440870   5  Extended
/dev/sdd3             0         -          0   0  Empty
/dev/sdd4             0         -          0   0  Empty
/dev/sdd5         64701    783467     718767  83  Linux
/dev/sdd6        783531   2049263    1265733  83  Linux
/dev/sdd7       2049327   2254517     205191  83  Linux
/dev/sdd8       2254581   4505507    2250927  83  Linux
$ /sbin/fdisk -u 512 -l /dev/sdd

Disk /dev/sdd: 2306 MB, 2306867200 bytes
2 heads, 63 sectors/track, 35758 cylinders, total 4505600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x003edbfa

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1              63       64637       32287+  83  Linux
/dev/sdd2           64638     4505507     2220435    5  Extended
/dev/sdd5           64701      783467      359383+  83  Linux
/dev/sdd6          783531     2049263      632866+  83  Linux
/dev/sdd7         2049327     2254517      102595+  83  Linux
/dev/sdd8         2254581     4505507     1125463+  83  Linux
$ mount
(略
/dev/sdd5 on /media/usb0 type ext3 (rw,noexec,nosuid,nodev,sync,noatime)
/dev/sdd6 on /media/usb1 type ext3 (rw,noexec,nosuid,nodev,sync,noatime)
/dev/sdd1 on /media/usb2 type vfat (rw,noexec,nosuid,nodev,sync,noatime,dmask=0000,fmask=0111)
/dev/sdd8 on /media/usb3 type vfat (rw,noexec,nosuid,nodev,sync,noatime,dmask=0000,fmask=0111)
$ ls /media/usb0
LocalDisk/  busybox/  data/         dev/  init*              init.rc*  lost+found/  sbin/    sqlite_stmt_journals/  system/
bin/        cache/    default.prop  etc@  init.goldfish.rc*  lib/      proc/        sdcard/  sys/                   udisk/
$ ls /media/usb1
anr/  app/  app-private/  dalvik-cache/  data/  local/  lost+found/  misc/  property/  system/  tombstones/  wmtpref/
$ ls /media/usb2
animation.data  ramdisk_for_restore.gz  uzImage.bin
$ ls /media/usb3
albumthumbs/  download/  ~peacock/  ~wmtmail/

マウントは usbmount が勝手にやってくれた.しかし思ったよりパーティション分けが多い.ARM版の,本物(主流?)のAndroid(-x86でない方)はこれが初めてなので勝手がつかめない.公式(?)イメージでも落として中を見比べるか.ESP01に入ってるのは1.6なはずで,コードネーム "Donut" なんだね.

sdd8 の中はAndroidアプリから見えるユーザ・データの保存領域として見覚えがある.sdd5 がOSで sdd6 がいわゆるAndroidアプリの領域かな? しかしDas U-Bootがブートするカーネルsdd1/uzImage.bin なの? うむむ.まぁARMにおけるブート・プロセスの勉強が主目的だからどんと来いだ.
とりあえず吸い出しておく:

# dd if=/dev/sdd of=/tmp/sdd.img bs=100b count=45056
45056+0 records in
45056+0 records out
2306867200 bytes (2.3 GB) copied, 117.241 s, 19.7 MB/s

と,吸い出し終わってどっかにアップロードしようかと思ったら,数時間使った間の私の個人的なユーザ情報(無線LANとか)が残ってしまったイメージであることに気づく.初期化するんだった.まぁせっかくだから一通りの解析が済んでAndroid 2.3 (Gingerbread) またはそれベースのCyanogenMod 7.0.3を入れるスキルが身に付く(もしくは私のESP01も文鎮になる)まで待たせてもらうか.
なお電子機器が「文鎮になった」というのは英語で "was bricked" と言うらしい.