第6章 ビルド

この章では、ソースコードから出荷イメージと同じイメージを作成する手順と、それをカスタマイズする方法について説明します。

開発環境を構築してない場合は、4章開発環境の準備を参照して作業用 PC に開発環境を構築してください。

より詳細な開発手順については「Atmark-Dist 開発者ガイド」を参照してください。

以下の例では、ホームディレクトリ(~/)以下のディレクトリで作業を行います。

[警告]

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

6.1. カーネルイメージとユーザーランドイメージのビルド

ここでは、ソースコードベースのディストリビューションである Atmark-Dist と、Linux カーネルのソースコードから、ユーザーランドとカーネルのイメージを作成する手順について説明します。

6.1.1. ソースコードの準備

まず最初に、ソースコードを取得します。付属 DVD の Atmark-Dist ソースアーカイブディレクトリ (source/dist) にある atmark-dist-[version].tar.gz と カーネルソースアーカイブディレクトリ (source/kernel) にある linux-[version].tar.gz を作業ディレクトリに展開します。

展開後、Atmark-Dist にカーネルソースを登録します。図6.1「ソースコード準備」のように作業してください。

[PC ~]$ tar zxvf atmark-dist-[version].tar.gz
[PC ~]$ tar zxvf linux-[version].tar.gz
[PC ~]$ ls
atmark-dist-[version].tar.gz  atmark-dist-[version]
linux-[version].tar.gz  linux-[version]
[PC ~]$ ln -s atmark-dist-[version] atmark-dist
[PC ~]$ cd atmark-dist
[PC ~/atmark-dist]$ ln -s ../linux-[version] linux-2.6.x

図6.1 ソースコード準備


6.1.2. コンフィギュレーション

ターゲットとなる Armadillo 用に Atmark-Dist をコンフィギュレーションします。Linux カーネルは Atmark-Dist の管理下にあるため、Atmark-Dist を適切に設定すれば、カーネルのコンフィギュレーションも適切に行われるようになっています。

以下の例のようにコマンドを入力し、コンフィギュレーションを開始します[12]

[PC ~/atmark-dist]$ make config

最初に、使用するボードのベンダー名を尋ねられます。「AtmarkTechno」と入力してください。

[PC ~/atmark-dist]$ make config
config/mkconfig > config.in
#
# No defaults found
#
*
* Vendor/Product Selection
*
*
* Select the Vendor you wish to target
*
Vendor (3com, ADI, Akizuki, Apple, Arcturus, Arnewsh, AtmarkTechno, Atmel, Avnet, Cirrus, Cogent, Conexant, Cwlinux, CyberGuard, Cytek, Exys, Feith, Future, GDB, Hitachi, Imt, Insight, Intel, KendinMicrel, LEOX, Mecel, Midas, Motorola, NEC, NetSilicon, Netburner, Nintendo, OPENcores, Promise, SNEHA, SSV, SWARM, Samsung, SecureEdge, Signal, SnapGear, Soekris, Sony, StrawberryLinux, TI, TeleIP, Triscend, Via, Weiss, Xilinx, senTec) [SnapGear] (NEW) AtmarkTechno

次にプロダクト名を尋ねられます。表6.1「プロダクト名一覧」から、使用する製品に対応するプロダクト名を入力してください。

表6.1 プロダクト名一覧

製品プロダクト名備考
Armadillo-440 液晶モデルArmadillo-440出荷時イメージ
Armadillo-420 ベーシックモデルArmadillo-420出荷時イメージ

以下は、Armadillo-440 の例です。

*
* Select the Product you wish to target
*
AtmarkTechno Products (Armadillo-210.Base, Armadillo-210.Recover, Armadillo-220.Base, Armadillo-220.Recover, Armadillo-230.Base, Armadillo-230.Recover, Armadillo-240.Base, Armadillo-240.Recover, Armadillo-300, Armadillo-440, Armadillo-500, Armadillo-500-FX.base, Armadillo-500-FX.dev, Armadillo-9, Armadillo-9.PCMCIA, SUZAKU-V.SZ310, SUZAKU-V.SZ310-SID, SUZAKU-V.SZ310-SIL, SUZAKU-V.SZ310-SIL-GPIO, SUZAKU-V.SZ410, SUZAKU-V.SZ410-SID, SUZAKU-V.SZ410-SIL, SUZAKU-V.SZ410-SIL-GPIO, SUZAKU-V.SZ410-SIV) [Armadillo-210.Base] (NEW) Armadillo-440

ビルドする開発環境を尋ねられます。「default」と入力してください。Armadillo-400 シリーズでは、「default」と入力すると、armel (EABI)の開発環境が選択されます。

*
* Kernel/Library/Defaults Selection
*
*
* Kernel is linux-2.6.x
*
Cross-dev (default, arm-vfp, arm, armel, armnommu, common, h8300, host, i386, i960, m68knommu, microblaze, mips, powerpc, sh) [default] (NEW) default

ビルドする libc を指定します。Armadillo-400 シリーズでは「None」を選択してください。「None」を選択することで、開発環境にインストールされているビルド済みの libc (glibc) を使用します。

Libc Version (None, glibc, uC-libc, uClibc) [uClibc] (NEW) None

既定の設定にするかどうか質問されます。「y」(Yes)を選択してください。

Default all settings (lose changes) (CONFIG_DEFAULTS_OVERRIDE) [N/y/?] (NEW) y

最後の3つの質問は「n」(No)と答えてください。

Customize Kernel Settings (CONFIG_DEFAULTS_KERNEL) [N/y/?] n
Customize Vendor/User Settings (CONFIG_DEFAULTS_VENDOR) [N/y/?] n
Update Default Vendor Settings (CONFIG_DEFAULTS_VENDOR_UPDATE) [N/y/?] n

設定の入力が完了するとビルドシステムに反映されてコンフィギュレーションが行われ、プロンプトに戻ります。

6.1.3. ビルド

ビルドするには、atmark-dist ディレクトリで図6.2「Atmark-Dist のビルド」のようにコマンドを実行します。ビルドが完了すると、atmark-dist/images ディレクトリにイメージファイルが作成されます。romfs.img がユーザーランドの、linux.bin がカーネルのイメージです。romfs.img.gzlinux.bin.gz はそれぞれのファイルを圧縮したものです。

[PC ~/atmark-dist]$ make
	:
	:
[PC ~/atmark-dist]$ ls images
linux.bin  linux.bin.gz  romfs.img  romfs.img.gz

図6.2 Atmark-Dist のビルド


作成されたイメージは、5章フラッシュメモリの書き換え方法の手順に従って、ターゲットの Armadillo に書き込むことができます。通常は、フラッシュメモリの使用容量を少なくするため、圧縮イメージを書き込みます。

6.1.4. イメージをカスタマイズする

Atmark-Dist には、様々なアプリケーションやライブラリが含まれており、コンフィギュレーションによってそれらをイメージに含めたり、イメージから削除することができます。また、カーネルのコンフィギュレーションの変更を行うこともできます。

Atmark-Dist のコンフィギュレーションを変更するには、make menuconfig コマンドを使用します。

[PC ~/atmark-dist]$ make menuconfig

図6.3 Atmark-Dist のコンフィギュレーション


make menuconfig を使用したコンフィギュレーション方法の詳細については、「Atmark-Dist 開発者ガイド」を参照してください。

コンフィギュレーションを行ったあとは、「ビルド」の手順と同様に、make コマンドを実行すると、コンフィギュレーション結果を反映したイメージが作成されます。

6.1.5. ユーザーランドイメージにアプリケーションを追加する

ここでは、「カーネルイメージとユーザーランドイメージのビルド」で作成したユーザーランドに、自作のアプリケーションなど Atmark-Dist には含まれないファイルを追加する方法について説明します。

自作アプリケーションは、Out-Of-Tree コンパイル[13]で作成し、~/sample/hello にあると仮定とします。

Atmark-Dist では、romfs ディレクトリにユーザーランドイメージに含めるファイルが置かれています。ここに自作アプリケーションを追加し、make image コマンドを実行することで、自作アプリケーションを含んだユーザーランドイメージを作成することができます。

[PC ~/atmark-dist]$ cp ~/sample/hello romfs/bin/
[PC ~/atmark-dist]$ make image
	:
	:
[PC ~/atmark-dist]$ ls images
linux.bin  linux.bin.gz  romfs.img  romfs.img.gz

図6.4 ユーザーランドイメージのカスタマイズ


作成されたユーザーランドイメージの /bin ディレクトリには、hello がインストールされています。

6.2. ブートローダーイメージのビルド

ここでは、Hermit-At ブートローダーのイメージをソースコードからビルドする手順について説明します。ソースコードのバージョンは、v2.0.0 以降を使用します。

6.2.1. ソースコードの準備

付属 DVD の source/bootloader にある hermit-at-[version]-source.tar.gz を作業ディレクトリに展開します。図6.5「Hermit-At ソースアーカイブの展開」のように作業してください。

[PC ~]$ tar zxvf hermit-at-[version]-source.tar.gz
[PC ~]$ ln -s hermit-at-[version] hermit-at
[PC ~]$ cd hermit-at
[PC ~/hermit-at]$

図6.5 Hermit-At ソースアーカイブの展開


6.2.2. ビルド

Hermit-At v2.0.0 以降では、製品ごとに標準の設定が defconfig として用意されています。出荷イメージと同じイメージをビルドするには、図6.6「Hermit-At ビルド例」のようにコマンドを実行してください。

[PC ~/hermit-at]$ make armadillo4x0_defconfig
[PC ~/hermit-at]$ make
    :
    :
[PC ~/hermit-at]$ ls src/target/armadillo4x0/*.bin
loader-armadillo4x0-[version].bin

図6.6 Hermit-At ビルド例


loader-armadillo4x0-[version].bin が作成されたブートローダーイメージです。

Hermit-At v2.0.0 以降では、Atmark-Dist と同様に make menuconfig でのコンフィギュレーションに対応しています。コンフィギュレーションを変更することにより、コマンドの追加/削除や、動作の変更を行うことができます。



[12] ここでは、CUI でのコンフィギュレーション方法を説明しています。Atmark Dist ではメニュー形式でのコンフィギュレーションも可能です。詳しくは「Atmark-Dist 開発者ガイド」をご参照ください。

[13] Out-Of-Tree コンパイルに関しては「Atmark-Dist 開発者ガイド」を参照してください