ビルド手順

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

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

[警告]

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

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

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

  1. ソースコードの準備

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

    [ATDE ~]$ tar xf u-boot-a600-v2018.03-at[version].tar.gz
  2. デフォルトコンフィギュレーションの適用

    U-Bootディレクトリに入り、デフォルトコンフィギュレーションを適用します。

    [ATDE ~]$ cd u-boot-a600-v2018.03-at[version]
    [ATDE ~/u-boot-a600-v2018.03-at[version]]$ make ARCH=arm armadillo-iotg-a6_defconfig
  3. ビルド

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

    [ATDE ~/u-boot-a600-v2018.03-at[version]]$ make CROSS_COMPILE=arm-linux-gnueabihf-
  4. イメージファイルの生成確認

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

    [ATDE ~/u-boot-a600-v2018.03-at[version]]$ ls u-boot.imx
    u-boot.imx

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

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

ビルドに必要なファイル
  • linux-v4.14-at[version].tar.gz
  • initramfs_a600-[version].cpio.gz

11.2.1. 手順:Linuxカーネルをビルド

  1. アーカイブの展開

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

    [ATDE ~]$ ls
    initramfs_a600-[version].cpio.gz linux-v4.14-at[version].tar.gz
    [ATDE ~]$ tar xf linux-v4.14-at[version].tar.gz
    [ATDE ~]$ ls
    initramfs_a600-[version].cpio.gz linux-v4.14-at[version]  linux-v4.14-at[version].tar.gz
  2. initramfs アーカイブへのシンボリックリンク作成

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

    [ATDE ~]$ cd linux-v4.14-at[version]
    [ATDE ~/linux-v4.14-at[version]]$ ln -s ../initramfs_a600-[version].cpio.gz initramfs_a600.cpio.gz
  3. コンフィギュレーション

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

    [ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm armadillo-iotg-a6_defconfig
[警告]

Linux カーネルのバージョンが at42以前の場合は、「armadillo-640_defconfig」を指定する必要があります。

  1. ビルド

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

    [ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage
    [ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  2. イメージファイルの生成確認

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

    [ATDE ~/linux-v4.14-at[version]]$ ls arch/arm/boot/uImage
    arch/arm/boot/uImage
    [ATDE ~/linux-v4.14-at[version]]$ ls arch/arm/boot/dts/armadillo-iotg-a6.dtb
    arch/arm/boot/dts/armadillo-iotg-a6.dtb

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

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

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

[警告]

Debian GNU/Linux 10(コードネーム buster) ルートファイルシステムを構築するには、at-debian-builder のバージョンが v2.x.x (xは0以上の数字)である必要があります。

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

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

[ATDE ~]$ tar xf at-debian-builder-[VERSION].tar.gz
[ATDE ~]$ cd at-debian-builder-[VERSION]
[ATDE ~]$ sudo ./build.sh aiota6

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


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

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

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

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

11.3.2.2. ネットワーク設定を変更する

aiota6_resources/resources/hosts、aiota6_resources/resources/interfaces を変更することで、Armadillo のネットワーク設定をカスタマイズすることができます。

各ファイルはルートファイルシステム作成時、特定の場所にコピーされます。

各ファイルのコピー先と詳細を以下に記載します。

表11.1 ネットワーク設定ファイルのコピー先と詳細

ファイル名コピー先詳細

hosts

/etc/hosts

IPアドレスとホスト名を関連付けるファイル

interfaces

/etc/network/interfaces

インターフェース設定ファイル


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

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

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

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

E: Unable to locate package XXXXX

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


[ティップ]

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

[警告]

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

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