« けものフレンズ - ジャパリカフェ | トップページ | けものフレンズ - 巨大迷路 »

2017年9月24日 (日)

Sharp PDA - [04] SL-C750 の Flash メモリ

これは、SL-C750 の内蔵 Flash メモリについて調べたときのメモです。(2003/09/09 更新)

正式に公開されている情報ではないので、間違いがあるかもしれません。
現段階では、内蔵 Flash のデータ構造を解析中の段階なので、新たなことがわかり次第、アップデートしていく予定です。 内蔵 Flash の書き換えを行う場合は、事前に Service Menu の NAND Flash Back Up、NAND Flash Restore を使用して バックアップを行って、完全に前の状態に戻せるようにしてから行ったほうが良いでしょう。

内蔵 Flash のメモリマップ

現段階で推測する、SL-C750の内蔵 Flash メモリマップは以下のとおり。
Nandmap

Mainte

メンテナンスメニュー用のプログラムが入っているエリア。Power キーを押しながら電源を入れると、 メンテナンスメニューが表示される。

Parameter Area

各種パラメータが入っているエリア。SL-C750 のカーネルソースの linux/include/asm-arm/sharp_nand_param.h に、Parameter Area の定義がある。

NandDiag

診断チェック用のプログラム。Service Menu や Diag Menu 用のプログラムが入っているエリアかと思う。 キーボードの D と M キーを押しながら、 バッテリーのスイッチをロックにすると Service Menu が表示される。 キーを D と P にすると、Diag Menu が表示される。

Zimage(1st Kernel)

Linux のカーネルが入っているエリア。通常の使用時にこのカーネルを使用する。メンテナンスメニューから カーネルのアップデートを行うと、このエリアのカーネルがアップデートされる。

Zimage(2nd Kernel)

Linux のカーネルが入っているエリア。Maintain Kernel と呼ばれる。 メンテナンスメニューからアップデートを実行すると、このカーネルが 起動される。また、キーボードの D と B キーを押しながら、 バッテリーのスイッチをロックにすると Maintain Kernel として起動することができる。 ルートファイルには、Initrd.gz(2nd FS)を使用する。

Initrd.gz(2nd FS)

Maintain Kernel での起動時に、このエリアのデータがルートファイルとして使用される。 この中には、通常の起動時に使用するルートファイルシステムには入っていない、 nandcp、nandlogical、decsh コマンドなどが入っている。このルートファイルシステムの中を 見てみるといろいろな発見があると思う。

ROOT

ルートファイルシステムが入っているエリア。初期状態ではリードオンリーとなっている。 mount コマンドで、R/W できるように remount しなおせば書き込みが可能になる。

HOME

ユーザーが作成したデータを格納するエリア。/home に割り当てられる。

内蔵 Flash イメージの抽出

現在のところ、SL-C750 の内蔵 Flash 全体をアップデートする ROMIMAGE は公開されてないので、 ROMIMAGE は自分で抽出する必要があります。抽出するためには、dd コマンド、nandlogical コマンドを 使用します。

dd コマンドを使用すると、SMF(mtd1)、ROOT(mtd2)、HOME(mtd3)のデータを抽出することができます。

  • dd コマンドの使用例

#dd if=/dev/mtd1 of=mtd1.bin
#dd if=/dev/mtd2 of=mtd2.bin
#dd if=/dev/mtd3 of=mtd3.bin

  • nandlogical コマンドの使用例

#nandlogical /dev/mtd1 READ 0x00000000 0x40000 mainte.bin

nandlogical コマンドは、ROOT(mtd2) には入っておらず、Maintain Kernel で起動した時に使用される、 Initrd.gz(2nd FS)のルートファイルシステム内に入っている(/sbin 内にある)。 nandlogical コマンドで内蔵 Flash への書き込みも行うことができる (メンテナンスメニューから行うアップデートでも nandlogical コマンドを使用している)。

nandlogical コマンドを使用して、Mainte、NandDiag、ZImage、Initrd.gz、Paraminf.bin(Partation Info+Model)の 抽出を行うためのシェルスクリプトを用意しました。ご自由にお使いください。 ダウンロード(「extract.sh」をダウンロード )

抽出したイメージファイルの内容

抽出した mtd1 は 7168k、mtd2 は 25600k、mtd3 は 32768k バイトです。

抽出した mtd1 ファイルの内容は、内蔵 Flash メモリマップどおりに、 Mainte、Parameter Area、NandDiag、Zimage、Initrd.gz などに対応するバイナリデータは格納されておらず、 各イメージのオフセットは以下のようになっていると思われる(推測)。

00000000h:AdjValue、00004000h:BootFlag、00008000h:Mainte、00048000h:NandDiag、000A8000h:ZImage(1st Kernel か 2nd Kernel のどちらか)、 001E4000h:Initrd.gz(2nd FS)、0524000h:ZImage(1st Kernel か 2nd Kernel のどちらか)、00660000h:Partition Info1、00664000h:Partition Info2、 00668000h:Model、0066C000h:MVersion、00674000h:Version、0067C000h:Clock。あとは不明。

nandlogical コマンドで読み出せないエリア

nandlogical コマンドで読み出せないエリアがあった。読み出せなかったエリアは以下のとおり。

00050000h-00053FFFh、00058000h-005FFFFh、0006C000h-006FFFFh、00074000h-0007BFFFh、000DC000-000DFFFFh、 0021C000h-0021FFFFh、0035C000-0035FFFFh、006A0000h-006A3FFFh。

内蔵 Flash の書き換え

通常、カーネルイメージとルートファイルシステムをアップデートする場合は、 メンテナンスメニュー上から行いますが、SL-A300 のときみたいに updater.pro ファイルを使用して、Service Menu から内蔵 Flash へ書き込みを行うこともできます。 用意するものは以下のとおり。

Service Menu を使用すると、LCD、CF、SD、内蔵 Memory、内蔵 Flash などのデバイスに対して テストや診断、Read、Write テストを行うことができるが、Write、Erase などの項目は、実際にデバイスに対して 書き込み、消去の動作を行うため、デバイスに書き込まれているデータが上書きされてしまう。
例えば内蔵 Flash に対して Full Erase を行うと、内蔵 Flash の中身が消去されてしまうため、 Zaurus が今後使用できなくなる。
復旧するには、 メーカーに送って、内蔵 Flash に ROM イメージを書き込んでもらうなどの処置が必要になる可能性があるので、 十分に注意する必要がある。もし万が一機器にダメージを与えてしまう可能性があっても当サイトはいっさい保障しないので 自己責任において行っていただきたい。

  • updater.pro ファイル

ダウンロード(「updater.pro」をダウンロード )

MAINTE  ,BIN,0x00000000,256
NANDDIAG,BIN,0x0007C000,384
ZIMAGE  ,BIN,0x00220000,1264
INITRD  ,GZ ,0x00360000,3328
ZIMAGE  ,BIN,0x000E0000,1264
PARAMINF,BIN,0x00060000,48
MVERSION,BIN,0x00070000,16
;VERSION ,BIN,0x00048000,16
;ROOT    ,BIN,0x00700000,25600
;HOME    ,BIN,0x02000000,32768

  • 抽出したバイナリファイル

MAINTE.BIN
NANDDIAG.BIN
ZIMAGE.BIN
INITRD.GZ
PARAMINF.BIN
MVERSION.BIN

もちろん、全てのバイナリファイルを用意する必要はなく、updater.pro ファイルに書き込み対象 ファイルに対応するファイル名、拡張子、書き込みアドレス、書き込みサイズ(KByte 単位)を指定すれば良いです。 セミコロンを行頭に書くとその行はコメントとなるのは SL-A300 のアップデート時と同様。

内蔵 Flash の書き換えを行うためには、Service Menu から行うことができます。

Service Menu を表示させるためには以下のように行う。必ずデータのバックアップは取っておくこと。

  1. Zaurus の電源を OFF にする。
  2. AC 電源アダプタを外す
  3. 電池を外す
  4. キーボードの D と M キーを押しながら、AC 電源アダプタを接続する
  5. Service Menu が表示される

Servicemenu1
Service Menu(3ページある)


Service Menu(1/3) の 10.CF Update で内蔵 Flash への書き込みが行える。CF カードまたは、SD カードに アップデート対象のバイナリファイルと updater.pro ファイルをコピーして、zaurus にカードを挿入し、 10.CF Update を選択すると、内蔵 Flash への書き込みが開始し、2つの LED が点灯する。
書き込みの完了時に2つの LED は消灯する。

Cfupdate
10.CF Update 実行中の画面


内蔵 Flash 書き換え後の影響について

現段階では、内蔵 Flash の内容について完全に解析しきれていないので問題があるかもしれないが、 私の Zaurus で NAND Flash(Full) を行って、内蔵 Flash の内容を完全に消去した後、 Service Menu(1/3) の COM ADJ setting を行い、調整値を書き込んだ後、Clear Diag Flag で BootFlag を書き込んだ後、 updater.pro ファイルの MVERSION.BIN までの内容を CF Update にて書き込み、その後 Maintain Kernel 上から、VERSION.BIN の内容を内蔵 Flash に書き込んだ。 その後、Service Menu(1/3) の NAND Flash (SUM) を実行させると CheckSum の表示がでるところまで確認できたので、 大丈夫だと思う。

内蔵 Flash のバックアップ

Service Menu(3/3) に、1.NAND Flash Back Up と 10.NAND Flash Restore がある。 この項目で、内蔵 Flash のバックアップとリストアを行うことができる。 バックアップを行うと、C750 の場合、SYSTC750.DBK という Flash イメージファイルが作成される。 内蔵 Flash 全体をバックアップしたい場合に利用できる。