ロジテック製 無線LANルータ LAN-W300N/G8 用ファームウェアの展開
現在公開されている v1.03のファームウェアをカスタマイズを考えています。
その準備として、ファームウェアのイメージファイルを解凍してファイルを取り出せる
ようにします。
イメージファイル: LAN-W300NG8_v1.03.bin
Realtek SDKやインターネット上の資料を元に調査したところ、イメージファイルは
次のような構造になっています。
3つのバイナリーブロックに分かれています。
ブロック データ格納位置(16進) サイズ(16進) 形式
[WEBPAGES] 00000000 - 000176c1 176b2 webpage :bzip2形式
[LINUX] 000176c2 - 000ee6d3 d7002 バイナリ
[ROOTFS] 000ee6d4 - 001ea6e3 fc002 Squashfs-lzma
まずは、各データの切り出し。作業はCentOS上で行いました。
# dd if=LAN-W300NG8_v1.03.bin of=webpages.bin bs=1 skip=16 count=95922
# dd if=LAN-W300NG8_v1.03.bin of=linux.bin bs=1 skip=95954 count=880642
# dd if=LAN-W300NG8_v1.03.bin of=rootfs.bin bs=1 skip=976612 count=1032194
それそれのブロックには16バイトのヘッダー情報がありその部分は、
スキップしています。
これで、webpages.bin、linux.bin、rootfs.bin が得られました。
念のためfileコマンドで確認します。
# file webpages.bin
webpages.bin: bzip2 compressed data, block size = 900k
# file linux.bin
linux.bin: data
# file rootfs.bin
rootfs.bin: Squashfs filesystem, little endian, version 4.0, 1030543 bytes, 226 inodes,
blocksize: 131072 bytes, created: Tue May 6 15:28:16 1902
次に各ファイルの解凍
1) webpages.bin
# bunzip2 webpages.bin
bunzip2: Can't guess original name for webpages.bin -- using webpages.bin.out
bunzip2: webpages.bin: trailing garbage after EOF ignored
なんかエラーでましたが、解凍はできました。
解凍ファイルはwebpages.bin.out となります。
webpages.bin.out は、ルータ内の/var/web下のファイルを1つに纏めたものものです。
更にこれの解凍が必要ですが、形式がSDK独自の形式で苦労しました。
結局、SDKのflashコマンドのソースを切り出してコマンドを自作しました。
weboutというコマンドです。
webpages.bin.out の解凍
# mkdir web
# webout webpages.bin.out web
size=657002
file=web/wizard.asp
file=web/macfilter.asp
file=web/home.asp
file=web/menu-images/menu_tee_minus.gif
file=web/menu-images/menu_tee.gif
・・・・
(以下省略)
# cd web
# ls

これで、webページのファイルが展開できました。
2)linux.bin
このファイルはLinuxのカーネルです(たぶん)。
特にいじる必要が無いのでこのままにします。
2013/09/18 追記
カスタムファームウェア作成時、ヘッター部が必要なことが判明しました。
linux.bin をヘッター部16バイト付の作成は次のコマンドを実行します。
# dd if=LAN-W300NG8_v1.03.bin of=linux.bin bs=1 skip=95938 count=880658
3)rootfs.bin
このファイルはルーターの / 以下のファイルシステムです。
単なるSquashfs形式(圧縮ファイルシステム)かと思い、unsquashfs コマンドを
試すと次のエラーが発生。
# unsquashfs rootfs.bin
Parallel unsquashfs: Using 2 processors
zlib::uncompress failed, unknown error -3
read_block: failed to read block @0xfb709
read_fragment_table: failed to read fragment table index
FATAL ERROR aborting: failed to read fragment table
squashfs-toolsの最新版(4.2)のソースをコンパイルして試してもだめ
# unsquashfs rootfs.bin
Filesystem uses lzma compression, this is unsupported by this version
Decompressors available:
gzip
xz
lzma形式未対応のようで、lzma対応版を入手して試す
#unsquashfs-lzma rootfs.bin
Parallel unsquashfs: Using 2 processors
uncompress failed, unknown error 1
read_block: failed to read block @0xfb709
read_fragment_table: failed to read fragment table index
FATAL ERROR aborting: failed to read fragment table
お手上げ状態。いろいろ調べ「ままれのblog」さんの記事に行きつきました。
参考にした記事:CQW-MRB2: ファーム更新失敗と復旧 の
Edimax 3G6218Nのホームページへ行き、GPL Source Codeをダウンロードします。
のリンクから3G-6218n_RTL8196C_3G_GPL_20110121.zip を入手して
解凍しunsquashfs コマンド 取り出して利用しました。
あっけなく解凍できました。
# unsquashfs rootfs.bin Parallel unsquashfs: Using 2 processors
211 inodes (223 blocks) to write
[==========================================================/] 223/223 100%
created 99 files
created 15 directories
created 70 symlinks
created 42 devices
created 0 fifos
# cd squashfs-root
# ls -l
合計 40
drwxr-xr-x 2 root root 4096 9月 30 10:35 2011 bin
drwxr-xr-x 2 root root 4096 9月 30 10:35 2011 dev
drwxr-xr-x 4 root root 4096 9月 30 10:35 2011 etc
drwxr-xr-x 2 root root 4096 9月 30 10:35 2011 home
lrwxrwxrwx 1 root root 8 9月 17 20:42 2013 init -> bin/init
drwxr-xr-x 2 root root 4096 9月 30 10:35 2011 lib
drwxr-xr-x 2 root root 4096 9月 30 10:35 2011 mnt
drwxr-xr-x 2 root root 4096 9月 30 10:35 2011 proc
drwxr-xr-x 2 root root 4096 9月 30 10:35 2011 sys
lrwxrwxrwx 1 root root 8 9月 17 20:42 2013 tmp -> /var/tmp
drwxr-xr-x 3 root root 4096 9月 30 10:35 2011 usr
rwxr-xr-x 2 root root 4096 9月 30 10:35 2011 var
lrwxrwxrwx 1 root root 8 9月 17 20:42 2013 web -> /var/web
とりあえず、イメージファイルの解凍ができました。
2013/09/18 追記
後からSDKを調べると、unsquashfs-tools のソースが含まれていました。
# cd ./rtl819x-SDK-v3.2.3/rtl819x/users/squashfs4.0/squashfs-tools
# make
これでコンパイルすればunsquashfs、ununsquashfs が作成できます。
このコマンドの利用で解凍できました。
次は、ファイルを固めてファームウェアファイル(イメージファイル)を作成する
方法と、tftpによるファームウェアの流し込み方法について調査します。
最近のコメント