光iフレームのファイルシステムを調べる(2)

さて、ディスクイメージを取ったものの、このファイルシステムはMacでは読めないjffs2です。

でもLinuxなら読めるんですよね、Linuxなら…。

細かいことは考えず、VMWareでLinuxをインストールすることにしました。
Android自体、Linuxがプラットホームですからね。カーネルをいじるにはやはりMacよりLinuxでしょう。

さて、通常ディスクイメージはloopbackデバイス経由でマウントできるのですが、jffs2は少し状況が違うようです。

jffs2イメージをloopback mount – Pylone Blog

上のリンクにあるように、いったんblock2mtdドライバを介さなければならないそうです。
最初、普通にマウントしようとしてうまくいかず、悩んでしまいました。
やはり、何かおかしいときにはgoogle先生にお伺いを立てるほうがいいですね。

方法さえ把握してしまえば

# losetup /dev/loop0 mtd6.bin
# modprobe block2mtd block2mtd=/dev/loop0
# mount -t jffs2 -o ro /dev/mtdblock0 test

こんな感じで、無事マウントして中身をのぞくことができました。

ちなみにmtd6とmtd7は、やはりファームウェア新旧のルートファイルシステムのようです。
全ファイルのリストを取って調べてみましたが、差分は比較的小さなものでした。

mtd0~mtd5は、ディスクイメージではないようです。
調べてみたら、こんな感じでした。

■mtd0(boot1)、mtd1(boot2) … たぶんブートローダ

stringsで中の文字列を表示させてみると、ブートローダのようです。
boot1とboot2は別モノで、boot1の中でboot2の内容をチェックしているらしい。
boot1がモニタでboot2がLinuxローダとか、そんな感じに見えます。

■mtd2(ctrl) … 何らかの制御用データ、起動パラメータ?

中はファイル名らしきものと、日付が入っています。こんな感じ。

sh-3.2$ strings mtd2.bin
Thu Mar 10 15:31:21 2011
ota_WDPF_701ME_ES2_FACTORY_NS_timbit_v2.1.1-MP4_jffs2.bin
H78Thu Dec 16 09:28:03 2010
ota_WDPF_701ME_ES2_FACTORY_NS_timbit_v2.1.1-MP4_jffs2.bin
Thu Mar 10 15:31:21 2011
ota_WDPF_701ME_ES2_FACTORY_NS_timbit_v2.1.1-MP4_jffs2.bin
H78Thu Dec 16 09:28:03 2010
ota_WDPF_701ME_ES2_FACTORY_NS_timbit_v2.1.1-MP4_jffs2.bin
sh-3.2$

■mtd3(nvdata) … /nvdataにマウント(jffs2)

設定情報を保持しているようですね。中身はこんな感じです。

$ cd /nvdata
$ ls
etc voip
$ cd etc
$ ls -lat
drwxrwxrwx 3 root root 0 Jun 29 12:25 .
-rw——- 1 10015 10015 109 Jun 29 12:25 update_check_result
-rw——- 1 10015 10015 91 Jun 29 09:45 update_check_fail
-rwxrwxrwx 1 root root 18 Jun 29 09:14 mac_address
-rw——- 1 10015 10015 0 Jun 8 17:31 froyo_updated
-rw-r–r– 1 root root 638 Jun 8 17:30 wl-nvram.txt.temp
-rwxrwxrwx 1 1000 1000 11 Jun 8 17:28 update_date
drwxrwxrwx 5 root root 0 Mar 29 17:46 ..
-rw-r–r– 1 root root 18 Mar 29 17:45 mac_address2
-rwxr-xr-x 1 root root 12 Mar 29 17:45 product_id.back
-rwxrwxrwx 1 root root 12 Mar 29 17:45 product_id
-rwxrwxrwx 1 root root 6 Mar 29 17:45 firmware_version
-rwxr-xr-x 1 root root 4546 Jan 1 1970 network-interface.cfg
-rwxr-xr-x 1 root root 653348 Jan 1 1970 vmcs_all.bin
-rwxr-xr-x 1 root root 0 Jan 1 1970 LMS700KF23
-rwxr-xr-x 1 root root 5931 Jan 1 1970 vcboot_LMS700KF23
-rwxr-xr-x 1 root root 193643 Jan 1 1970 vceb.bin
-rw-r–r– 1 root root 210 Jan 1 1970 enet.cfg
drwxr-xr-x 2 root root 0 Jan 1 1970 greybox
$ mount|grep mtd
/dev/mtdblock3 on /nvdata type jffs2 (rw)
/dev/mtdblock10 on /firmwarestorage type yaffs (rw)
$

froyo_updatedっていうファイルがあるのがちょっと気になりますねー。
froyoというのはAndroid2.2ですからね。
やはり2.2へのアップグレードが計画されているのでしょうか。

■mtd4(k0)、mtd5(k1) … Linuxカーネル

ARMのzImageのマジックナンバー(016f2818)が入っていますので、zImageで間違いないでしょう。

sh-3.2$ od -x -A x -v mtd4.bin |head -4
0000000 0000 e1a0 0000 e1a0 0000 e1a0 0000 e1a0
0000010 0000 e1a0 0000 e1a0 0000 e1a0 0000 e1a0
0000020 0002 ea00 2818 016f 0000 0e00 b0b8 0e21
0000030 7001 e1a0 8002 e1a0 2000 e10f 0003 e312
sh-3.2$ od -x -A x -v mtd5.bin |head -4
0000000 0000 e1a0 0000 e1a0 0000 e1a0 0000 e1a0
0000010 0000 e1a0 0000 e1a0 0000 e1a0 0000 e1a0
0000020 0002 ea00 2818 016f 0000 0e00 b028 0e21
0000030 7001 e1a0 8002 e1a0 2000 e10f 0003 e312
sh-3.2$

参考:
Booting ARM Linux

■mtd6, mtd7は前回見たようにルートファイルシステムですね。

■mtd8〜mtd10 … 特定のマウントポイントにマウントするファイルシステム

dmesgから

mtd8(userdata) … /data (UBIFS)
mtd9(dpfdata) … /dpfdata(UBIFS)
mtd10(firmwarestorage) … /firmwarestorage (yaffs)

と分かります。

UBIFSもjffsと同じくフラッシュ向けのファイルシステムで、大容量フラッシュのマウントにはjffsよりも向いているそうです。

参考:
CEREVO TechBlog – Introduction of UBIFS

■mtd11〜mtd13

内容を推測すると、多分

mtd11(factoryreset) … mtd10と同じサイズなので、初期化に使う?
mtd12(serialdata) … 0.5MB。0xFFで埋められている。使っているのかどうかも不明。
mtd13(vcfw) … 2MB。ビデオ処理用プロセッサのファームウェア?

という感じだと思います。
今のところ、ちょっと興味がわかないので、この3つは放置で…。

コメント