第6章 フラッシュメモリの書き換え方法

本章では、Armadillo のオンボードフラッシュメモリを書き換える手順について説明します。

フラッシュメモリの書き換え方法には、大きくわけて2種類の方法があります。

  1. 作業用 PCで動作するダウンローダーから、ターゲットとなる Armadillo にイメージを送信して、フラッシュを書き換える方法

  2. ターゲットとなる Armadillo 自身で、リモートサーバーからイメージファイルを取得してフラッシュを書き換える方法

まず、「ダウンローダーを使用してフラッシュメモリを書き換える」で、1. の方法について説明します。次に、「tftpdl を使用してフラッシュメモリを書き換える」および、「netflashを使用してフラッシュメモリを書き換える」で2. の方法について説明します。

[警告]

何らかの原因により「フラッシュメモリの書き換え」に失敗した場合、ソフトウェアが正常に起動しなくなる場合があります。書き換えの際は次の点に注意してください。

  • 書き換え中に Armadillo の電源を切らない

  • 書き換え中に Armadillo と開発用 PC を接続しているシリアルケーブルと LAN ケーブルを外さない

ブートローダーの書き換えに失敗するなどして起動できなくなった場合は、「ブートローダーを出荷状態に戻す」の手順に従ってブートローダーを復旧してください。

6.1. フラッシュメモリのリージョンについて

フラッシュメモリの書き込み先頭アドレスは、リージョン(領域)名で指定することができます。各リージョンに指定するイメージファイルは、表6.1「リージョン名と対応するイメージファイル 」のようになります。

表6.1 リージョン名と対応するイメージファイル

製品リージョン名ファイル名
Armadillo-420 ベーシックモデルbootloaderloader-armadillo4x0-[version].bin
kernellinux-a400-[version].bin.gz
userland

romfs-a420-[version].img.gz

Armadillo-420 WLANモデル(AWL13対応)bootloaderloader-armadillo4x0-[version].bin
kernellinux-a400-wlan-[version].bin.gz
userland

romfs-a420-wlan-awl13-[version].img.gz

Armadillo-440 液晶モデルbootloaderloader-armadillo4x0-[version].bin
kernellinux-a400-[version].bin.gz
userland

romfs-a440-[version].img.gz

Armadillo-410 液晶モデルbootloaderloader-armadillo4x0-[version].bin
kernellinux-a400-[version].bin.gz
userland

romfs-a440-[version].img.gz


[ティップ]

全てのモデルでブートローダは共通のイメージファイルを使用します。Armadillo-440 液晶モデルとArmadillo-420 ベーシックモデルのカーネルは共通のイメージファイルを使用します。

各リージョンは、書き込みを制限することが可能です。書き込みを制限する理由は、誤動作や予期せぬトラブルにより、フラッシュメモリ上のデータが不意に破壊または消去されることを防ぐためです。

読み込みは、常時可能です。読み込みに制限を付けることはできません。

Linuxが起動している場合、リージョンへの書き込み制限はコマンドで変更することが可能です。変更は、Sysfsの MTDクラスディレクトリ以下にある"ro"というファイルに"0"または"1"を書き込むことで行います。各リージョンの書き込み制限を変更することで、bootloaderリージョンの書き換えを可能にしたり、kernelリージョンの書き換えを禁止したりすることができます。

各リージョンのデフォルト状態での書き込み制限の有無と、対応するMTDクラスディレクトリを以下に記載します。

表6.2 リージョンのデフォルト状態での書き込み制限の有無と対応するMTDクラスディレクトリ

リージョン書き込み制限MTDクラスディレクトリ

bootloader

あり

/sys/class/mtd/mtd0

kernel

なし

/sys/class/mtd/mtd1

userland

なし

/sys/class/mtd/mtd2

config

なし

/sys/class/mtd/mtd3


以降の説明では、任意のリージョンを示すMTDクラスディレクトリを"/sys/class/mtd/[MTD]"のように表記します。

書き込み制限を解除するには、roファイルに0を書き込みます。

[armadillo ~]# echo 0 > /sys/class/mtd/[MTD]/ro

図6.1 書き込み制限を外す


書き込みを制限するには、roファイルに1を書き込みます。

[armadillo ~]# echo 1 > /sys/class/mtd/[MTD]/ro

図6.2 書き込みを制限する


6.2. ダウンローダーのインストール

作業用 PC にダウンローダーをインストールします。

ダウンローダーには、表6.3「ダウンローダー一覧」に示すように複数の種類があります。

表6.3 ダウンローダー一覧

ダウンローダーOSタイプ説明
Hermit-At ダウンローダーLinuxLinux用のCUIアプリケーションです。
Shoehorn-AtLinuxLinux用のCUIアプリケーションです。
Hermit-At Win32WindowsWindows用のGUIアプリケーションです。

[ティップ]

ATDE (Atmark Techno Development Environment) を利用する場合、ダウンローダーパッケージはすでにインストールされているので、インストールする必要はありません。

6.2.1. 作業用PCがLinuxの場合

付属 DVD のダウンローダーディレクトリ (downloader/) 以下の deb パッケージディレクトリ (deb/)よりパッケージファイルを取得し、インストールします。

[ATDE ~]$ sudo dpkg --install hermit-at_[version]_i386.deb
[ATDE ~]$ sudo dpkg --install shoehorn-at_[version]_i386.deb

図6.3 ダウンローダーのインストール(Linux)


6.2.2. 作業用PCがWindowsの場合

付属 DVD のダウンローダーディレクトリ (downloader/) 以下の win32 ディレクトリ (win32/) にある hermit-at-win_[version].zip を任意のフォルダに展開します。

6.3. ダウンローダーを使用してフラッシュメモリを書き換える

ここでは、Hermit-At ダウンローダーおよび Hermit-AT Win32を使用してフラッシュメモリを書き換える手順について説明します。

Hermit-At ダウンローダーおよび Hermit-AT Win32は、Armadillo のブートローダーと協調動作を行い、作業用 PC から Armadillo のフラッシュメモリを書き換えることができます。

6.3.1. 準備

表3.11「ジャンパの設定」を参照しジャンパを適切に設定したあと Armadillo に電源を投入し、保守モードで起動してください。

Armadillo と接続している作業用 PC のシリアルインターフェースが他のアプリケーションで使用されていないことを確認してください。使用されている場合は、該当アプリケーションを終了するなどしてシリアルインターフェースを開放してください。

6.3.2. 作業用 PC が Linux の場合

作業用 PC が Linux の場合、hermit コマンドを使用し、図6.4「ダウンロードコマンド」のようにコマンドを実行します。

downloadhermit コマンドのサブコマンドの1つです。--input-file で指定されたファイルをターゲットボードに書き込む時に使用します。--region は書き込み対象のリージョンを指定するオプションです。下記の例では、「kernel リージョンに linux.bin.gz を書き込む」という指示になります。

[ATDE ~]$ hermit download --input-file linux.bin.gz --region kernel

図6.4 ダウンロードコマンド


シリアルインターフェースが /dev/ttyS0 以外の場合は、図6.5「ダウンロードコマンド(ポート指定)」のように--port オプションを使用してポートを指定してください。

[ATDE ~]$ hermit download --input-file linux.bin.gz --region kernel --port /dev/ttyS1

図6.5 ダウンロードコマンド(ポート指定)


bootloaderリージョンは、誤って書き換えることがないように簡易プロテクトされています。書き換える場合は、図6.6「ダウンロードコマンド(アンプロテクト)」のように--force-lockedオプションを使用して、プロテクトを解除してください[14]

[ATDE ~]$ hermit download --input-file loader-armadillo4x0-[version].bin 
        --region bootloader --force-locked

図6.6 ダウンロードコマンド(アンプロテクト)


[警告]

bootloaderリージョンに誤ったイメージを書き込んでしまった場合、オンボードフラッシュメモリからの起動ができなくなります。この場合は「ブートローダーを出荷状態に戻す」を参照してブートローダーを復旧してください。

[警告]

bootloaderリージョンにはブートローダーイメージの他にブートローダーのパラメータが保存されています。図6.6「ダウンロードコマンド(アンプロテクト)」の手順を行っただけでは、パラメータは書き換えられず、以前の設定が残ったままとなります。パラメータを初期状態に戻したい場合は、「ブートローダーのパラメータを出荷状態に戻す」に示す手順を実行してください。

6.3.3. 作業用PCがWindowsの場合

作業用 PC が Windows の場合、hermit.exe を実行すると、図6.7「Hermit-At Win32:Downloadウィンドウ」が表示されます。

Hermit-At Win32:Downloadウィンドウ

図6.7 Hermit-At Win32:Downloadウィンドウ


Armadilloと接続されているシリアルインターフェースを「Serial Port」に指定してください。ドロップダウンリストに表示されない場合は、直接ポート名を入力してください。

Imageには書き込むファイルを、Regionには書き込み対象のリージョンを指定してください。allやbootloaderリージョンを指定する場合は、Force Lockedをチェックする必要があります。

すべて設定してから実行ボタンをクリックすると、書き込みが開始されます。書き込み中は、図6.8「Hermit-At Win32:downloadダイアログ」が表示され、ダウンロードの設定と進捗状況を確認することができます。

Hermit-At Win32:downloadダイアログ

図6.8 Hermit-At Win32:downloadダイアログ


ダウンロードが完了すると、ダイアログはクローズされます。

[警告]

bootloaderリージョンにはブートローダーイメージの他にブートローダーのパラメータが保存されています。bootloaderリージョンへのブートローターイメージの書き込み行っただけでは、パラメータは書き換えられず、以前の設定が残ったままとなります。パラメータを初期状態に戻したい場合は、「ブートローダーのパラメータを出荷状態に戻す」に示す手順を実行してください。

6.4. tftpdl を使用してフラッシュメモリを書き換える

ここからは、Armadillo 自身でリモートサーバーからイメージファイルを取得してフラッシュメモリを書き換える方法について説明します。

Hermit-At ブートローダーの tftpdl 機能を使用することで、ダウンローダーを使用して書き込むよりも高速にフラッシュメモリを書き換えることができます。

tftpdl 機能は、所属するネットワークにある TFTP サーバーが公開しているファイルをダウンロードして、自分自身のフラッシュメモリを書き換えることができる機能です。

[ティップ]

ATDE5は、標準で TFTP サーバー (atftpd) が動作しています。/var/lib/tftpboot/ ディレクトリにファイルを置くことで、TFTP によるアクセスが可能になります。

tftpdl 機能を使用するには、ターゲットとなる Armadillo のジャンパを設定し、保守モードで起動してください。

作業用 PC のシリアル通信ソフトウェアを使用して、コマンドを入力します。図6.9「tftpdl コマンド例」は、Armadillo の IP アドレスを 192.168.10.10 に設定し、IP アドレスが 192.168.10.1 の TFTP サーバー上にある、linux.bin.gz を kernel リージョンに書き込む例です。

hermit> tftpdl 192.168.10.10 192.168.10.1 --kernel=linux.bin.gz

図6.9 tftpdl コマンド例


書き込み対象には、ブートローダー、カーネル、ユーザーランドそれぞれのリージョンを指定することができます。 書き込むリージョンとオプションの対応を、表6.4「リージョンとオプションの対応」に示します。

表6.4 リージョンとオプションの対応

リージョンオプション
ブートローダー--bootloader
カーネル--kernel
ユーザーランド--userland

[警告]

bootloaderリージョンにはブートローダーイメージの他にブートローダーのパラメータが保存されています。図6.9「tftpdl コマンド例」の手順を行っただけでは、パラメータは書き換えられず、以前の設定が残ったままとなります。パラメータを初期状態に戻したい場合は、「ブートローダーのパラメータを出荷状態に戻す」に示す手順を実行してください。

6.5. netflashを使用してフラッシュメモリを書き換える

Linux が動作している状態では、Linux アプリケーションの netflash を使用することでフラッシュメモリを書き換えることができます。

netflash は、接続されているネットワーク内にある HTTP サーバーや FTP サーバーが公開しているファイルをダウンロードして、自分自身のフラッシュメモリを書き換えることができるコマンドです。

[ティップ]

ATDE5は、標準で HTTP サーバー (lighttpd) が動作しています。/var/www/ ディレクトリにファイルを置くことで、HTTP によるアクセスが可能になります。

netflash を使用するには、Armadillo にログインし図6.10「netflashコマンド例」のようにコマンドを実行します。

[armadillo ~]# netflash -k -n -u -r /dev/flash/kernel [URL]

図6.10 netflashコマンド例


オプションの"-r [デバイスファイル名]"で書き込み対象のリージョンを指定しています。表6.5「リージョンとデバイスファイルの対応」を参照してください。その他のオプションについては、netflash -hで詳細を確認する事ができます。

表6.5 リージョンとデバイスファイルの対応

リージョンデバイスファイル
bootloader[a]/dev/flash/bootloader
kernel/dev/flash/kernel
userland/dev/flash/userland
config/dev/flash/config

[a] デフォルト状態では書き込みが制限されています。詳細については「フラッシュメモリのリージョンについて」を参照してください。


6.6. ブートローダーを出荷状態に戻す

何らかの理由でブートローダーリージョンの内容が破壊されブートローダーが起動しなくなった場合、UART ブートモードを使用することでブートローダーを出荷状態に戻すことができます。

6.6.1. 準備

Armadillo のジャンパを、表3.11「ジャンパの設定」を参照し、UARTブートモードに設定してください。この時点では Armadillo は起動させないでください。

Armadillo と接続している作業用 PC のシリアルインターフェースが他のアプリケーションで使用されていないことを確認します。使用されている場合は、該当アプリケーションを終了するなどしてシリアルインターフェースを開放してください。

6.6.2. 作業用PCがLinuxの場合

図6.11「shoehorn コマンド例」のようにコマンドを実行してください。図6.12「電源投入タイミング」のログが表示されたら、Armadillo に電源を投入し、起動させてください。

[ATDE ~]$ shoehorn --boot --target armadillo4x0 \
        --initrd /dev/null \
        --kernel /usr/lib/hermit-3/loader-armadillo4x0-boot-[version].bin \
        --loader /usr/lib/shoehorn/shoehorn-armadillo4x0.bin \
        --initfile /usr/lib/shoehorn/shoehorn-armadillo4x0.init \
        --postfile /usr/lib/shoehorn/shoehorn-armadillo4x0.post

図6.11 shoehorn コマンド例


Waiting for target - press Wakeup now.

図6.12 電源投入タイミング


Armadillo に電源を投入すると、図6.13「shoehorn コマンドログ」のようにログが表示されます。

/usr/lib/shoehorn/shoehorn-armadillo4x0.bin: 1272 bytes (2048 bytes buffer)
/usr/lib/hermit-3/loader-armadillo4x0-boot-v3.8.0.bin: 45896 bytes (45896 bytes buffer)
/dev/null: 0 bytes (0 bytes buffer)
Waiting for target - press Wakeup now.
Initializing target...
Writing SRAM loader...
Pinging loader
Initialising hardware:
- flushing cache/TLB
- Switching to 115200 baud
- Initializing for Mobile-DDR
Pinging loader
Detecting DRAM
- 32 bits wide
- start: 0x80000000 size: 0x04000000 last: 0x83ffffff
Total DRAM: 65536kB
Loading /usr/lib/hermit-3/loader-armadillo4x0-boot-v3.8.0.bin:
- start: 0x83000000 size: 0x0000b348 last: 0x8300b347
initrd_start is c0400000
Moving initrd_start to c0400000
Loading /dev/null:
- start: 0xc0400000 size: 0x00000000
Writing parameter area
- nr_pages (all banks): 4096
- rootdev: (RAMDISK_MAJOR, 0)
- pages_in_bank[0]: 2048
- pages_in_bank[1]: 2048
- initrd_start: 0xc0400000
- initrd_size: 0x0
- ramdisk_size: 0x0
- start: 0x80020000 size: 0x00000900 last: 0x800208ff
Pinging loader
Starting kernel at 0x83000000

図6.13 shoehorn コマンドログ


shoehorn コマンドが成功すると、ターゲットの Armadillo 上で Hermit At ブートローダーの UART ブートモード版 (loader-armadillo4x0-boot-[version].bin) が動作している状態になります。以降の手順は、ジャンパの設定変更や電源の切断をせずにおこなう必要があります。

図6.14「ブートローダの書き込みコマンド例」のようにブートローダの書き込みを行ってください[15]

[ATDE ~]$ hermit erase --region bootloader download --input-file loader-armadillo4x0-[version].bin
        --region bootloader --force-locked

図6.14 ブートローダの書き込みコマンド例


6.6.3. 作業用PCがWindowsの場合

hermit.exeを実行し Shoehorn ボタンをクリックすると、図6.15「Hermit-At Win32:Shoehorn ウィンドウ」が表示されます。

Hermit-At Win32:Shoehorn ウィンドウ

図6.15 Hermit-At Win32:Shoehorn ウィンドウ


Targetにarmadillo4x0を選択して実行ボタンをクリックします。

Hermit-At Win32:shoehorn ダイアログ

図6.16 Hermit-At Win32:shoehorn ダイアログ


ダイアログが表示されます。Armadillo に電源を投入して起動してください。ダウンロードするための準備が完了すると自動的にダイアログはクローズされます。以降の手順は、ジャンパの設定変更や電源の切断をせずにおこなう必要があります。

ダウンロードをおこなう前に、一旦ブートローダリージョンを削除します。Eraseボタンをクリックすると、図6.17「Hermit-At Win32:Erase ウィンドウ」が表示されます。

Hermit-At Win32:Erase ウィンドウ

図6.17 Hermit-At Win32:Erase ウィンドウ


Regionにbootloaderリージョンを選択し、Force Lockedをチェックして実行ボタンをクリックします。ブートローダリージョンの削除中は、図6.18「Hermit-At Win32:Erase ダイアログ」が表示され、削除の設定と進捗状況を確認することができます。

Hermit-At Win32:Erase ダイアログ

図6.18 Hermit-At Win32:Erase ダイアログ


ブートローダリージョンの削除が完了すると、ダイアログはクローズされます。次にダウンロードをおこないます。Downloadボタンをクリックすると、図6.19「Hermit-At Win32:Download ウィンドウ(Erase後)」が表示されます。

Hermit-At Win32:Download ウィンドウ(Erase後)

図6.19 Hermit-At Win32:Download ウィンドウ(Erase後)


Imageにはブートローダイメージファイルを、Regionにはbootloaderを指定し、Force Lockedをチェックして実行ボタンをクリックします。ダウンロード中は、図6.20「Hermit-At Win32:Download ダイアログ(bootloader)」が表示され、ダウンロードの設定と進捗状況を確認することができます。

Hermit-At Win32:Download ダイアログ(bootloader)

図6.20 Hermit-At Win32:Download ダイアログ(bootloader)


ダウンロードが完了すると、ダイアログはクローズされます。

6.7. ブートローダーのパラメータを出荷状態に戻す

フラッシュメモリのbootloaderリージョンには、ブートローダーイメージの他にブートローダーのパラメータが保存されています。これは、Armadilloの再起動後も設定を有効にするためです。パラメータと初期設定の対応を、表6.6「ブートローダーのパラメータ」に示します。

表6.6 ブートローダーのパラメータ

パラメータ初期設定説明
Linuxカーネルパラメータ無しLinuxカーネル起動時にカーネルに渡すパラメータ
ブートデバイスフラッシュメモリLinuxカーネルを格納しているデバイスを指定する

ブートローダーのパラメータを出荷状態に戻すには、ターゲットとなる Armadillo のジャンパを設定し、保守モードで起動してください。

作業用PCのシリアル通信ソフトウェアを使用して、コマンドを入力します。Linuxカーネルパラメータを初期設定に戻すには、図6.21「Linuxカーネルパラメータを初期設定に戻す」のようにコマンドを実行してください。[16]

hermit> clearenv

図6.21 Linuxカーネルパラメータを初期設定に戻す


ブートデバイスを初期設定のフラッシュメモリに戻すには、図6.22「ブートデバイスを初期設定に戻す」のようにコマンドを入力してください。[16]

hermit> setbootdevice flash

図6.22 ブートデバイスを初期設定に戻す




[14] 書面の都合上折り返して表記しています。実際にはコマンドは1 行で入力します。

[15] 書面の都合上折り返して表記しています。実際にはコマンドは1 行で入力します。

[16] 「ブートローダーを出荷状態に戻す」の手順を実行すると、パラメータが初期化されますので、この手順は必要ありません。但し、Hermit-AT Win32 v1.2.0 以前のバージョンを使用した場合、自動ではパラメータが初期化されないため、本手順を実行する必要があります。