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

本章では、Armadillo-810のフラッシュメモリに書き込まれているイメージファイルを更新する手順について説明します。

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

表12.1 フラッシュメモリの書き換え方法

方法特徴
netflashを使用する
  • イメージファイルをネットワークまたはストレージで転送するため書き換えが高速

  • ArmadilloでLinuxにログインできる必要がある

  • ブートローダーを書き換えることができない

ダウンローダー使用する
  • イメージファイルをシリアルで転送するため書き換えが低速

  • Armadilloでブートローダーが起動できればよい

  • ブートローダーを書き換えることができる


フラッシュメモリを書き換えるためには、Linuxまたはブートローダーが起動している必要があります。フラッシュメモリに書き込まれているブートローダーが起動しない状態になってしまった場合は、15章SDブートの活用を参照してSDカードからソフトウェアを起動させてください。

[ティップ]

ダウンローダーを使用してユーザーランドイメージなどサイズの大きなイメージファイルを書き換えると非常に時間がかかります。これは、イメージファイルをArmadilloに転送する際にシリアルの転送速度がボトルネックとなるためです。サイズの大きなイメージファイルを書き換える場合はnetflashを使用する方法を推奨します。

12.1. フラッシュメモリのパーティションについて

フラッシュメモリのイメージファイルの書き換えは、パーティション(リージョンとも呼ばれます)毎に行います。各パーティションのサイズはフラッシュメモリ内には保存されていません。ブートローダーとLinuxカーネルそれぞれが同じパーティションテーブルを保持することにより、一意的にを扱うことができるようになっています。

各パーティションに対応するイメージファイル名を表12.2「パーティションとイメージファイルの対応」に示します。

表12.2 パーティションとイメージファイルの対応

パーティションイメージファイル備考

bootloader

loader-armadillo810-nor-[version].bin

ブートローダーイメージを配置するパーティションです。

config

なし

ユーザーランドアプリケーション"flatfsd"がFlat file-system(フラッシュメモリ向けファイルシステム)を構築するパーティションです。使用方法については7章コンフィグ領域 − 設定ファイルの保存領域を参照してください。

licence

なし

有償ミドルウェアなどのライセンスファイルを配置するパーティションです。

firmware

squashfs-a810-firmware-[version].img

有償ミドルウェアなどのファームウェアを配置するパーティションです。

kernel

linux-a810-[version].bin.gz

Linuxカーネルイメージを配置するパーティションです。

userland

romfs-a810-[version].img.gz

ユーザーランドイメージを配置するパーティションです。


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

Linux が動作している状態では、Linux アプリケーションの netflash を利用することでフラッシュメモリを書き換えることができます。ここでは、netflash を利用して次に示す場所に存在するイメージファイルをフラッシュメモリに書き込む手順を紹介します。

  • Webサーバー上のイメージファイル

  • ストレージ上のイメージファイル

[警告]

bootloaderパーティションはnetflashで書き換えることができません。bootloaderパーティションを書き換えるには、「ダウンローダーを使用してフラッシュメモリを書き換える」を参照してください。

netflashコマンドのヘルプは次のとおりです。

[armadillo ~]# netflash -h
usage: netflash [-bCfFhijklntuv?] [-c console-device] [-d delay] [-o offset] [-r flash-device]
                [net-server] file-name

	-b      don't reboot hardware when done
	-C      check that image was written correctly
	-f      use FTP as load protocol
	-F      force overwrite (do not preserve special regions)
	-h      print help
	-i      ignore any version information
	-H      ignore hardware type information
	-j      image is a JFFS2 filesystem
	-k      don't kill other processes (or delays kill until
		after downloading when root filesystem is inside flash)
	-K      only kill unnecessary processes (or delays kill until
		after downloading when root filesystem is inside flash)
	-l      lock flash segments when done
	-n      file with no checksum at end (implies no version information)
	-p      preserve portions of flash segments not actually written.
	-s      stop erasing/programming at end of input data
	-t      check the image and then throw it away
	-u      unlock flash segments before programming
	-v      display version number

図12.1 netflashコマンドのヘルプ


"-r"オプションに指定するフラッシュメモリのデバイスファイルとパーティションの対応を次に示します。

表12.3 フラッシュメモリのパーティションとデバイスファイル

パーティションデバイスファイル
config/dec/flash/config
licence/dev/flash/license
firmware/dev/flash/firmware
kernel/dev/flash/kernel
userland/dev/flash/userland

12.2.1. Webサーバー上のイメージファイルを書き込む

ATDEでは、標準でWebサーバー(lighttpd)が動作しており、/var/www/ディレクトリ以下に置かれたファイルはネットワーク経由でダウンロードすることができます。netflash は、HTTPによるファイルのダウンロードをサポートしています。

イーサネットガジェット[15]を利用すると、ATDEとネットワーク通信することができます。ここでは、ATDEとネットワーク通信ができることを前提に、ATDEからイメージファイルをダウンロードしてkernelパーティションに書き込む手順を説明します。

手順12.1 Webサーバー上のイメージファイルを書き込む

  1. ATDEの/var/www/ディレクトリにLinuxカーネルイメージファイルを置きます。

    [ATDE ~]$ ls
    linux-a810-v1.00.bin.gz
    [ATDE ~]$ cp linux-a810-v1.00.bin.gz /var/www/
  2. Webサーバー上のイメージファイルのURL(http://atde5.local/linux-a810-v1.00.bin.gz)を指定して netflashコマンドを実行します。

    [armadillo ~]# netflash -b -k -n -u -s -r /dev/flash/kernel http://atde5.local/linux-a810-v1.00.bin.gz
    ................................................................................
    ................................................................................
    (省略)
    ......................................
    netflash: got "http://atde5.local/linux-a810-v1.00.bin.gz", length=2564696
    netflash: programming FLASH device /dev/flash/kernel
    ....................
  3. Armadilloのプロンプトが表示されるとフラッシュメモリの書き換えは完了です。次回起動時から書き換えたLinuxカーネルイメージで起動します。

    [armadillo ~]# 

12.2.2. ストレージ上のイメージファイルを書き込む

ストレージ(SDカードやUSBメモリ)をマウントすることで、ストレージに保存されたイメージファイルをフラッシュメモリに書き込むことができます。

ここでは SDカードに保存されているイメージファイルを userland パーティションに書き込む手順を説明します。

手順12.2 SDカード上のイメージファイルを書き込む

  1. SDカードを/mnt/ディレクトリにリードオンリーでマウントします。

    [armadillo ~]# mount -o ro /dev/mmcblk0p1 /mnt
    kjournald starting.  Commit interval 5 seconds
    EXT3-fs (mmcblk0p1): using internal journal
    EXT3-fs (mmcblk0p1): mounted filesystem with ordered data mode
    [armadillo ~]# ls /mnt
    romfs-a810-v1.00.img.gz
  2. SDカード上のイメージファイルのパス(/mnt/romfs-a810-v1.00.img.gz)を指定して netflashコマンドを実行します。

    [armadillo ~]# netflash -b -k -n -u -s -r /dev/flash/userland /mnt/romfs-a810-v1.00.img.gz
    ................................................................................
    ................................................................................
    (省略)
    ..........................................................
    netflash: got "/mnt/romfs-a810-v1.00.img.gz", length=10316650
    netflash: programming FLASH device /dev/flash/userland
    ...............................................................................
    
  3. Armadilloのプロンプトが表示されるとフラッシュメモリの書き換えは完了です。次回起動時から書き換えたユーザーランドイメージで起動します。

    [armadillo ~]# 
  4. SDカードをアンマウントします。

    [armadillo ~]# umount /mnt

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

Linuxを起動できない場合やブートローダーを更新する場合は、ダウンローダー(hermit)を使用してフラッシュメモリを書き換える必要があります。hermitはATDEに標準でインストールされています。

hermitはArmadilloのブートローダーと協調動作を行いフラッシュメモリを書き換えることができます。hermitとブートローダー間の通信には、シリアル[16]が使用されます。

hermitのヘルプは次のとおりです。

[ATDE ~]# hermit
Usage: hermit [options] command [command options]
Available commands: download, erase, help, go, map, terminal, upload, md5sum
Armadillo-J command: firmupdate
Multiple commands may be given.
General options (defaults) [environment]:
	-e, --ethernet
	-i, --input-file <path>
	--netif <ifname> (eth0) [HERMIT_NETIF]
	--memory-map <path>
	--port <dev> (/dev/ttyS0) [HERMIT_PORT]
	-o, --output-file <path>
	--remote-mac <MAC address>
	-v, --verbose
	-V, --version
Download/Erase options:
	-a, --address <addr>
	-b, --baudrate <baudrate>
	--force-locked
	-r, --region <region name>
Memory map options:
	--anonymous-regions
Md5sum  options:
	-a, --address <addr>
	-r, --region <region name>
	-s, --size <size>

図12.2 hermitコマンドのヘルプ


ここでは、bootloaderパーティションを書き換える手順について説明します。

手順12.3 ダウンローダー使用して書き換える

  1. ブートローダーが保守モードで起動するように設定します。設定方法については、「ブートローダー起動モード」を参照してください。

  2. Armadilloが保守モードで起動したことを確認するために、ATDEでminicomを起動しておきます。

    [ATDE ~]$ LANG=C minicom --noinit --wrap --device /dev/ttyUSB0
  3. Armadilloに電源を投入します。ブートローダーが保守モードで起動すると、次のように保守モードのプロンプトが表示されます。

    hermit> 
  4. minicomを終了させシリアルポート(/dev/ttyUSB0)を開放します。

  5. bootloaderパーティションと書き込むイメージファイル(loader-armadillo810-nor-v3.2.0.bin)を指定してhermitコマンドを実行します。bootloaderパーティションを更新する場合は、必ず"--force-locked"オプションを指定する必要があります。

    [ATDE ~]$ hermit download --input-file loader-armadillo810-nor-v3.2.0.bin --region bootloader --force-locked --port /dev/ttyUSB0
    serial: completed 0x0000a92c (43308) bytes.
  6. ATDEのプロンプトが表示されるとフラッシュメモリの書き換えは完了です。次回起動時から書き換えたブートローダーイメージで起動します。

    [ATDE ~]$ 

12.4. ブートローダーが起動しなくなった場合の復旧作業

フラッシュメモリのbootloaderパーティションを誤ったイメージファイルで書き換えたり、書き換え中にArmadilloの電源を切断してしまった場合、ブートローダーが起動しなくなる場合があります。フラッシュメモリのブートローダーが起動しなくなった場合は、SDブートを利用して復旧する必要があります。

ブートローダーの復旧手順を次に示します。

手順12.4 ブートローダーの復旧

  1. SDブートを行うためのブートディスクを作成します。ブートディスクの作成方法については15章SDブートの活用を参照してください。

  2. Armadilloにブートディスクを接続し、ブートローダーがSDカードから起動し、且つ保守モードとなるように設定します。拡張ボード01 (Aコネクタ用)のJP1およびJP3をショートに設定してください。

  3. Armadilloが保守モードで起動したことを確認するために、ATDEでminicomを起動しておきます。

    [ATDE ~]$ LANG=C minicom --noinit --wrap --device /dev/ttyUSB0
  4. Armadilloに電源を投入します。ブートローダーが保守モードで起動すると、次のように保守モードのプロンプトが表示されます。

    hermit> 
  5. minicomを終了させシリアルポート(/dev/ttyUSB0)を開放します。

  6. bootloaderパーティションと書き込むイメージファイル(loader-armadillo810-nor-[version].bin)を指定してhermitコマンドを実行します。bootloaderパーティションを更新する場合は、必ず"--force-locked"オプションを指定する必要があります。

    [ATDE ~]$ hermit download --input-file loader-armadillo810-nor-[version].bin --region bootloader --force-locked --port /dev/ttyUSB0
    serial: completed 0x0000a92c (43308) bytes.
  7. ATDEのプロンプトが表示されるとフラッシュメモリの書き換えは完了です。次回起動時から書き換えたブートローダーイメージで起動します。

    [ATDE ~]$ 


[15] イーサネットガジェットの詳細については、「イーサネットガジェット」を参照してください。

[16] 通信速度(ボーレート)は、115200bpsです