第10章 ビルド手順

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

使用する最新版のソースコードは、Armadilloサイトからダウンロードすることができます。新機能の追加や不具合の修正などが行われているため、最新バージョンのソースコードを利用することを推奨します。

[警告]

開発作業では、基本ライブラリ・アプリケーションやシステム設定ファイルの作成・配置を行います。各ファイルは作業ディレクトリ配下で作成・配置作業を行いますが、作業ミスにより誤って作業用 PC 自体の OS を破壊しないために、すべての作業は root ユーザーではなく一般ユーザーで行ってください。

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

ここでは、ブートローダーである「U-Boot」のソースコードからイメージファイルを作成する手順を説明します。

[ティップ]

u-boot-x1-at16より、SPIフラッシュメモリ用とSD/eMMC用のデフォルトコンフィグは統合されました。

手順10.1 ブートローダーをビルド

  1. ソースコードの準備

    U-Bootのソースコードアーカイブを準備し展開します。

    [PC ~]$ ls
    uboot_2016.07-at[version].tar.gz
    [PC ~]$ tar xf uboot_2016.07-at[version].tar.gz
    [PC ~]$ ls
    uboot_2016.07-at[version]  uboot_2016.07-at[version].tar.gz
  2. デフォルトコンフィギュレーションの適用

    U-Bootディレクトリに入り、Armadillo-IoT ゲートウェイ G3用のデフォルトコンフィギュレーションを適用します。デフォルトコンフィグにはx1_configを指定してください。

    [PC ~]$ cd uboot_2016.07-at[version]
    [PC ~/uboot_2016.07-at[version]]$ make ARCH=arm x1_config
  3. ビルド

    ビルドにはmakeコマンドを利用します。

    [PC ~/uboot_2016.07-at[version]]$ make CROSS_COMPILE=arm-linux-gnueabihf-
  4. イメージファイルの生成確認

    ビルドが終了すると、U-Bootディレクトリにイメージファイルが作成されています。

    [PC ~/uboot_2016.07-at[version]]$ ls u-boot-x1.bin
    u-boot-x1.bin

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

ここでは、Linuxカーネルのソースコードとinitramfsアーカイブから、イメージファイルを作成する手順を説明します。

ビルドに必要なファイル

linux-4.9-x1-at[version].tar.gz
initramfs_x1-[version].cpio.gz

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

  1. アーカイブの展開

    Linuxカーネルのソースコードアーカイブを展開します。

    [PC ~]$ ls
    initramfs_x1-[version].cpio.gz linux-4.9-x1-at[version].tar.gz
    [PC ~]$ tar xf linux-4.9-x1-at[version].tar.gz
    [PC ~]$ ls
    initramfs_x1-[version].cpio.gz linux-4.9-x1-at[version]  linux-4.9-x1-at[version].tar.gz
  2. initramfsアーカイブへのシンボリックリンク作成

    Linuxカーネルディレクトリに移動して、initramfsアーカイブへのシンボリックリンク作成します。

    [PC ~]$ cd linux-4.9-x1-at[version]
    [PC ~/linux-4.9-x1-at[version]]$ ln -s ../initramfs_x1-[version].cpio.gz initramfs_x1.cpio.gz
  3. コンフィギュレーション

    コンフィギュレーションをします。

    [PC ~/linux-4.9-x1-at[version]]$ make ARCH=arm x1_defconfig
  4. ビルド

    ビルドするには、次のようにコマンドを実行します。

    [PC ~/linux-4.9-x1-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
    [PC ~/linux-4.9-x1-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 uImage
            
  5. イメージファイルの生成確認

    ビルドが終了すると、arch/arm/boot/ディレクトリと、arch/arm/boot/dts/以下にイメージファイル(LinuxカーネルとDTB)が作成されています。

    [PC ~/linux-4.9-x1-at[version]]$ ls arch/arm/boot/uImage
    uImage
    [PC ~/linux-4.9-x1-at[version]]$ ls arch/arm/boot/dts/armadillo_iotg_g3.dtb
    armadillo_iotg_g3.dtb
    [PC ~/linux-4.9-x1-at[version]]$ ls arch/arm/boot/dts/armadillo_iotg_g3_m1.dtb
    armadillo_iotg_g3_m1.dtb

10.3. Debian GNU/Linux ルートファイルシステムをビルドする

ここでは、x1-debian-builder を使って、Debian GNU/Linuxルートファイルシステムを構築する方法を示します。

x1-debuan-builder は ATDE 等のPCで動作しているLinux上でArmadillo-IoTG3用のarmhfアーキテクチャに対応したDebian GNU/Linux ルートファイルシステムを構築することができるツールです。

Armadillo-IoT G3 を一度起動した後のルートファイルシステム上には、使い方によってはsshの秘密鍵や、動作ログ、シェルのコマンド履歴、ハードウェアのUUIDに紐付く設定ファイル等が生成されています。そのまま、他の Armadillo-IoT G3 にルートファイルシステムをコピーした場合は、鍵の流出や UUID の不一致による動作の相違が起きる可能性があります。そのため、量産等に使用するルートファイルシステムは新規に x1-debuan-builder を使って構築することをお勧めします。

10.3.1. 出荷状態のルートファイルシステムアーカイブを構築する

出荷状態のルートファイルシステムアーカイブを構築する手順を次に示します。パッケージをインターネット上から取得するため回線速度に依存しますが、40分程度かかります。

[ATDE ~]$ sudo apt-get update && sudo apt-get install qemu-user-static
[ATDE ~]$ tar xf x1-debian-builder-[VERSION].tar.gz
[ATDE ~]$ cd x1-debian-builder-[VERSION]
[ATDE ~/x1-debian-builder-[VERSION]]$ sudo ./build.sh aiotg3

図10.1 出荷状態のルートファイルシステムアーカイブを構築する手順


10.3.2. カスタマイズされたルートファイルシステムアーカイブを構築する

x1-debian-builder-[VERSION]/aiotg3_resources内のファイルを変更し、build.shを実行することで、ルートファイルシステムをカスタマイズすることができます。

10.3.2.1. ファイル/ディレクトリを追加する

aiotg3_resources/ 以下に配置したファイルやディレクトリは resources ディレクトリを除いて、そのまま、ルートファイルシステムの直下にコピーされます。ファイルのUIDとGIDは共にrootになります。

10.3.2.2. パッケージを変更する

aiotg3_resources/resources/packages を変更することで、ルートファイルシステムにインストールするパッケージをカスタマイズすることができます。

パッケージ名は1行に1つ書くことができます。パッケージ名は Armadillo-IoT G3 上で "apt-get install" の引数に与えることのできる正しい名前で記載してください。

誤ったパッケージ名を指定した場合は、ビルドログに以下のようなエラーメッセージが表示されて当該のパッケージが含まれないアーカイブが生成されます。

E: Unable to locate package XXXXX

図10.2 誤ったパッケージ名を指定した場合に起きるエラーメッセージ


[ティップ]

パッケージに依存する他のパッケージは明記しなくても、apt によって自動的にインストールされます。また、aptやdpkg等の Debian GNU/Linux の根幹となるパッケージも自動的にインストールされます。

[ティップ]

packages には lua と rubyのインタプリタや、Webサーバー(lighttpd) が含まれていますが、これらが不要な場合は、それぞれの行を削除してください。

[警告]

openssh-server のような「パッケージのインストールの際に、自動的に秘密鍵を生成する」パッケージは、基本的にpackagesには追加せず、Armadillo を起動した後に "apt-get install" を使って個別にインストールしてください。

openssh-server を packages に追加した場合、構築したルートファイルシステムアーカイブを書き込んだ全ての Armadillo に、単一の公開鍵を使ってログインすることができてしまいます。もし、意図的に、複数の Armadillo で同一の秘密鍵を利用したい場合、脆弱性となり得ることを理解して適切な対策をとった上で利用してください。