2012年07月20日
KZM-A9-GTのU-Bootの機能でNORフラッシュのU-Bootを更新する
KZM-A9-GTボードのNORフラッシュに書き込みたいときに一番簡単な方法はPARTNER-Jetをつないで、そのロードコマンドを使うことですが、ここではU-Bootの機能を使ってNORフラッシュに書く手順を紹介します。
U-bootの機能を使って新しいバージョンのU-BootをNORフラッシュに焼くときの手順です。
書き込むべきu-bootのデータを実機のメモリに転送する方法は二つあります。
- ネットワーク経由(tftp)
- シリアル経由
u-bootならサイズも小さいので、サーバーの設定やネットワークのアドレス設定が必要ないので、シリアル経由での更新がお勧めです。
更新時の端末ソフトは、teratermが、ファイル送信プロトコルなどが内蔵されていて便利です。
1. ネットワーク経由(tftp)で転送
1.0 tftpサーバーの用意
以下の記事を参照してください。
1.1 IPアドレスを設定
KZM-A9-GTボードのIPアドレスを 192.168.1.162, tftpサーバのIPアドレスを192.168.1.110とすると
KZM-A9-GTのU-Bootのプロンプトで
KZM-A9-GT# set ipaddr 192.168.1.162 KZM-A9-GT# set serverip 192.168.1.110
入力した値の確認。
KZM-A9-GT# print baudrate=115200 bootargs=root=/dev/null console=ttySC4,115200 bootdelay=3 ethact=smc911x-0 ipaddr=192.168.1.162 serverip=192.168.1.110 ...
1.2 ネットワークの接続確認
KZM-A9-GT# ping 192.168.1.110 smc911x: detected LAN9221 controller smc911x: autonegotiation timed out smc911x: MAC 00:01:9b:04:04:01 Using smc911x-0 device ping failed; host 192.168.1.110 is not alive
※ このメッセージが出たら、IPアドレスや LANケーブルの接続を再確認する
KZM-A9-GT# ping 192.168.1.110 smc911x: detected LAN9221 controller smc911x: phy initialized smc911x: MAC 00:01:9b:04:04:01 Using smc911x-0 device host 192.168.1.110 is alive
※ サーバーと正しく接続されている
1.3 tftp経由での u-bootの更新
1.3.1 tftpサーバーから u-boot.bin を、0x50000000 番地に取得
tftpサーバの/tftpboot ディレクトリに、u-boot.bin を置きます。
KZM-A9-GTのU-Bootのプロンプトで
KZM-A9-GT# tftp 0x50000000 u-boot.bin smc911x: detected LAN9221 controller smc911x: phy initialized smc911x: MAC 00:01:9b:04:04:01 Using smc911x-0 device TFTP from server 192.168.1.110; our IP address is 192.168.1.162 Filename 'u-boot.bin'. Load address: 0x50000000 Loading: ####################################### done Bytes transferred = 196312 (2fed8 hex)
1.3.2 NORフラッシュの 0番地から 0x3ffff 番地までを、プロテクト解除と消去
KZM-A9-GT# protect off 0x0 0x3ffff KZM-A9-GT# erase 0x0 0x3ffff
1.3.3 0x5000_0000番地の u-boot.binを 0番地にコピー。
KZM-A9-GT# cp.b 0x50000000 0x0 ${filesize} Copy to Flash... done
1.3.4 0番地から 0x3ffff番地までをプロテクト
KZM-A9-GT# protect on 0x0 0x3ffff
1.4 u-bootの再起動とバージョン確認
KZM-A9-GTボードの電源をOFF/ONするか、またはresetコマンドで
KZM-A9-GT# reset resetting ... U-Boot 2012.04.01-14468-gc7ff0ec (Jul 20 2012 - 11:36:05) <-- バージョンが変わっている事を確認 ...
2. シリアル経由で転送
2.0 KZM-A9-GTと teraterm などで接続し、KZM-A9-GTの電源を入れる
2.1 u-bootでシリアルからのファイル受信モードを設定
2.1.1 loadb コマンドで、0x50000000番地にファイル受信
KZM-A9-GT# loadb 0x50000000 ## Ready for binary (kermit) download to 0x50000000 at 115200 bps...
※ ここで、teratermの 「ファイル」->「転送」->「Kermit」->「送信(S)...」を
メニューを選択して、u-boot.binを指定する
(英語版では、"File" -> "Transfer" -> "Kermit" -> "Send..." を選択)
## Total Size = 0x0002fed8 = 196312 Bytes ## Start Addr = 0x50000000
2.2.2 NORフラッシュの 0番地から 0x3ffff 番地までを、プロテクト解除と消去
KZM-A9-GT# protect off 0x0 0x3ffff KZM-A9-GT# erase 0x0 0x3ffff
2.2.3 0x50000000番地の u-boot.binを 0番地にコピー。
KZM-A9-GT# cp.b 0x50000000 0x0 ${filesize}
2.2.4 0番地から 0x3ffff番地までをプロテクト
KZM-A9-GT# protect on 0x0 0x3ffff
2.3 u-bootの再起動とバージョン確認
KZM-A9-GTボードの電源をOFF/ONするか、またはresetコマンドで
KZM-A9-GT# reset resetting ... U-Boot 2012.04.01-14468-gc7ff0ec (Jul 20 2012 - 11:36:05) <-- バージョンが変わっている事を確認
NORフラッシュのバンク切り替え
KZM-A9-GTボードではNORフラッシュは16MBずつの4つのバンクに分かれていて、Cortex-A9 CPUからはそのうちの2つのバンクが使用可能です。ディップスイッチ SW4-1 でそれを切り替えることができます。出荷時には両方のバンクにU-Bootが焼きこまれています。書き込みの失敗に備えて片方のU-Bootは非常用にとっておいてください。
LinuxカーネルをNORフラッシュに書き込む
U-Bootはu-boot.binのファイルを0x0から0x3ffff に書き込みました。Linuxカーネルも方法は同じで、ファイル名とアドレス範囲が違うだけです。uImageのファイルを0x00080000 から0x003fffff に書くと良いでしょう。