2011年01月20日

KZM-A9-Dualのubootの機能でNORフラッシュのubootを更新する

KZM-A9-DualのNORフラッシュに書き込みたいときに一番簡単な方法はPARTNER-Jetをつないで、そのロードコマンドを使うことですが、ここではubootの機能を使ってNORフラッシュに書く手順を紹介します。



u-bootの機能を使って新しいバージョンのu-bootをNORフラッシュに焼くときの手順です。

書き込むべきu-bootのデータを実機のメモリに転送する方法は二つあります。

  1. ネットワーク経由(tftp)
  2. シリアル経由

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. Posted by osaboh   2011年01月20日 09:50
tftp でファイルを転送すると一部の環境変数が設定されるので
1.3.3 は cp.b ${fileaddr} 0x0 ${filesize} にできます。
u-boot 2010.06-rc1 で確認しました。
2. Posted by 質問です   2011年05月24日 11:08
NORフラッシュのuImageをubootから書き換える方法はありますか?
3. Posted by koba   2011年05月24日 12:54
uImageも書き換えることができます。アドレスが違うだけです。

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード