WG2600HPをinitramfsイメージでブート

U-Bootでコンソールに落ちることができず、failsafeでなんとかU-Bootの環境変数を抜き出せたが、ブート時にNFSで待ち受けてはいるらしいものの必要なIPアドレス等が全く以て不明なため、実際にはU-Bootの環境変数が格納されている領域はメーカーファームでは使われておらず、NFSではなかった(U-Bootのdefault environmentが使用される)。fw_setenvにより環境変数の書き換えが可能だったのでbootcmdを書き換えてしまう。

必要なU-Boot環境変数の設定値

※注: あくまでramboot(TFTPから取得してのブート)にのみ必要なもの

ipaddr=192.168.10.1
serverip=192.168.10.2
ramboot=rootfstype=ramfs; tftpboot 0x44000000 wg2600hp.bin; bootm 0x44000000
bootcmd=run ramboot

上から

  • デバイス側IPアドレス
  • TFTP側サーバアドレス
  • initramfsイメージを使用してブートするためのコマンド。TFTPでイメージを0x44000000へダウンロードしbootmでそこからブートする
    “wg2600hp.bin” はTFTPサーバからダウンロードするファイル名(任意)
  • rambootを実行する

手順

  • 電源を投入し、failsafeに落ちる
  • /etc/fw_env.configを作成する
    /dev/mtd9 0x00000 0x10000 0x10000
    

  • 初期状態の環境変数をメモ
    fw_printenv
    

  • 環境変数を設定
    fw_setenv ipaddr 192.168.10.1
    fw_setenv serverip 192.168.10.2
    fw_setenv ramboot "rootfstype=ramfs; tftpboot 0x44000000 wg2600hp.bin; bootm 0x44000000"
    fw_setenv bootcmd "run ramboot"
    

  • LAN側へPCを接続
  • WG2600HPに設定した通りTFTPdを起動
  • WG2600HPを再起動(電源引き抜いて再度繋ぐ)
  • TFTPでinitramfsイメージが取得されブートする

備考等

  • APPSBLENV にread-onlyが掛かっているか、fw_printenv/fw_setenvが無かったらお手上げだった ∩( ・ω・)∩
  • rambootの “rootfstype=ramfs” は不要かもしれない(未確認) -> 不要。
  • fw_setenv実行時に引数内に半角スペースが含まれていると、そこで区切られてしまい誤った値が設定されてしまうため、” ” を付けて実行する
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中