前回の続き。
UQのUSB型mobile wimaxインターフェイスであるUD01SSの解析メモ。
UD01SSのファームウェア(Linux)を覗く
UD01SSは前回も書いたようにLinux(正確にはuclinux)をファームウェアとして利用している。普通に使っていると「なんか認識まで時間がかかるなあ」と思うが、これも裏でlinuxがブートして頑張っていると思うとちょっとは許せてしまうかもしれない。
今回のエントリでは、FirmwareUpdateとして配布されているUD01SSの内部のファイルシステムを覗いてみる方法を紹介する。
Windowsの場合はProgram Files\UQ\UD01SS\FirmwareUpdate\というディレクトリの下にzImageとramdisk.jffs2が配置されている(OSXの場合はまた別の場所。適当に探してほしい)。zImageが圧縮されたlinuxカーネル本体で、ramdisk.jffs2がUD01SSのフラッシュメモリに書き込まれているルートファイルシステム以下のユーザランドファイルシステムだ。kernelの解析はまたにしておいて、わかりやすいramdisk.jffs2を見てみることにする。
jffs2はlinux(とくに組み込み系)で利用されているファイルシステム形式でフラッシメモリに対する書き込みイメージとして利用される。これを普通のPCで動いているLinuxでマウントして見るためには、以下のような手続きが必要だ。ここでは手元のlinuxはi386系で動いていることを仮定しておく。
問題はUD01SSがARMでファイルシステムのそれに合わせて構成されていることだ。エンディアンを変換してあげないとi386のPCではマウントできない。jffs2のイメージの操作にはmtd-toolsというユーティリティを使えばよい。適当に手順を書くと、
- linuxホストにramdisk.jffs2を持ってくる
- apt-get instlal mtd-toolsなどでmtd-toolsをインストールする
- インストールしたツールでエンディアンをリトルエンディアンに変換する。
- jffs2dump -v -b -e ramdisk-le.jffs2 ramdisk.jffs2
- 必要なカーネルモジュールをロードする。
- sudo modprobe jffs2
- sudo modprobe mtdblock
- ループバックファイルシステムとしてマウントする。
- sudo losetup /dev/loop0 ramdisk-le.jffs2
- sudo modprobe block2mtd block2mtd=/dev/loop0,16384
- sudo mount -t jffs2 -o ro /dev/mtdblock0 /mnt
UD01SSのファイルシステム概略
細かいことまで見たい人はぜひ自分で覗いてみてほしいが、ざっくりとしたところをメモとして書いておく。
- ユーザーはrootだけ(パスワードはちゃんと付いている)
- ユーザランドバイナリはbusybox化されている。shもある。
- メインアプリケーションは/usr/wimaxコマンドらしい。たぶんこれがもう一つのOSで動いているタスク群と通信している。
UD01SSのカーネルイメージ
本当はzImageもばらしたほうがいいが、だいぶめんどさいのでgzipで圧縮された場所を引っ張り出してstringsしたくらいで満足してしまった。だれか挑戦した人がいたら詳細を教えてくれるとうれしいかも。
次回のエントリではWimaxインターフェイスとしての基本動作を書いてみる予定。
1 件のコメント:
最近BIC版のUD01SSを入手したので早速Firmwareをみましたが、mar.dat, miz.datという中身不明なファイルでした。
コメントを投稿