Sirius -旧ブログ、更新されません-

<< 前のページ | 次のページ >>

2010年10月19日(火) 21:26

実機からファームウェアの吸い出し。

新機種の中華 PAD を購入するとファームイメージがないので文鎮化したときに対処できなくなります。実は NPAD を購入した時、届いたその日に文鎮になってしまいました。

そこで、実機からファームを抜き出せないか試してみました。動いているうちに吸い出しておくと何かあったときに安心です。



以下は X5A とか M701 とかと言われている telechip 系 PAD のファームに関しての話なので他の PAD で同様にできるかどうかは分かりません。

自分が所有していて作成、書き込みして確認できたのは NPAD のみです。(ただし型番が同じだからといって同じ機体とは限らないのが中華 PAD です。)

E7002H, TMARSS P7 も持っているので作成はしてみましたが、確認まではしていません。(確実に動くとわかっているファームウェアがあるのが NPAD だけなので)





必要なもの(どっから落としたのか忘れたので探してください)

 mkyaffs2image (mkyaffs2.tar.gz)

 tccpack (tccutils.tar.gz)

 mkbootimg (mkbootimg.zip)

 split_bootimg.pl

 Linux マシン



1、実機からの吸い出し。

 adb で接続して吸い出します。

 /proc/mtd の情報から、boot, recovery を吸い出します。

 たとえば、boot が mtd0 なら

 # cat /dev/mtd/mtd0 > boot.mtd

 ※TMARSS P7 では recovery 領域に何も書き込まれていないようです。



 system は tar で吸い出します。ここでは SD に書き出しています。

 # cd /system

 # tar cvf /sdcard/system.tar .



2、ファームイメージの作成

 ここからは Linux マシン上での作業

 2-1boot.img

  吸い出した boot.mtd から kernel と ramdisk を取り出します。

  $ split_bootimg.pl boot.mtd

  boot.img にまとめます。

  吸い出した ramdisk は必要であれば修正することもできます。展開方法や ramdisk の作成は過去の記事を見てください。

  パラメータは元の boot.mtd のヘッダ情報を見て同じにします。特にベースアドレスを間違うと起動しないようです。

  $ mkbootimg --kernel boot.mtd-kernel --ramdisk boot.mtd-ramdisk.gz --cmdline 'console=ttySAC0 androidboot.hardware=tcc92xx' --base 0x40000000 -o boot.img



 2-2recovery.img

  boot.img と同様にします。

  $ split_bootimg.pl recovery.mtd

  $ mkbootimg --kernel recovery.mtd-kernel --ramdisk recovery.mtd-ramdisk.gz --cmdline 'console=ttySAC0 androidboot.hardware=tcc92xx' --base 0x40000000 -o recovery.img



 2-3system.img

  system を展開します。

  $ (mkdir system;cd system;tar xvf ../system.tar)

  mkyaffs2image で作成します。

  $ mkyaffs2image -f system system.img



 2-4boot.img, recovery.img system.img を一つにまとめます。

  $ tccpack boot.img system.img recovery.img tcc8900_mtd.img



これでできた tcc8900_mtd.img を指定して FWDN で焼きこめばいいようです。



※TMARSS P7 の boot.mtd-ramdisk.gz と NPAD の boot.mtd-ramdisk.gz は比較したらまったく同じでした。TMARSS P7 の recovery.img の作成はカーネルに TMARSS P7 の boot.mtd-kernel、ramdisk に NPAD の recovery.mtd-ramdisk.gz を指定して作成しました。

written by sirius [Android] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2010年10月18日(月) 10:40

展開したファームウエアをまとめる。

NPAD のファームウェアを展開、修正したあとでまとめて FWDN で書き込めるようにします。この内容の利用は自己責任でお願いします。pad が文鎮になっても責任は取れません。

前回展開したものを利用します。



必要なもの

 mkyaffs2image

 mkbootimg

 tccpack

 ※ mkbootimg はページサイズを 4096 に修正。

 ※ mkyaffs2image はチャンクサイズを 4096 にスペアサイズを 128 に修正。また、ecc はサポートなしにする。



1、boot.img 用の ramdisk の作成

 修正済みの ramdisk ツリーのトップに移動して、

 $ find . -print0 | cpio -o0 -H newc | gzip -9 > ../boot.img-ramdisk-new.gz



2、boot.img の作成

 ベースアドレスやコマンドラインのパラメータはもともとの boot.img と同じものを指定します。特にベースアドレスの指定を間違えると起動しなくなります。

 boot.img のパラメータを表示するプログラムのソースをここにおきます。コンパイルには bootimg.h が必要です。

 ベースアドレスは、カーネルアドレスの下位4桁は 0 にします。

 $ mkbootimg --kernel boot.img-kernel --ramdisk boot.img-ramdisk-new.gz --cmdline 'console=ttySAC0 androidboot.hardware=tcc92xx' --base 0x40000000 -o boot-new.img



3、recovery.img の作成

 rycovery.img は作り直す必要はないと思いますが、boot.img と同様にすることで作成できます。



4、system.img の作成

 yaffs2 の mkyaffs2image を使って作成します。mkyaffs2image で ecc を有効にすると FWDN で書き込んだときに CRC エラーになります。三日くらい悩みました。普通に make したら ecc が有効になってました。

 system に展開したとして、

 $ mkyaffs2image -f system system-new.img



5、tcc8900_mtd.img の作成

 作成したものを使って一つにまとめます。

 $ tccpack boot-new.img system-new.img recovery.img tcc8900_mtd-new.img



これで出来上がった tcc8900_mtd-new.img のみを FWDN で書き込めば OK です。

失敗しても、元の tcc8900_mtd.img を書き込めば大丈夫です。

written by sirius [Android] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2010年10月13日(水) 23:31

NPAD のファームウェアを分解してみる。

NPAD も持っています。



NPAD のファームもいくつか手に入れることができるようになったのでファームの中の tcc8900_mtd.img を分解してみます。



必要なもの。

 tccutils

 mkbootimg

 mkyaffs2

 split_bootimg.pl

 それぞれどこから落としたのか忘れたので探してください。

 私は、x64 な Linux で作業したので全部コンパイルしました。



1、ソースの修正

 mkbootimg は pagesize がソースの中で 2048 固定となっています。

 NPAD のファームを見ると pagesize は 4096 のようなので修正します。

 また、ハッシュの計算に sha を使っているようなので、sha.h や sha.c も必要でした。



 mkyaffs2 の unyaffs.c もlchmod 関数とかでメッセージが出るので修正しました。



2、tcc8900_mtd.img の展開

 tccutils の tccunpack を使うと、boot.img, system.img recovery.img を取り出すことができます。



 $ tccunpack tcc8900_mtd.img



2−1、system.img の展開

 mkyaffs2 の unyaffs を使って展開できます。



 $ mkdir system

 $ cd system

 $ unyaffs ../system.img



2−2、boot.img, recovery.img の展開

 boot.img と recovery.img は同じ構造をしています。

 split_bootimg.pl を使うことで、カーネルとラムディスクを取り出すことができます。



 $ split_bootimg.pl boot.img

 $ split_bootimg.pl recovery.img



 boot.img-kernel, boot.img-remdisk.gz, recovery.img-kernel, recovery.img-ramdisk.gz ができます。



2−2−1 ラムディスクイメージの展開

 ここでは、boot.img のラムディスクを展開しますが、recovery.img も同様です。

 cpio でアーカイブしたものを gzip 圧縮しているだけなので次のようにして展開できます。



 $ mkdir ramdisk

 $ cd ramdisk

 $ zcat ../boot.img-ramdisk.gz | cpio -i



boot.img のラムディスクがルートファイルシステム、system.img が /system なので、ここで展開したものを修正してカスタムファームウェアを作成することもできるようです。

展開したイメージからファームウェアを作成する方法はまた今度説明します。



なお、エンディアンが違うとうまくいかない場合があるようです。x86 ではそのままで大丈夫なようですが、玄箱(PowerPC)でやってみたら、system.img の展開ができないようです。

また、ファームはこのあたりにあります。

written by sirius [Android] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2010年10月11日(月) 21:36

Android にはまっています

最近、android タブレットにはまっています。



iPad が気になっていたのですが、値段が高いことと、Apple 縛りで自由度が少ないこと、サイズが大きいという点で選択肢の中には入りません。



ふとみると、aPad とか、ePad とかいう製品がありました。どの製品も中華製のようですが、とにかく値段が安い!



はじめに買ったのが EIKEN というところの M001 という製品でした。iPad のパチモンとかといわれる中でデザインがまったく違い、しかも 1 万そこそこで買える!

即座にポチリました。まあ、値段が値段なので iPad と比べるまでもなく、動作はもっさりだし、バッテリーの持ちもあまりよくありません。

ところが、割り切って用途を限定して使うと無いよりましかな。場合によっては使えるかな。というくらいになりました。



その後、ちょっと性能がよいのが出ると買ってしまい、気がつくと iPad が買えるくらいの出費。



でもいいんです。ファームウェアを書き換えたり、Android から Windows CE に変えたりなんか iPad じゃ無理ですから。



あ、中華製なので品質は期待しないでください。自分は不良品にあったことは一度だけです。それもまったく使えないわけではないので大丈夫でした。しかし、巷ではすぐ動かなくなっただの、充電できなくなっただのという話や、作りが悪いので半田付けし直さないとまともに使えないだのと言う話もあります。ま、それが楽しかったりするんですけど。

written by sirius [Android] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

<< 前のページ | 次のページ >>

Sirius -旧ブログ、更新されません-

MySketch 2.7.2 written by 夕雨