BroadcomのmipsのSOCはCFEという独自のブートローダーが使われています。このブートローダーでfirmwareをupdateするときにはtftpが使えます。
tftpはサーバとクライアントの両方に対応しています。
クライアントの場合
CFE> flash -noheader 192.168.11.2:main.trx flash1.trx
サーバの場合
CFE> flash -noheader : flash1.trx
5秒くらいの間にputしないとerrorになりプロンプトに戻ります。
バラしてシリアル接続できる場合はいいのですが、バラさないでupdateする方法がないか長いこと考えていました。
電源投入後の起動時にこんなメッセージがでます。
Wait a few seconds for an image
Reading :: Failed.: Timeout occured
どうもなんかを待っているようです。
手持ちのcfeのソースをgrepしてみてこんなコードがありました。
/* Wait a few seconds for an image */
ret = ui_docommand("flash -noheader : flash1.trx");
タイミングよくtftpするとバラさずにupdateできるようです。
shスクリプトにしてみました。
cfeflash.sh
#!/bin/sh
IP=$1
FILE=$2
while [ 1 ]
do
ping -t 1 -c 1 ${IP} >/dev/null 2>&1
if [ $? == 0 ]; then
echo " Find target"
echo "bin
put ${FILE}
quit
" | tftp ${IP}
exit
fi
echo -n "."
done
ネットワークインターフェースにデフォルトのIPの同じサブネットのアドレスを設定かエイリアスしてスクリプトを実行してターゲットの電源を入れると焼けます。
% cfeflash.sh 192.168.11.1 main.trx
........ Find target
Sent 323584 bytes during 0.6 seconds in 633 blocks
CFEのnvramのlan_ipaddrに保存されてます。
猛牛さんのターゲットは以下のIPは以下の記事に記載してあります。
tftpコマンドだけでもできるようです。