第8章 ブートローダー仕様

本章では、ブートローダーの起動シーケンスや機能について説明します。

Armadillo-EVA 1500 のブートローダーは、IPL(1st ブートローダー)と Hermit-At(2nd ブートローダー)から構成されます。工場出荷状態では、各ブートローダーイメージは SPI フラッシュメモリに配置されています。

IPL は Hermit-At を起動する機能のみを持ちます。Hermit-At は Linuxカーネルの起動や、Linuxカーネル起動オプションを設定する機能などを持ちます。

8.1. 起動シーケンス

ここでは、工場出荷状態の Armadillo-EVA 1500 で Hermit-At が起動するまでの流れについて説明します。

  1. Armadillo-EVA 1500 へ電源を投入すると、プロセッサ(R8A77430HA01BG)の機能により SPI フラッシュメモリの ipl パーティション(16kByte) が Secure RAM にコピーされ、先頭にジャンプします。

  2. スタックポインタなどの最低限の初期化をおこなった後、IPL 自身が Hermit-At の起動処理部を Inter Connect RAM0 にリロケートします。これは、Secure RAM 全体を bootloader パーティションのコピー領域として開放するためです。

  3. IPL は SPI フラッシュメモリの bootloader パーティション(256kByte) を Secure RAM にコピーして先頭にジャンプします。

[警告]

SW1の7、8ビット目を OFF に設定した場合は IPL を起動することができません。これは、プロセッサが SPI フラッシュメモリ から Secure RAM にコピーするサイズが 4kByte になるためです。IPL のプログラムサイズは約 12kByte です。

8.2. 2ndブートローダーイメージの選択

IPL が持つ機能によって、2ndブートローダーイメージを読み出すデバイスを選択することができます。

電源投入時の SW2.7 の設定により SPI フラッシュメモリと SDカードのどちらを使用するかを選択することができます。SW2.7 が ON であれば SPI フラッシュメモリの bootloader パーティションに書き込まれているブートローダーが起動し、OFF であれば SDカードの第1パーティションのブートローダー(/sdboot.bin)が起動します。

また SW2.7 が OFF の場合は SW9 の状態により、2つある SD インターフェースのどちらを使用するかを選択することができます。SW9 を押下した状態で電源を投入した場合は CON4 が、押下なかった場合は CON6 が選択されます。

表8.1 スイッチと 2nd ブートローダーの対応

SW2.7SW92nd ブートローダー
ON-SPI フラッシュメモリの bootloader パーティション
OFF押下するCON4 に接続した SDカードの第1パーティションの/sdboot.bin
押下しないCON6 に接続した SDカードの第1パーティションの/sdboot.bin

8.3. Hermit-Atの起動モード

Hermit-At が起動すると SW2.8 の設定により2つある起動モードのどちらかに遷移します。

表8.2 Hermit-At起動モード

起動モードSW2.8説明
保守モードON各種設定が可能なHermit-Atコマンドプロンプトが起動します。
OS自動起動モードOFF電源投入後、自動的にLinuxカーネルを起動させます。

8.4. Hermit-Atの機能

Hermit-Atの保守モードでは、Linuxカーネルの起動オプションの設定や SPI フラッシュメモリの書き換えなどを行うことできます。

保守モードで利用できるコマンドを、表8.3「Hermit-Atの保守モードコマンド一覧」に示します。

表8.3 Hermit-Atの保守モードコマンド一覧

コマンド説明

tftpdl

erase

program

download

SPIフラッシュメモリを書き換える場合に使用します
memmapSPIフラッシュメモリのメモリマップを表示します

setbootdevice

setenv

clearenv

OSの起動設定を変更する場合に使用します

boot

tftpboot

OSを起動する場合に使用します
frob簡易的にメモリアクセスする場合に使用します
md5sumSPIフラッシュメモリ空間のMD5チェックサム値を表示する場合に使用します
infoハードウェアの情報を表示します
versionブートローダーのバージョンを表示します

各コマンドのヘルプを表示するには図8.1「hermitコマンドのヘルプを表示」のようにします。

hermit> help [コマンド]

図8.1 hermitコマンドのヘルプを表示


[ティップ]

tftpdlおよびtftpbootは、TFTPプロトコルを使用してTFTPサーバーからイメージファイルをダウンロードします。デフォルトのデータブロックサイズが512Byteであるため、イメージファイルの最大サイズがブロック番号の桁溢れが発生しない33554431Byte(32MByte - 1Byte)に制限されます。これよりもサイズの大きいイメージファイルをダウンロードする場合は、"--blksize"オプションを利用してデータブロックサイズを増やす必要があります。

"--blksize"オプションには、IPフラグメンテーションが起きないデータブロックサイズを指定する必要があります。

8.4.1. コンソールの指定方法

ブートローダーおよびLinuxカーネルのコンソールを指定するには、後述するLinuxカーネル起動オプションを設定する場合のsetenvコマンドで行います。Linuxカーネル起動オプションのconsoleパラメータは、ブートローダーのコンソールにも影響する仕組みとなっています。

コンソール指定子とそれに対応するログ表示先/保守モードプロンプト出力先を表8.4「コンソール指定子とログ出力先」に示します。

表8.4 コンソール指定子とログ出力先

コンソール指定子OS自動起動モード時のログ出力先保守モードプロンプト出力先[a]
ttySC3CON14CON14
ttySC2CON16CON16
noneなしCON14
その他(tty1等)指定するコンソール[b]CON14

[a] ブートローダーの再起動後に反映されます

[b] ブートローダーのログは出力されません


8.4.2. Linuxカーネルイメージの指定方法

Hermit-AtがOSを起動させる際、eMMC と SDカードのどちらに保存されているLinuxカーネルイメージを使用するかを指定することができます。

Linuxカーネルイメージを指定するには、"setbootdevice"コマンドを使用します。表8.5「Linuxカーネルイメージ指定子」に示す指定子を設定することができます。

表8.5 Linuxカーネルイメージ指定子

指定子Linuxカーネルイメージの配置場所
mmcblk0p1[a]

eMMCのパーティション1に保存されているLinuxカーネルイメージ

mmcblk1p2[a]

CON6に接続されたSDカードのパーティション2に保存されているLinuxカーネルイメージ

mmcblk2p2[a]

CON4に接続されたSDカードのパーティション2に保存されているLinuxカーネルイメージ

tftp

TFTPサーバー上に保存されているLinuxカーネルイメージ

[a] "pN"(Nは'1'から'4')はパーティションを示し、任意のパーティションを指定可能です


Linuxカーネルイメージ指定子として"tftp"を指定する場合は、Linuxカーネルイメージ指定子の他にTFTPサーバーのIPアドレスなどを指定する必要があります。次の例では、ArmadilloのIPアドレスを 192.168.10.10 に設定し、IP アドレスが 192.168.10.1 のTFTPサーバー上にあるlinux.binを Linuxカーネルイメージとして指定します。

hermit> setbootdevice tftp 192.168.10.10 192.168.10.1 --kernel=linux.bin

図8.2 TFTPサーバー上のLinuxカーネルイメージを指定する


8.4.3. Linuxカーネル起動オプションの指定方法

Linuxカーネルには様々な起動オプションがあります。詳しくは、Linuxの解説書や、Linuxカーネルのソースコードに含まれているドキュメント(Documentation/kernel-parameters.txt)を参照してください。

ここではArmadillo-EVA 1500で使用することができる、代表的な起動オプションを表8.6「Linuxカーネルの起動オプションの一例」に紹介します。

表8.6 Linuxカーネルの起動オプションの一例

オプション指定子説明
console=

起動ログなどが出力されるイニシャルコンソールを指定します。

次の例では、コンソールにttySC3(CON14)を、ボーレートに115200を指定しています。

console=ttySC2,115200
root=

ルートファイルシステムが構築されているデバイスを指定します。

デバイスにはLinuxカーネルが認識した場合のデバイスを指定します。

次の例では、デバイスに eMMC の第2パーティションを指定しています。

root=/dev/mmcblk0p2
rootwait

"root="で指定したデバイスが利用可能になるまでルートファイルシステムのマウントを遅らせます。

noinitrd

initrdを利用しないことを明示します。

mem

Linuxカーネルが利用可能なメモリの量を指定します。[a]

[a] Linuxカーネルからは1024MByteを越えるメモリにアクセスすることができません。そのため、必ず"mem=1024M"オプションを指定する必要があります。