2015年8月11日火曜日

Linksys WAP54G の 32MB 化対応へ CFE 改造

システムメモリを 32MB 化した WAP54G V2 ですが、その後ファームウェアをインストールする度に NVRAM を消去しては、新しくメモリ設定をし直すことを繰り返していました。

もうシステムメモリを 8MB へ戻すことはないと考えていますので、何かよい方法はないものかと考えました。NVRAM を消去した後、再起動させると初期値が設定されることから、どうも CFE の機能として NVRAM の初期値を設定する部分があるのではないかと考えて、バックアップしてあった CFE のバイナリコードをバイナリエディタで調査してみました。

すると予想通り、メモリ設定の初期値が保存されているのを発見しました。この初期値を変更すれば、変更した新しい値を初期値として設定してくれるはずです。

CFE のバイナリデータのオフセット値:1072 から始まる部分で、NVRAM で設定していた sdram_init が存在していました。この値の部分の 0x0002 から 0x0008 へ変更しました。
sdram_init=0x0002(変更前)
     ↓
sdram_init=0x0008(変更後)
バイナリエディタの GHex を使って編集しました。

そしてこの変更した CFE のバイナリデータを保管した後、WAP54G のフラッシュメモリへ JTAG 経由で書き込みました。

書き込みが終わったところで、正常に起動することを確認した後、JTAG で NVRAM を消去して、再起動させてみました。すると NVRAM の初期値として sdram_init=0x0008 を書き込んでいました。改造は成功したようです。これで NVRAM を消去しても NVRAM の初期値から書き換えをしなくて済みました。

これに引き続いて sdram_ncdl も変更してみました。こちらは初期値と変更値でバイト数が変更となるため、この一連の NVRAM の初期値の項目が終わった後の null (00) の部分を減少させて全体のバイト数に変化がないように調整しました。
sdram_ncdl=0(変更前 Hex値ではありませんでした)
     ↓
sdram_ncdl=0x000(変更後)

この変更も JTAG 経由で WAP54G のフラッシュメモリへ書き込み、そして NVRAM も JTAG で消去した後、 NVRAM の初期値の様子を観察してみました。

すると sdram_ncdl の値は 0x000 ではなく 0x025 となっていました。どうも sdram_ncdl の値は、単純に初期設定の値をそのまま書き込むだけはないようです。

変更しても効果の無い sdram_ncdl は、全体のバイト数の調整もあることから、行わない方がよいようです。sdram_init のみを変更することをお奨めします。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。