本章では、Armadillo-IoT のフラッシュメモリに書き込まれているイメージファイルを更新する手順について説明します。
フラッシュメモリの書き換え方法には、大きく分けて以下の3種類の方法があります。
表12.1 フラッシュメモリの書き換え方法
方法 | 特徴 |
---|
netflashを使用する |
|
ダウンローダーを使用する |
|
TFTPを使用する |
|
フラッシュメモリを書き換えるためには、Linuxまたはブートローダーが起動している必要があります。フラッシュメモリに書き込まれているブートローダーが起動しない状態になってしまった場合は、「ブートローダーが起動しなくなった場合の復旧作業」を参照してブートローダーを復旧してください。
| |
---|
ダウンローダーを使用してユーザーランドイメージなどサイズの大きなイメージファイルを書き換えると非常に時間がかかります。これは、イメージファイルをArmadilloに転送する際にシリアルの転送速度がボトルネックとなるためです。サイズの大きなイメージファイルを書き換える場合はnetflashまたはTFTPを使用する方法を推奨します。
|
12.1. フラッシュメモリのパーティションについて
フラッシュメモリの書き換えは、パーティション毎に行います。パーティションは"リージョン"とも呼ばれます。
各パーティションのサイズはフラッシュメモリ内には保存されていません。ブートローダーとLinuxカーネルそれぞれが同じパーティションテーブルを保持することにより、一意的に扱うことができるようになっています。
各パーティションは、書き込みを制限することが可能です。書き込みを制限する理由は、誤動作や予期せぬトラブルにより、フラッシュメモリ上のデータが不意に破壊または消去されることを防ぐためです。
読み込みは、常時可能です。読み込みに制限を付けることはできません。
各パーティションのデフォルト状態での書き込み制限の有無と、対応するイメージファイル名を表12.2「パーティションのデフォルト状態での書き込み制限の有無と対応するイメージファイル名」に示します。
表12.2 パーティションのデフォルト状態での書き込み制限の有無と対応するイメージファイル名
パーティション | 書き込み制限 | イメージファイル名 | 備考 |
---|
bootloader | あり | loader-armadillo-iotg-std-[version] .bin | ブートローダーイメージを配置するパーティションです。 |
kernel | なし | linux-aiotg-std-[version] .bin.gz | Linuxカーネルイメージを配置するパーティションです。 |
userland | なし | romfs-aiotg-std-[version] .img.gz | ユーザーランドイメージを配置するパーティションです。 |
config | なし | なし | ユーザーランドアプリケーション"flatfsd"がFlat file-system(フラッシュメモリ向けファイルシステム)を構築するパーティションです。使用方法については7章コンフィグ領域 − 設定ファイルの保存領域を参照してください。 |
| |
---|
工場出荷状態でフラッシュメモリに書き込まれているイメージファイルは、最新版ではない可能性があります。最新版のブートローダー、LinuxカーネルイメージファイルはArmadilloサイトから、ユーザーランドイメージファイルはユーザーズサイトからダウンロード可能です。最新版のイメージファイルに書き換えてからのご使用を推奨します。
|
ダウンローダーでは、書き込みが制限されているパーティションを"ロック(locked)されている"と呼びます。このパーティションを強制的に書き換える場合は、"--force-locked"というオプションを付けます。他のオプションについては、「ダウンローダーを使用してフラッシュメモリを書き換える」を参照してください。
Linuxが動いている場合は、書き込みが制限されているパーティションを書き換えることはできません。そのため、bootloaderパーティションをnetflashで書き換えることはできません。
12.2. netflashを使用してフラッシュメモリを書き換える
Linux が動作している状態では、Linux アプリケーションの netflash を利用することでフラッシュメモリを書き換えることができます。ここでは、netflash を利用して次に示す場所に存在するイメージファイルをフラッシュメモリに書き込む手順を紹介します。
Webサーバー上のイメージファイル
ストレージ上のイメージファイル
netflashコマンドのヘルプは次の通りです。
"-r"オプションに指定するフラッシュメモリのデバイスファイルとパーティションの対応を次に示します。
表12.3 フラッシュメモリのパーティションとデバイスファイル
パーティション | デバイスファイル |
---|
kernel | /dev/flash/kernel |
userland | /dev/flash/userland |
config | /dev/flash/config |
| |
---|
bootloaderパーティションは書き込みが制限されているため、netflashで書き換えることはできません。
|
12.2.1. Webサーバー上のイメージファイルを書き込む
ATDEでは、標準でWebサーバー(lighttpd)が動作しており、/var/www/
ディレクトリ以下に置かれたファイルはネットワーク経由でダウンロードすることができます。netflash は、HTTPによるファイルのダウンロードをサポートしています。
ここでは、ATDEとネットワーク通信ができることを前提に、ATDEからイメージファイルをダウンロードしてkernelパーティションに書き込む手順を説明します。
手順12.1 Webサーバー上のイメージファイルを書き込む
ATDEの/var/www/
ディレクトリにLinuxカーネルイメージファイルを置きます。
Webサーバー上のイメージファイルのURL(http://[ATDEのIPアドレス]/linux-aiotg-std-[version]
.bin.gz)を指定して netflashコマンドを実行します。次の例では、ATDEのIPアドレスが「192.0.2.1」であることを想定しています。
Armadilloのプロンプトが表示されるとフラッシュメモリの書き換えは完了です。次回起動時から書き換えたLinuxカーネルイメージで起動します。
12.2.2. ストレージ上のイメージファイルを書き込む
ストレージ(SDカードやUSBメモリ)をマウントすることで、ストレージに保存されたイメージファイルをフラッシュメモリに書き込むことができます。
ここでは SDカードに保存されているイメージファイルを userland パーティションに書き込む手順を説明します。
手順12.2 SDカード上のイメージファイルを書き込む
SDカードを/mnt/
ディレクトリにリードオンリーでマウントします。
SDカード上のイメージファイルのパス(/mnt/romfs-aiotg-std-[version]
.img.gz)を指定して netflashコマンドを実行します。
Armadilloのプロンプトが表示されるとフラッシュメモリの書き換えは完了です。次回起動時から書き換えたユーザーランドイメージで起動します。
SDカードをアンマウントします。
12.3. ダウンローダーを使用してフラッシュメモリを書き換える
Linuxを起動できない場合やブートローダーを更新する場合は、ダウンローダー(hermit)を使用してフラッシュメモリを書き換える必要があります。hermitはATDEに標準でインストールされています。
hermitはArmadilloのブートローダーと協調動作を行いフラッシュメモリを書き換えることができます。hermitとブートローダー間の通信には、シリアル[]が使用されます。
hermitのヘルプは次の通りです。
ここでは、bootloaderパーティションを書き換える手順について説明します。
手順12.3 ダウンローダーを使用して書き換える
ブートローダーが保守モードで起動するように設定します。設定方法については、「ブートローダー起動モード」を参照してください。
Armadilloが保守モードで起動したことを確認するために、ATDEでminicomを起動しておきます。デバイスファイル名(/dev/ttyUSB0)は、ご使用の環境により ttyUSB1やttyS0、ttyS1 などになる場合があります。Armadilloに接続されているシリアルポートのデバイスファイルを指定してください。
Armadilloに電源を投入します。ブートローダーが保守モードで起動すると、次のように保守モードのプロンプトが表示されます。
minicomを終了させシリアルポート(/dev/ttyUSB0)を開放します。
bootloaderパーティションと書き込むイメージファイル(loader-armadillo-iotg-std-[version].bin)を指定してhermitコマンドを実行します。bootloaderパーティションを更新する場合は、必ず"--force-locked"オプションを指定する必要があります。
| |
---|
書き込みが制限されているパーティションを書き換える場合、"--force-locked"オプションを指定する必要があります。
|
ATDEのプロンプトが表示されるとフラッシュメモリの書き換えは完了です。次回起動時から書き換えたブートローダーイメージで起動します。
12.4. TFTPを使用してフラッシュメモリを書き換える
Hermit-At ブートローダーの tftpdl 機能を使用することで、Linuxが動いていない時でもフラッシュメモリを書き換えることができます。
tftpdl 機能は、所属するネットワークにある TFTP サーバーが公開しているファイルをダウンロードして、自分自身のフラッシュメモリを書き換えることができる機能です。
| |
---|
ATDE5では、標準で TFTP サーバー (atftpd) が動作しています。/var/lib/tftpboot/ ディレクトリにファイルを置くことで、TFTP によるアクセスが可能になります。 |
tftpdl 機能を使用するには、ターゲットとなる Armadillo のジャンパを設定し、保守モードで起動してください。
作業用 PC のシリアル通信ソフトウェアを使用して、コマンドを入力します。図12.3「tftpdl コマンド例」は、Armadillo の IP アドレスを 192.0.2.10 に設定し、IP アドレスが 192.0.2.1 の TFTP サーバー上にある、romfs.img.gz を userland パーティションにを書き込む例です。
書き込み対象となるパーティションを指定するオプションと、パーティションの対応を次に示します。
表12.4 パーティションとオプションの対応
パーティション | オプション |
---|
bootloader | --bootloader |
kernel | --kernel |
userland | --userland |
config | --config |
| |
---|
tftpdlは、TFTPプロトコルを使用してTFTPサーバーからイメージファイルをダウンロードします。デフォルトのデータブロックサイズが512Byteであるため、イメージファイルの最大サイズがブロック番号の桁溢れが発生しない33554431Byte(32MByte - 1Byte)に制限されます。これよりもサイズの大きいイメージファイルをダウンロードする場合は、"--blksize"オプションを利用してデータブロックサイズを増やす必要があります。
"--blksize"オプションには、IPフラグメンテーションが起きないデータブロックサイズを指定する必要があります。
|
12.5. ブートローダーが起動しなくなった場合の復旧作業
フラッシュメモリのbootloaderパーティションを誤ったイメージファイルで書き換えたり、書き換え中にArmadilloの電源を切断してしまった場合、ブートローダーが起動しなくなる場合があります。フラッシュメモリのブートローダーが起動しなくなった場合は、プロセッサ(i.MX257)のUARTブート機能を利用して復旧する必要があります。
ブートローダーの復旧手順を次に示します。
手順12.4 ブートローダーの復旧
Armadillo-IoTの電源が切断されていることを確認します。
ATDEでshoehorn
コマンドを実行します。デバイスファイル名(/dev/ttyUSB0
)は、ご使用の環境により ttyUSB1
や ttyS0
、ttyS1
などになる場合があります。Armadillo-IoTに接続されているシリアルポートのデバイスファイルを指定してください。
プロセッサ(i.MX257)をUARTブートモードに設定します。起動モード設定インターフェース(Armadillo-410:CON15)の1-2ピンをショートしてください。
| |
---|
金属製の工具(M2のマイナスドライバー等)で 起動モード設定インターフェース(Armadillo-410:CON15) の 1-2ピン間をショートして、UARTブートモードに設定することも可能です。その際、周囲のコネクタ等に工具が接触しないようご注意ください。
|
Armadilloに電源を投入します。電源投入後に、起動モード設定インターフェース(Armadillo-410:CON15)の1-2ピンをオープンします。
shoehorn
コマンドが成功すると、Armadillo-IoTのRAM上でHermit-Atブートローダーが動作している状態になります。Armadillo-IoTの電源を切断せずに、hermit
コマンドでフラッシュメモリのbootloaderパーティションにブートローダーイメージを書き込みます。
ATDEのプロンプトが表示されるとフラッシュメモリの書き換えは完了です。次回起動時から書き換えたブートローダーイメージで起動します。