2011年01月20日
KZM-A9-Dualのubootの機能でNORフラッシュのubootを更新する
KZM-A9-DualのNORフラッシュに書き込みたいときに一番簡単な方法はPARTNER-Jetをつないで、そのロードコマンドを使うことですが、ここではubootの機能を使ってNORフラッシュに書く手順を紹介します。
u-bootの機能を使って新しいバージョンのu-bootをNORフラッシュに焼くときの手順です。
書き込むべきu-bootのデータを実機のメモリに転送する方法は二つあります。
- ネットワーク経由(tftp)
- シリアル経由
u-bootならサイズも小さいので、サーバーの設定やネットワークのアドレス設定が必要ないので、シリアル経由での更新がお勧めです。
更新時の端末ソフトは、teratermが、ファイル送信プロトコルなどが内蔵されていて便利です。
1. ネットワーク経由(tftp)で転送
1.0 tftpサーバーの用意(例 ubutnu10.04)
$ sudo apt-get install tftpd $ grep tftpd /etc/inetd.conf tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp
一番最後の /srv/tftp がサーバーとしての公開ディレクトリ
$ cd /srv $ sudo mkdir tftp $ sudo chmod 777 tftp
ここまで出来たら srv/tftpに転送ファイルをコピーしておく
$ cp ~/tmp/u-boot.bin /srv/tftp
1.1 IPアドレスを設定
KZM-A9-Dualと teraterm などで接続し、KZM-A9-Dualの電源を入れる
KZM-A9-Dual# set ipaddr 192.168.140.80 KZM-A9-Dual# set serverip 192.168.140.1 KZM-A9-Dual# set netmask 255.255.255.0 KZM-A9-Dual# saveenv KZM-A9-Dual# reset
これでubootがrebootする。
1.2 ネットワークの接続確認
KZM-A9-Dual# printenv ipaddr=192.168.140.80 serverip=192.168.140.1 netmask=255.255.255.0
KZM-A9-Dual# ping 192.168.140.1 ping failed; host 192.168.140.1 is not alive
※ このメッセージが出たら、IPアドレスや LANケーブルの接続を再確認する
KZM-A9-Dual# ping 192.168.140.1 host 192.168.140.1 is alive
※ サーバーと正しく接続されている
1.3 tftp経由での u-bootの更新
1.3.1 tftpサーバーから u-boot.bin を、0x50000000 番地に取得
KZM-A9-Dual# tftp 0x50000000 u-boot.bin TFTP from server 192.168.140.1; our IP address is 192.168.140.80 Filename 'u-boot.bin'. Load address: 0x50000000 Loading: ####################### done Bytes transferred = 113712 (1bc30 hex) <--- 1.3.3 で設定するサイズ
1.3.2 NORフラッシュの 0番地から 0x1ffff 番地までを、プロテクト解除と消去
KZM-A9-Dual# protect off 0x0 0x1ffff KZM-A9-Dual# erase 0x0 0x1ffff
1.3.3 0x5000_0000番地の u-boot.binを 0番地にコピー。
最後のパラメータがコピーサイズで、tftpで u-bootを取得した時に表示される Bytes を設定
KZM-A9-Dual# cp.b 0x50000000 0x0 0x1bc30
1.3.4 0番地から 0x1_ffff番地までをプロテクト
KZM-A9-Dual# protect on 0x0 0x1ffff
1.4 u-bootの再起動とバージョン確認
KZM-A9-Dual# reset U-Boot 2009.03-rc1 (Jan 13 2011 - 19:04:31) <--- バージョンが変わっている事を確認
2. シリアル経由で転送
2.0 KZM-A9-Dualと teraterm などで接続し、KZM-A9-Dualの電源を入れる
2.1 u-bootでシリアルからのファイル受信モードを設定
2.1.1 loadb コマンドで、0x50000000番地にファイル受信
KZM-A9-Dual# loadb 0x50000000 ## Ready for binary (kermit) download to 0x50000000 at 115200 bps...
※ ここで、teratermの 「ファイル」->「転送」->「Kermit」->「送信(S)...」を
メニューを選択して、u-boot.binを指定する
(英語版では、"File" -> "Transfer" -> "Kermit" -> "Send..." を選択)
## Total Size = 0x0001bbf0 = 113648 Bytes <--- 2.2.3 で設定するサイズ ## Start Addr = 0x50000000
2.2.2 NORフラッシュの 0番地から 0x1ffff 番地までを、プロテクト解除と消去
KZM-A9-Dual# protect off 0x0 0x1ffff KZM-A9-Dual# erase 0x0 0x1ffff
2.2.3 0x50000000番地の u-boot.binを 0番地にコピー。
最後のパラメータがコピーサイズで、tftpで u-bootを取得した時に表示される Bytes を設定
KZM-A9-Dual# cp.b 0x50000000 0x0 0x1bbf0
2.2.4 0番地から 0x1ffff番地までをプロテクト
KZM-A9-Dual# protect on 0x0 0x1ffff
2.3 u-bootの再起動とバージョン確認
KZM-A9-Dual# reset U-Boot 2009.03-rc1 (Dec 17 2010 - 16:26:17) <--- バージョンが変わっている事を確認
NORフラッシュのバンク切り替え
KZM-A9-DualボードではNORフラッシュの先頭部分は512KBずつ4つのバンク切り替えができます。つまり、0x00008000, 0x00010000, 0x00018000 に書き込んだブートローダもディップスイッチの変更で0番地に入れ替えることができます。これを利用して複数のブートローダをNORフラッシュに焼いておいて切り替えて使うことができます。
トラックバックURL
コメント一覧
1.3.3 は cp.b ${fileaddr} 0x0 ${filesize} にできます。
u-boot 2010.06-rc1 で確認しました。