第9章 ビルド手順

本章では、ソースコードから工場出荷イメージと同じイメージを作成する手順について説明します。

使用するソースコードは、評価セット付属のDVDに収録されています。最新版のソースコードは、Armadilloサイトからダウンロードすることができます。新機能の追加や不具合の修正などが行われているため、DVDに収録されているものよりも新しいバージョンがリリースされているかを確認して、最新バージョンのソースコードを利用することを推奨します。

9.1. Linuxカーネルをビルドする

ここでは、LinuxカーネルのソースコードからLinuxカーネルイメージとDTB(Device Tree Blob)を作成する手順について説明します。

手順9.1 Linuxカーネルをビルド

  1. ソースコードの準備

    ソースコードを準備します。Linuxカーネルのソースコードアーカイブを準備し、展開します。展開後、linux-3.4-ae1500-[version]ディレクトリに移動します。

    [ATDE ~]$ ls
    linux-3.4-ae1500-[version].tar.gz
    [ATDE ~]$ tar zxf linux-3.4-ae1500-[version].tar.gz
    [ATDE ~]$ ls
    linux-3.4-ae1500-[version]  linux-3.4-ae1500-[version].tar.gz
    [ATDE ~]$ cd linux-3.4-ae1500-[version]   
  2. デフォルトコンフィギュレーションの適用

    Armadillo-EVA 1500のデフォルトコンフィギュレーションを適用します。

    [ATDE ~/linux-3.4-ae1500-[version]]$ make ARCH=arm armadilloeva1500_defconfig
  3. ビルド

    カーネルをビルドします。Linuxカーネルイメージはarch/arm/boot/以下に作成されます。

    [ATDE ~/linux-3.4-ae1500-[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
    [ATDE ~/linux-3.4-ae1500-[version]]$ ls arch/arm/boot/Image
    arch/arm/boot/Image
  4. DTBの作成

    DTS(Device Tree Source)から、DTB(Device Tree Blob)を作成します。

    [ATDE ~/linux-3.4-ae1500-[version]]$ ./scripts/dtc/dtc -o r8a7791-armadilloeva1500.dtb -I dts -O dtb -R 8 -p 0x3000 arch/arm/boot/dts/r8a7791-armadilloeva1500.dts
    [ATDE ~/linux-3.4-ae1500-[version]]$ gzip -c r8a7791-armadilloeva1500.dtb > r8a7791-armadilloeva1500.dtb.gz
    [ATDE ~/linux-3.4-ae1500-[version]]$ ls r8a7791-armadilloeva1500.dtb.gz
    r8a7791-armadilloeva1500.dtb.gz

9.2. ブートローダーをビルドする

ここでは、IPL(1st ブートローダー)とHermit-At(2nd ブートローダー)のブートローダーイメージを作成する手順について説明します。IPLをビルドする場合は「IPLをビルドする」を、Hermit-Atをビルドする場合は「Hermit-Atをビルドする」を参照してください。

9.2.1. IPLをビルドする

IPLブートローダーイメージ作成する手順について説明します。

手順9.2 IPLをビルド

  1. ソースコードの準備

    IPLのソースコードアーカイブを準備し、展開します。展開後、ipl-ae1500-[version]ディレクトリに移動します。

    [ATDE ~]$ ls
    ipl-ae1500-[version].tar.gz
    [ATDE ~]$ tar zxf ipl-ae1500-[version].tar.gz
    [ATDE ~]$ ls
    ipl-ae1500-[version]  ipl-ae1500-[version].tar.gz
    [ATDE ~]$ cd ipl-ae1500-[version]
  2. ビルド

    IPLをビルドします。IPLブートローダーイメージはビルドディレクトリ直下に作成されます。

    [ATDE ~/ipl-ae1500-[version]]$ make
    [ATDE ~/ipl-ae1500-[version]]$ ls *.bin
    ipl-ae1500-[version].bin

9.2.2. Hermit-Atをビルドする

Hermit-Atブートローダーイメージ作成する手順について説明します。

手順9.3 Hermit-Atをビルド

  1. ソースコードの準備

    Hermit-Atのソースコードアーカイブを準備し、展開します。展開後、hermit-at-ae1500-[version]ディレクトリに移動します。

    [ATDE ~]$ ls
    hermit-at-ae1500-[version].tar.gz
    [ATDE ~]$ tar zxf hermit-at-ae1500-[version].tar.gz
    [ATDE ~]$ ls
    hermit-at-ae1500-[version]  hermit-at-ae1500-[version].tar.gz
    [ATDE ~]$ cd hermit-at-ae1500-[version]
  2. デフォルトコンフィギュレーションの適用

    Armadillo-EVA 1500 のデフォルトコンフィギュレーションを適用します。

    [ATDE ~/hermit-at-ae1500-[version]]$ make armadilloeva1500_defconfig
  3. ビルド

    Hermit-Atをビルドします。Hermit-Atブートローダーイメージはsrc/target/armadillo15x0/以下に作成されます。

    [ATDE ~/hermit-at-ae1500-[version]]$ make
    [ATDE ~/hermit-at-ae1500-[version]]$ ls src/target/armadillo15x0/*.bin
    src/target/armadillo15x0/loader-armadilloeva1500-[version].bin

9.3. ビルドしたイメージのインストール

ここでは、「Linuxカーネルをビルドする」および「ブートローダーをビルドする」で作成したイメージのインストール方法を説明します。各イメージは、配置できる場所が決められています。各イメージの配置可能場所の一覧を次に示します

表9.1 イメージの配置可能場所一覧

イメージSPIフラッシュメモリeMMCSDカード
IPLo[a]xx
Hermit-Atoxo
Linuxカーネルooo
FDToxx

[a] オンボードSPIフラッシュメモリへ書き込むことはできません。ビルドしたIPLイメージは、拡張インターフェース(CON2)に接続された外部SPIフラッシュメモリからブートする場合に使用することを想定しています。


以降では、イメージをSPIフラッシュメモリおよびeMMCへインストールする方法について説明します。SDカードにイメージを配置する方法に関しては、10章SDブートの活用 を参照してください。

9.3.1. SPIフラッシュメモリへの書き込み方法

SPIフラッシュメモリへの書き込み方法について説明します。SPIフラッシュメモリの書き換え方法には、大きく分けて次に示す2種類の方法があります。

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

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

  • Armadilloをネットワークに接続しなくても良い

TFTPを使用する
  • イメージファイルをネットワークで転送するため書き換えが高速

  • Armadilloがネットワークに接続されている必要がある


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

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

フラッシュメモリの書き換えは、パーティション毎に行います。パーティションは"リージョン"とも呼ばれます。

各パーティションのサイズはフラッシュメモリ内には保存されていません。IPL、Hermit-AtとLinuxカーネルそれぞれが同じパーティションテーブルを保持することにより、一意的に扱うことができるようになっています。

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

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

各パーティションのデフォルト状態での書き込み制限の有無と、対応するイメージファイル名を次に示します。

表9.3 パーティションのデフォルト状態での書き込み制限の有無と対応するイメージファイル名

パーティション書き込み制限イメージファイル名備考

ipl

あり

ipl-ae1500-[version].bin

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

bootloader

あり

loader-armadilloeva1500-[version].bin

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

fdt

なし

r8a7791-armadilloeva1500-[version].dtb.gz

DTBを配置するパーティションです。

firmware

あり

squashfs-ae1500-firmware-[version].img

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


[ティップ]

2014年7月現在では、firmwareパーティションのファームウェアを使用することはできません。

[ティップ]

工場出荷状態でフラッシュメモリに書き込まれているイメージファイルは、最新版ではない可能性があります。最新版のHermit-Atブートローダー、DTB はArmadilloサイトから、ファームウェアイメージファイルはユーザーズサイトからダウンロード可能です。最新版のイメージファイルに書き換えてからのご使用を推奨します。

ダウンローダーでは、書き込みが制限されているパーティションを"ロック(locked)されている"と呼びます。このパーティションを強制的に書き換える場合は、"--force-locked"というオプションを付けます。他のオプションについては、「ダウンローダーを使用してSPIフラッシュメモリを書き換える」を参照してください。

Linuxが動いている場合、パーティションの書き込み制限をコマンドで外すことが可能です。Sysfsの MTDクラスディレクトリ以下にある"ro"というファイルに0を書き込むことで制限を外すことが可能です。逆に1を書き込めば、パーティションへの書き込みを制限する事が可能です。

MTDクラスディレクトリとパーティションの対応は次の通りです。

表9.4 パーティションとMTDクラスディレクトリの対応

パーティションMTDクラスディレクトリ

ipl

/sys/class/mtd/mtd0

bootloader

/sys/class/mtd/mtd1

fdt

/sys/class/mtd/mtd2

firmware

/sys/class/mtd/mtd3


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

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

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

図9.1 書き込み制限を外す


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

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

図9.2 書き込みを制限する


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

Armadilloをネットワークに接続できない場合は、ダウンローダー(hermit)を使用してSPIフラッシュメモリを書き換える必要があります。hermitはATDEに標準でインストールされています。

hermitはArmadilloで動作しているHermit-Atと協調動作を行いSPIフラッシュメモリを書き換えることができます。hermitとArmadilloで動作しているHermit-At間の通信には、シリアル[24]が使用されます。

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>

図9.3 hermitコマンドのヘルプ


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

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

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

  2. Armadilloが保守モードで起動したことを確認するために、ATDEでminicomを起動しておきます。デバイスファイル名(/dev/ttyUSB0)は、ご使用の環境により ttyUSB1やttyS0、ttyS1 などになる場合があります。Armadilloに接続されているシリアルポートのデバイスファイルを指定してください。

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

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

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

    [ATDE ~]$ hermit download --input-file loader-armadilloeva1500-[version].bin --region bootloader --force-locked --port /dev/ttyUSB0
    serial: completed 0x0000a92c (43308) bytes.
    [注記]

    書き込みが制限されているパーティションを書き換える場合、"--force-locked"オプションを指定する必要があります。

  6. ATDEのプロンプトが表示されるとSPIフラッシュメモリの書き換えは完了です。次回起動時から書き換えたHermit-Atブートローダーイメージで起動します。

    [ATDE ~]$ 

9.3.1.3. TFTPを使用してSPIフラッシュメモリを書き換える

Hermit-At ブートローダーの tftpdl 機能を使用することで、ネットワーク経由で、SPIフラッシュメモリを書き換えることができます。

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

[ティップ]

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

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

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

hermit> tftpdl 192.168.10.10 192.168.10.1 --fdt=r8a7791-armadilloeva1500.dtb.gz

図9.4 tftpdl コマンド例


書き込み対象となるパーティションを指定するオプションと、パーティションの対応を次に示します。

表9.5 パーティションとオプションの対応

パーティションオプション
bootloader--bootloader
fdt--fdt

[ティップ]

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

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

9.3.2. eMMCへの書き込み方法

カーネルイメージを、eMMCにインストールします。事前に10章SDブートの活用を参照して、Debian GNU/Linux を SD ブートしている必要があります。

「Linuxカーネルをビルドする」で作成したカーネルイメージファイルはカレントディレクトリ以下にあることを想定しています。

[armadillo ~]# ls
Image.bin
[armadillo ~]# mount /dev/mmcblk0p1 /mnt  1
[armadillo ~]# rm -f /mnt/boot/*.bin  2
[armadillo ~]# cp Image.bin /mnt/boot/Image.bin  3
[armadillo ~]# umount /mnt

1

eMMCパーティション1をマウントします。

2

eMMCパーティション1の/boot/以下のカーネルイメージファイルを削除します。

3

eMMCパーティション1の/boot/以下にカーネルイメージファイルをコピーします。使用できるファイル名に関しては表10.7「ブートローダーがLinuxカーネルを検出可能な条件」を参照してください。

図9.5 Debian GNU/Linux システムへのカーネルイメージのインストール




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