詳解Atmark Dist

Atmark Distは、uCLinux-distを元にAtmark Techno製品用に独自に改良したソースコードベースの開発ディストリビューションです。

[注記]uCLinux-dist

uClinux-distはuClinux.orgが配布する、ソースコードベースの開発ディストリビューションです。

uClinuxとは、MMUを持たないマイクロコンピューターでも動作するように作成されたLinuxです。uClinuxの成果は2.6系のLinuxカーネルに取り込まれています。

uClinux-distは当初uClinux用に作成されましたが、現在のuClinux-distはuClinux専用というわけではありません。設定時に既存のLinuxを選択することでi386やARM、PowerPCのようなMMUをもったCPUにも対応しています。

Atmark Distを使うと、Linuxカーネルとユーザーランドのルートファイルシステムを統合して開発することができます。コンフィギュレーションを変更することで、ルートファイルシステムに含むアプリケーションプログラムやライブラリ及びLinuxカーネルの機能を選択できます。また、コマンド一つでそれらをビルドし、フラッシュメモリに書き込める形式のイメージファイルを作成できます。さらに、ユーザー独自のアプリケーションプログラムを追加したり、コンフィギュレーションを保存しておくこともできるので、Armadilloを使った組み込みシステムの構築を容易にします。

Atmark Distを使ってイメージをビルドする基本的な手順は第1部の「開発の基本的な流れ」で述べました。本章では、Atmark Distの詳しい動作や、カスタマイズの方法について説明します。

7.1. ディレクトリ構成

この章では、Atmark Distのディレクトリ構成について説明します。各ディレクトリの概要を説明するとともに、各ディレクトリに関連した説明がなされている章を紹介します。ディレクトリ構成を理解することは、Atmark Distを用いて開発を行うにあたり、重要なポイントとなります。

Atmark Distのトップディレクトリは、以下のようになっています。

[ATDE ~]$ cd atmark-dist
[ATDE ~/atmark-dist]$ tree -L 1 -F
.
|-- COPYING
|-- Documentation/
|-- Makefile
|-- README
|-- SOURCE
|-- bin/
|-- config/
|-- freeswan/
|-- glibc/
|-- include/
|-- lib/
|-- linux-3.x -> ../linux-バージョン/
|-- tools/
|-- uClibc/
|-- user/
|-- vendors/
`-- version

      12 directories, 5 files

図7.1 Atmark Distのトップディレクトリ


7.1.1. トップレベルmakefile

Atmark Distは、makeコマンドによってすべての作業を行います。各ディレクトリにmakefileがあり、ソースコードのビルドなど、指定されたターゲットに対応する処理が記述されています。

atmark-dist/Makefileをトップレベルmakefileと呼び、他のディレクトリにあるmakefileとは区別することにします。トップレベルmakefileは、atmark-distのビルドをコントロールする大事なファイルです。ここで定義されているターゲットは「基本ターゲット」で詳しく説明します。

また、makeコマンドについては、「makeとmakefile」で説明しました。適宜参照してください。

7.1.2. configディレクトリ

configディレクトリには設定に必要なスクリプトやmakefileが収録されています。configディレクトリ内のいくつかのファイルについては、「プロダクトディレクトリのカスタマイズ」で説明します。

7.1.3. toolsディレクトリ

toolsディレクトリには、ビルドに必要ないくつかのツールが収録されています。このディレクトリに収録されているromfs-inst.shはプロダクトディレクトリのmakefileでよく使います。「プロダクトディレクトリのカスタマイズ」で、詳しく説明します。

7.1.4. Cライブラリディレクトリ

glibc(GNU C library)とuClibcディレクトリには、Atmark Distで選択可能なCライブラリのソースコードが収録されています。通常は、開発環境ATDEにインストールされたビルド済みのCライブラリを使用しますので、これらのディレクトリにあるソースコードは使用されません。

7.1.5. userディレクトリ

このディレクトリにはユーザーランドアプリケーションプログラムのソースコードが収録されています。多くのアプリケーションは、GNU/Linux用のアプリケーションをAtmark Distでも使用できるように変更したものですが、Atmark Dist専用に開発されたものも含まれます。

7.1.6. vendorsディレクトリ

vendorsディレクトリは以下のようになっています。

[ATDE ~/atmark-dist]$ tree -L 1 -F vendors/
vendors/
|-- 3com/
|-- ADI/
|-- Akizuki/
|-- Apple/
|-- Arcturus/
|-- Arnewsh/
|-- AtmarkTechno/
|-- Atmel/
(中略)
|-- Xilinx/
|-- config/
`-- senTec/

図7.2 vendorsディレクトリ


vendorsディレクトリの中には、ベンダー名のディレクトリがたくさん入っています。AtmarkTechnoディレクトリもそのうちのひとつです。

ベンダー名のディレクトリの中には、各製品用のサブディレクトリが複数入っています。この製品用のディレクトリをプロダクトディレクトリと呼びます。プロダクトディレクトリには、個々の製品用のイメージをビルドするためのさまざまなファイルが入っています。プロダクトディレクトリについては、「プロダクトディレクトリのカスタマイズ」を参照してください。

vendors/AtmarkTechnoディレクトリ内にはArmadilloをはじめとしたAtmark Distに対応したAtmark Techno社製品用のプロダクトディレクトリがあります。

[ATDE ~/atmark-dist]$ tree -L 1 -F vendors/AtmarkTechno/
vendors/AtmarkTechno/
├── Armadillo-210.Base/
├── Armadillo-210.Common/
├── Armadillo-210.Recover/
├── Armadillo-220.Base/
├── Armadillo-220.Recover/
├── Armadillo-230.Base/
├── Armadillo-230.Recover/
├── Armadillo-240.Base/
├── Armadillo-240.Recover/
├── Armadillo-2x0.Common/
├── Armadillo-300/
├── Armadillo-420/
├── Armadillo-420.WLAN-AWL12/
├── Armadillo-420.WLAN-AWL13/
├── Armadillo-440/
├── Armadillo-460/
├── Armadillo-4x0.Common/
├── Armadillo-500/
├── Armadillo-500-FX.base/
├── Armadillo-500-FX.dev/
├── Armadillo-810/
├── Armadillo-840/
├── Armadillo-8x0.Common/
├── Armadillo-9/
├── Armadillo-9.Common/
├── Armadillo-9.PCMCIA/
├── Armadillo-Box-WS1/
├── Armadillo-IoTG-Std/
├── Armadillo-IoTG.Common/
├── Armadillo-WLAN.Common/
├── Common/
├── SUZAKU-V.Common/
├── 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/

41 directories, 0 files

図7.3 vendors/AtmarkTechnoディレクトリ


vendorsディレクトリには、ベンダー名のディレクトリの他にconfigディレクトリもあります。アーキテクチャごとのデフォルト設定がconfig.archという名前でそれぞれのディレクトリ内に保存されています。このconfig.archはプロダクトディレクトリのconfig.archから参照されています。詳しくは項8.1.「config.arch」を参照してください。

[ATDE ~/atmark-dist]$ tree -L 2 -F vendors/config/
vendors/config/
|-- arm/
|   `-- config.arch
|-- arm-vfp/
|   `-- config.arch
|-- armel/
|   `-- config.arch
|-- armnommu/
|   `-- config.arch
|-- common/
|   `-- config.arch
|-- config.languages
|-- h8300/
|   `-- config.arch
|-- host/
|   `-- config.arch
|-- i386/
|   `-- config.arch
|-- i960/
|   `-- config.arch
|-- m68knommu/
|   `-- config.arch
|-- microblaze/
|   `-- config.arch
|-- mips/
|   `-- config.arch
|-- powerpc/
|   `-- config.arch
`-- sh/
    `-- config.arch

図7.4 vendors/configディレクトリ


7.2. 基本ターゲット

Atmark Distでよくつかうターゲットをここで紹介します。

7.2.1. コンフィギュレーション設定用のターゲット

コンフィギュレーションを設定するためのターゲットには、テキストベースとメニューベースの二つ[50]が用意されています。表示方法が異なるだけで、両方共Atmark Distのコンフィギュレーションを設定するためのターゲットです。

7.2.1.1. テキストベースでのコンフィギュレーション設定(config)

configターゲットを指定すると、テキストベースでコンフィギュレーションを設定できます。標準イメージを作成するような簡単なコンフィギュレーションを選択するときに便利です。

第1部の「Atmark Distを使ったルートファイルシステムの作成」「ソースコードの取得」で説明したように、Atmark DistとLinuxカーネルのソースコードを取得して、それぞれシンボリックリンクを作成し、atmark-distディレクトリでmake configを実行すると、以下のように表示されます。

まず、ターゲットとなるボードのベンダー名を質問されます。ベンダー名は、vendorsディレクトリ以下にあるディレクトリ名で指定します。「AtmarkTechno」と入力してください。

[ATDE ~/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, Kend
inMicrel, LEOX, Mecel, Midas, Motorola, NEC, NetSilicon, Netburner, Nintendo, OPENcores, Promise,
SNEHA, SSV, SWARM, Samsung, SecureEdge, Signal, SnapGear, Soekris, Sony, StrawberryLinux, TI, Tele
IP, Triscend, Via, Weiss, Xilinx, senTec) [SnapGear] (NEW) AtmarkTechno

図7.5 make config: ベンダーの選択


次に、ボード名を質問されます。選択したベンダーのディレクトリにあるプロダクトディレクトリの名前で指定します。例として、Armadillo-420を入力します。独自のプロダクトディレクトリを追加している場合は、そのディレクトリ名を指定してください。

*
* 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-420, Armadillo-420.WLAN-AWL12,
Armadillo-420.WLAN-AWL13, Armadillo-440, Armadillo-460, Armadillo-500,
Armadillo-500-FX.base, Armadillo-500-FX.dev, Armadillo-810,
Armadillo-840, Armadillo-9, Armadillo-9.PCMCIA, Armadillo-Box-WS1,
Armadillo-IoTG-Std, 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-420

図7.6 make config: プロダクトの選択


続いて、ターゲットのアーキテクチャを指定します。通常は、「default」のままにします。Enterキーを入力してください。

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

図7.7 make config: アーキテクチャの選択


使用するCライブラリを選択します。 通常は「None」のままにしてください。「None」を選択すると、開発環境にインストールされているビルド済みのCライブラリを使用します。Enterキーを入力してください。

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

図7.8 make config: Cライブラリの選択


これまで選択してきたコンフィギュレーションの設定を標準にするかどうか質問されます。y(Yes)と入力してください。

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

図7.9 make config: コンフィギュレーションの設定を標準にする


標準のイメージと同じイメージを作成するには、最後の3つの質問はn(No)と答えてください。「Customize Kernel Settings」にy(Yes)と答えると、Linuxカーネルのコンフィギュレーションを変更することができます。また、「Customize Vendor/User Settings」にy(Yes)と答えると、ルートファイルシステムに含めるアプリケーションプログラムやライブラリを選択することができます。

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

図7.10 make config: コンフィギュレーション設定の終了


すべての質問に答え終わると、コンフィギュレーションが反映されます。

7.2.1.2. メニューベースでのコンフィギュレーション設定(menuconfig)

menuconfigターゲットを指定すると、メニュー画面を使ってコンフィギュレーションを設定することができます。

[ティップ]メニュー画面の描画

menuconfigターゲットを指定した場合のメニュー画面はNcurses(new curses、テキストベースのユーザーインターフェースを作成するためのライブラリ)を使って描画されます。このターゲットが指定されたときに画面などをコントロールするプログラムをビルドするため、Ncursesのライブラリとヘッダファイルが必要になります。ATDEでは、Ncurses用のパッケージがあらかじめインストールされているので必要ありませんが、自前で環境を用意した場合はインストールしてください。

make menucnfigを実行すると、図7.12「menuconfig: Main Menu画面」のような画面が表示されます。メニュー画面によるコンフィギュレーションの設定方法は、「コンフィギュレーションの設定」で詳しく説明します。

[ATDE ~/atmark-dist]$ make menuconfig

図7.11 メニュー画面によるコンフィギュレーション設定の開始


menuconfig: Main Menu画面

図7.12 menuconfig: Main Menu画面


7.2.2. クリーンターゲット(clean)

cleanターゲットはAtmark Dist内で作成された中間ファイル等を削除し、きれいにするためのターゲットです。Atmark Distには以下の2種類のcleanターゲットが用意されています。

表7.1 Atmark Distのcleanターゲット

ターゲット 内容

make clean

サブディレクトリをクリーンし、romfsディレクトリおよび、imagesディレクトリ内のファイルを削除します。

make distclean

すべての中間ファイルなどを削除して、Atmark Distを初期状態にします。現在のコンフィギュレーションも削除されます。


7.2.3. デフォルトターゲット(all)

allターゲットは、atmark-distのデフォルトターゲットです。makeコマンドをオプションなしで実行することで、このターゲットが実行されます。allターゲットでは、必要なソースコード(カーネル、ユーザーランドアプリケーション、ライブラリ)のビルドを行い、Armadilloに書き込むことができるイメージファイルを生成します。詳しくは「ソースコードのビルドとイメージファイルの作成」で説明します。

7.3. イメージファイル作成手順の全体像

Atmark Distでイメージファイルを作成する際の全体的な流れは、以下に示す手順になります。

Atmark Distでイメージファイルを作成する流れ

図7.13 Atmark Distでイメージファイルを作成する流れ


まず、atmark-distディレクトリでmake menuconfigを実行することで、コンフィギュレーションの設定を開始します。コンフィギュレーションの設定画面では、まず、ベンダーとプロダクトを選択します。続いて、設定初期化を行うか、カーネル又はユーザーランドのルートファイルシステムのカスタマイズを行うかを選択します。カスタマイズを行うことを選択した場合、それぞれのコンフィギュレーションを設定します。コンフィギュレーション設定画面を終了すると、設定が反映されます。

コンフィギュレーションを正しく設定したあとmakeコマンドを実行すると、イメージファイルの作成を開始します。コンフィギュレーションに従って、必要なソースコードのビルド、ルートファイルシステムの作成、イメージファイルの作成を自動でおこないます。

以降の章では、それぞれの手順を詳しく説明していきます。

7.4. コンフィギュレーションの設定

Atmark Distを使ってイメージファイルを作成する手順は、大きく以下の二つに分けられます。

  1. コンフィギュレーションの設定
  2. ソースコードのビルドとイメージファイルの作成

ここではその前半部分、コンフィギュレーションの設定方法について説明します。説明は、make menuconfigを使ったメニューベースのコンフィギュレーション設定画面を用いて行います。設定画面では、表7.2「menuconfigの操作方法」に示すキー操作で画面の操作を行います。

表7.2 menuconfigの操作方法

キー操作 動作

キー

メニューの選択

キー

動作の選択

スペースキー

オプションの選択

Enterキー

動作の決定


設定画面は、以下に示す階層構造になっています。

設定画面の階層

図7.14 設定画面の階層


以下、それぞれの設定について説明していきます。

7.4.1. ベンダー、プロダクトの選択

まず初めに、ベンダーとプロダクトを選択します。この作業は、他の設定の前に行う必要があります。

atmark-distディレクトリでmake menuconfigを実行すると、「Main Menu」画面が表示されます。「Main Menu」画面で「Vendor/Product Selection」を選択すると、「Vendor/Product Selection」画面へ移動します。

最初に、ベンダーを選択します。「Vendor/Product Selection」画面で「(SnapGear) Vendor」という行を選択すると、「Vendor」画面に移動します。AtmarkTechno社製品を使用する場合、「Vendor」画面で「AtmarkTechno」を選択してください。

Main Menu
  Vendor/Product Selection
    Vendor
      AtmarkTechno

図7.15 ベンダーとしてAtmarkTechnoを選択する


次に、プロダクトを選択します。「Vendor/Product Selection」画面の「(Armadillo-210.Base) AtmarkTechno Products」という行を選択すると、「AtmarkTechno Products」画面に移動します。「AtmarkTechno Products」画面では、使用するプロダクトを選択してください。独自プロダクト用のプロダクトディレクトリを追加していた場合、ここにディレクトリ名が表示されますので、それを選択してください。

Main Menu
  Vendor/Product Selection
    AtmarkTechno Products
      プロダクト名

図7.16 プロダクトを選択する


「Vendor/Product Selection」画面で「Exit」を選択すると、「Main Menu」画面に戻ります。そのまま「Exit」を選択して、「Do you wish to save your new kernel configuration?」画面で「Yes」を選択すると、選択したプロダクトの標準のコンフィギュレーションが適用されます。コンフィギュレーションを変更したい場合は、「ユーザーランドコンフィギュレーションの変更」「カーネルコンフィギュレーションの変更」を参照してください。

7.4.2. ユーザーランドコンフィギュレーションの変更

ユーザーランドのコンフィギュレーションを変更すると、ユーザーランドのルートファイルシステムにどのアプリケーションプログラムやライブラリを含めるか選択することができます。

ユーザーランドのコンフィギュレーションを変更するには、「Main Menu」画面で「Kernel/Library/Defaults Selection」を選択して「Kernel/Library/Defaults Selection」画面へ移動し、「Customize Vendor/User Settings」にチェックを入れ、Main Menuを終了してください。

Main Menu
  Kernel/Library/Defaults Selection
    [*] Customize Vendor/User Settings

図7.17 ユーザーランドコンフィギュレーションの変更


すると、続いて「Userland Configuration」画面が表示されます。

「Userland Configuration」画面のメニューは以下のような項目に分かれています。

表7.3 Userland Configurationメニュー一覧

セクション 説明

Vendor specific

ベンダー固有の設定を行います。ルートファイルシステムのサイズや、製品固有のアプリケーションを選択できます。

Fonts

ユーザーランドに組み込むフォントを選択できます。

Core Application

システムとして動作するために必要な基本的なアプリケーションが入っています。システムの初期化を行うinitやユーザー認証のloginなどがこのセクションで選択できます。

Library Configuration

アプリケーションが必要とするライブラリの選択ができます。

Flash Tools

フラッシュメモリに関係のあるアプリケーションが選択できます。netflashと呼ばれるネットワークアップデート用アプリケーションもここで選択できます。

Filesystem Applications

ファイルシステムに関係のあるアプリケーションが選択できます。flatfsdはここで選択することができます。その他、mount、fdisk、ext2ファイルシステム、Sambaなどが含まれます。

Network Applications

ネットワークに関係のあるアプリケーションが選択できます。dhcpcd-new、ftpd、ifconfig、inetd、thttpdの他にもpppやワイヤレスネットワークのユーティリティなども含まれます。

Miscellaneous Applications

上記のカテゴリに属さないアプリケーションが収録されています。Unixの一般的なコマンド(cp、ls、rm等)やエディタ、オーディオ関連、スクリプト言語インタプリタなどが含まれます。

Busybox

BusyBoxのカスタマイズを行います。BusyBoxは多くのカスタマイズができるため、別セクションになっています。

Tinylogin

TinyloginはBusyBoxのように複数コマンドの機能をもつアプリケーションです。loginやpasswd、gettyなど認証に関係のある機能を提供します。多くのカスタマイズが可能なため別セクションになっています。

Qt

QtはC++言語で書かれたアプリケーションフレームワークです。Qtを使うことで、比較的簡単にクロスプラットフォームなGUIアプリケーションの開発ができるようになります。

X Window System

X Window SystemはLinuxで一般的に使われるGUI環境です。ここでは、KDriveというX Window Systemの亜種についての設定が行えます。

MicroWindows

MicroWindowsは組み込み機器をターゲットにしたグラフィカルウィンドウ環境です。LCDなどを持つ機器を開発する場合に使えます。

Games

ゲームです。説明はいらないですよね。

Miscellaneous Configuration

いろいろな設定がまとめられています。

Debug Builds

デバッグ用のオプションがまとめられています。開発中にアプリケーションのデバッグを行うときに選択します。


ルートファイルシステムに含めたいアプリケーションプログラムやライブラリにはチェックを入れ、含めたくないもののチェックを外してください。

選択が完了したら、「Userland Configuration」画面で「Exit」を選択してください。「Do you wish to save your new kernel configuration?」画面が再度表示されますので、設定を反映する場合には「Yes」を選択してください。

7.4.3. カーネルコンフィギュレーションの変更

カーネルのコンフィギュレーションを変更すると、カーネルに含めるデバイスドライバなどの機能を選択することができます。

カーネルのコンフィギュレーションを変更するには、「Main Menu」画面で「Kernel/Library/Defaults Selection」を選択して「Kernel/Library/Defaults Selection」画面へ移動し、「Customize Kernel Settings」にチェックを入れ[51]、Main Menuを終了してください。

Main Menu
  Kernel/Library/Defaults Selection
    [*] Customize Kernel Settings

図7.18 カーネルコンフィギュレーションを変更する


すると、続いて「Linux Kernel Configuration」画面が表示されます。

「Linux Kernel Configuration」画面のメニューは以下のような項目に別れています。

表7.4 Linux Kernel Configurationメニュー一覧

セクション 説明

Patch physical to virtual translations at runtime

仮想・物理のアドレス変換関数にパッチを適用します。物理メモリーのベースが16MB境界にあるARMアーキテクチャに対応するためのものです。

General setup

カーネル全般に渡る設定を行います。

Enable loadable module support

機能を有効にするかを含め、カーネルモジュールに関する設定を行います。

Enable the block layer

ブロックレイヤーを有効にするか選択します。ブロックレイヤーを無効にすると、ブロックデバイスを使用できなくなります。

System Type

システム依存の設定を行います。Armadillo-400シリーズのボードオプションの設定もここで行います。

Bus support

PCMCIA/PCカードバスを有効に関する設定を行います。

kernel Features

ハイレゾリューションサポートの設定など、カーネルの機能に関する設定を行います。

Boot options

ブート時の挙動に関する設定を行います。標準のカーネルオプションはここで設定できます。

CPU Power Management

CPUの電源管理に関する設定を行います。

Floating point emulation

浮動小数点演算をエミュレートする機能の設定を行います。ABIをEABIにする場合は必要ありません。

Userspace binary formats

カーネルがサポートするユーザーランドで動作するプログラムのフォーマットを選択します。

Power management options

電源管理機能に関する設定を行います。

Networking support

ネットワーク機能に関する設定を行います。

Device Drivers

カーネルで有効にするデバイスドライバを選択します。多くの場合設定する必要があるのは、このセクションでしょう。

File systems

カーネルがサポートするファイルシステムを選択します。

Kernel hacking

主にカーネルのデバッグ用の設定です。

Security options

セキュリティ機能に関する設定を行います。

Cryptographic API

カーネルで有効にする暗号APIを選択します。

Library routines

カーネルで有効にするライブラリルーチンを選択します。

Virtualization

仮想化機能に関する設定を行います。


カーネルに含めたい機能にはチェックを入れ、含めたくないもののチェックを外してください。

選択が完了したら、「Linux Kernel Configuration」画面で「Exit」を選択してください。「Do you wish to save your new kernel configuration?」画面が再度表示されますので、設定を反映する場合には「Yes」を選択してください。

7.4.4. コンフィギュレーションの変更を元に戻す

「ユーザーランドコンフィギュレーションの変更」「カーネルコンフィギュレーションの変更」で変更したコンフィギュレーションを元に戻すには、「Main Menu」画面で「Kernel/Library/Defaults Selection」を選択して「Kernel/Library/Defaults Selection」画面へ移動し、「Default all settings (lose changes)」にチェックを入れ、Main Menuを終了してください。

Main Menu
  Kernel/Library/Defaults Selection
    [*] Default all settings (lose changes)

図7.19 コンフィギュレーションの変更を元に戻す


ベンダーとプロダクトはそのままで、標準のコンフィギュレーションに戻ります。

7.4.5. コンフィギュレーションの保存

変更したコンフィギュレーションをプロダクトディレクトリに保存し、それを標準のコンフィギュレーションとすることができます。この機能は「Atmark Distがアップデートされた場合」で使用します。

コンフィギュレーションを保存するには、「Main Menu」画面で「Kernel/Library/Defaults Selection」を選択して「Kernel/Library/Defaults Selection」画面へ移動し、「Update Default Vendor Settings」にチェックを入れ、Main Menuを終了してください。

Main Menu
  Kernel/Library/Defaults Selection
    [*] Update Default Vendor Settings

図7.20 コンフィギュレーションを保存する


7.4.6. その他のコンフィギュレーション

「Kernel/Library/Defaults Selection」画面では、開発環境とCライブラリを選択することもできます。これらは、通常変更する必要はありませんので、標準の設定を使用してください。

「Kernel/Library/Defaults Selection」画面で「Cross-dev」を選択すると、開発環境を選択できます。開発環境を変更することで、異なるABIやアーキテクチャ用のバイナリを生成することができます。

Main Menu
  Kernel/Library/Defaults Selection
    Cross-dev

図7.21 開発環境の選択


選択できる開発環境は、プロダクトごとに決まっています。開発環境としてArmadilloで選択できる項目は以下の通りです。

表7.5 開発環境

項目 内容

default

プロダクト毎の標準設定を使用

arm-vfp

OABIでVFP[a]用命令を使用したバイナリを生成

arm

OABIのバイナリを生成

armel

EABIのバイナリを生成

[a] 浮動小数点演算ユニットの一つ。Atmark Techno社製品では、Armadillo-500のみがVFPを使用可能です。


「Kernel/Library/Defaults Selection」画面で「Libc Version」を選択すると、どのCライブラリを使用するか指定できます。以下の4つが選択対象です。

  • None
  • glibc
  • uC-libc
  • uClibc

「None」を選択すると、開発環境にインストールされているCライブラリを使用します。それ以外を選択すると、Atmark Distに含まれているソースコードをビルドして使用します。通常は、「None」を選択してください。

7.5. ソースコードのビルドとイメージファイルの作成

本章では、前章で設定したコンフィギュレーションに従って、ソースコードをビルドしイメージファイルを作成する手順について説明します。

ソースコードをビルドしイメージファイルを作成することを、「Atmark Distをビルドする」と表現することにします。

7.5.1. ビルドの実行

Atmark Distをビルドすると言っても、すべてをビルドシステムが行ってくれるため、ユーザーはmakeコマンドを実行するだけです。

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

図7.22 Atmark Distのビルド


ビルドが正常に完了すると、imagesディレクトリにイメージファイルが作成されます。linux.binがカーネルの、romfs.imgがユーザーランドのイメージファイルです。gzで終わるファイルが、それぞれを圧縮したものです。通常は、圧縮されたイメージファイルをArmadilloに書き込みます。

7.5.2. 詳細なビルドの流れ

デフォルト(all)ターゲットのビルドを行うと、イメージファイルが作成されますが、この間にたくさんのターゲットが実行されています。Atmark Distでは、すべてを一度にビルドするのではなく、対象を指定してそれだけをビルドすることもできます。修正を行った部分だけをビルドしなおすといったことができるので、ビルド時間を大幅に短縮できます。

デフォルトターゲットのルールは、トップレベルmakefileに以下のように記載されています。

ifeq (.config,$(wildcard .config))
include .config

all: tools subdirs preromfs romfs modules modules_install image
else
all: config_error
endif

図7.23 デフォルトターゲットのルール


デフォルトターゲットを指定してビルドすると tools、subdirs、preromfs、romfs、modules、modules_install、imageの順にビルドが行われるのが分かります。この流れに沿って、各ターゲットで行われている処理を説明します。

7.5.2.1. toolsターゲット

まず最初にビルドシステムとして動作するために必要なツールを作成します。多くはスクリプト言語で書かれているためビルドは必要ありませんが、中にはC で書かれたものもあります。

7.5.2.2. preromfsターゲット

romfs を処理する前にやっておかなければならない処理をするためのターゲット。現在は、romfs/ を削除することだけが記述されています。これがないと、古い romfs/ の情報が残ってしまいます。all のように全部ビルドし直すときは削除する方が無難です。

他のターゲットから依存されていないので、romfs/ にファイルを入れてmake images とし、手で入れたファイルが入った romfs.img.gz を作成しても影響はありません。

7.5.2.3. subdirsターゲット

subdirsターゲットのルールは、トップレベルmakefileに以下のように記述されています。

VENDDIR = $(ROOTDIR)/vendors/$(CONFIG_VENDOR)/$(CONFIG_PRODUCT)/.
DIRS    = include lib include user
:
:
subdirs: linux
        for dir in $(DIRS) ; do [ ! -d $$dir ] || $(MAKEARCH_KERNEL) -C $$dir || exit 1 ; don
        $(MAKEARCH_KERNEL) -C $(VENDDIR)

図7.24 subdirsターゲットのルール


subdirsターゲットはlinuxターゲットに依存しているため、まずlinuxターゲットのルールが適用されます。linuxターゲットでは、Linxuカーネルのビルドを行います。

subdirsターゲットのルールでは、libincludeuserVENDDIR(プロダクトディレクトリ)の各ディレクトリを順にビルドします。

libディレクトリは、ユーザーランドのライブラリを収録したディレクトリです。uClibcとglibcはlibディレクトリに入っていませんが、コンフィグ時にlibディレクトリ内にシンボリックリンクを生成するようになっています。

includeディレクトリは、インクルードファイルを収めたディレクトリです。allターゲットのルールが適用されると、ビルドしたライブラリのインクルードファイルへのシンボリックリンクを作成します。

userディレクトリは、ユーザーランドのアプリケーションプログラムを集めたディレクトリです。userディレクトリには専用のMakefileが用意されており、トップレベルmakefileはそちらに制御を任せるようになっています。

最後に、プロダクトディレクトリのビルドが行われます。

7.5.2.4. romfsターゲット

romfsターゲットでは、各ディレクトリに対してromfsターゲットを再帰的に呼びだします。多くの場合、romfs-inst.shを使って、必要なファイルをatmark-dist/romfsディレクトリにインストールします。romfs-inst.shについては「romfsインストールツール(romfs-inst.sh)」で説明します。

romfsディレクトリ以下のディレクトリ構成は、ターゲットシステム上で見えるディレクトリ構成と同じ構成になっています。romfsディレクトリをルートディレクトリとして、その下にbindevetcなどのディレクトリが配置されます。

ディレクトリ名にromfsという名前が使われているのは、Atmark Distの元となったuClinux-distが対象としていた組み込みシステムでは、romfsファイルシステムが使われることが多かったためです。しかし、romfsディレクトリ自体は、romfsに依存しているわけではありません。Armadillo-400シリーズでは、ユーザーランドのルートファイルシステムはext2です。

各ディレクトリのromfsターゲットの処理が完了した後、もし、ベンダーディレクトリのatmark-dist/Common/toolsディレクトリにlib-inst.shとauto-strip.shがあり、それらを使用するように設定されていた場合、以下の処理が行われます。

lib-inst.shを使用して、romfsディレクトリにある実行ファイルが使用する共有ライブラリをromfsディレクトリにインストールします。開発環境としてarmelを選択していた場合、ATDE5では/usr/arm-linux-gnueabi/libディレクトリ以下にあるARM EABI用の共有ファイルを使用します。

[警告]注意: 自動でインストールされないライブラリ

動的ロードされるライブラリは、lib-inst.shでは検出できないため、romfsディレクトリにインストールされません。プログラム中でライブラリを動的ロードしている場合は、使用するライブラリをromfs-inst.shを使うなどして明示的にromfsディレクトリにインストールする必要があります。

続いて、auto-strip.shを使用して、romfsディレクトリにある実行ファイルに対して、stripコマンドを適用します。stripコマンドはオブジェクトファイルの不要なシンボルを削除し、ファイルサイズを小さくします。

7.5.2.5. modulesターゲット

Linuxカーネルでは、ドライバーなどをカーネルモジュールとしてLinuxカーネルから分離した形で作成することができるようになっています。modulesターゲットでは、Linuxのビルドシステムにmodulesをmakeターゲットとして渡し、カーネルモジュールをビルドします。

7.5.2.6. modules_installターゲット

modules_installターゲットでは、Linuxビルドシステムで作成されたカーネルモジュールをromfsにインストールします。カーネルモジュールはromfs/lib/modulesディレクトリに置かれます。

7.5.2.7. imageターゲット

imageターゲットは、イメージファイルを作成するためのターゲットです。トップレベルmakefileでは、単にプロダクトディレクトリにあるMakefileのimageターゲットを呼ぶだけになっているので、実際の処理はそちらに書かなければなりません。

通常、以下の処理を記述します。

  1. Linuxカーネルのイメージファイルを生成。
  2. romfsディレクトリからユーザーランドのルートファイルシステムのイメージファイルを生成。
  3. NetFlash[52]用にチェックサムなどを作成し、イメージファイルに添付する。

イメージファイルは、imagesディレクトリに作成されます。

7.5.2.8. 指定可能なターゲットのまとめ

ビルド対象を特定するために指定可能なターゲットを以下にまとめます。

  1. linux: Linuxカーネルをビルドします
  2. lib: ライブラリをビルドします
  3. user: userディレクトリのアプリケーションプログラムをビルドします
  4. romfs: romfsディレクトリにファイルをインストールします
  5. modules: Linuxカーネルモジュールをビルドします
  6. modules_install: Linuxカーネルモジュールをromfsディレクトリにインストールします
  7. image: イメージファイルを作成します

7.5.3. romfsインストールツール(romfs-inst.sh)

romfs-inst.shは、romfsディレクトリへのファイルのインストールを簡単にするスクリプトです。このスクリプトは、atmark-dist/toolsディレクトリにあります。

romfs-inst.shのパスは、トップレベルmakefileでROMFSINSTという変数に代入されています。そのため、プロダクトディレクトリをはじめとする各ディレクトリのmakefileでは、romfs-inst.shがどこにあるかを気にせず、ROMFSINSTという変数で使用できます。

7.5.3.1. 概要

romfs-inst.shは、romfsディレクトリを指定する環境変数ROMFSDIRが設定されていない場合、簡単なhelpを出力します。

[ATDE ~/atmark-dist]$ tools/romfs-inst.sh
ROMFSDIR is not set
tools/romfs-inst.sh: [options] [src] dst
    -v          : output actions performed.
    -e env-var  : only take action if env-var is set to "y".
    -o option   : only take action if option is set to "y".
    -p perms    : chmod style permissions for dst.
    -a text     : append text to dst.
        -A pattern  : only append text if pattern doesn't exist in file
    -l link     : dst is a link to 'link'.
    -s sym-link : dst is a sym-link to 'sym-link'.

    if "src" is not provided,  basename is run on dst to determine the
    source in the current directory.

        multiple -e and -o options are ANDed together.  To achieve an OR affect
        use a single -e/-o with 1 or more y/n/"" chars in the condition.

        if src is a directory,  everything in it is copied recursively to dst
        with special files removed (currently CVS dirs).

図7.25 romfs-inst.shのヘルプ


romfs-inst.shのコマンド構文は以下のとおりです。

romfs-inst.sh [options] [src] <dst>

図7.26 romfs-inst.shの構文


optionssrcは省略可能です。もし、srcが指定されなかった場合、basenameコマンドがdstに適用され、戻り値をsrcとして使用します。

optionsが指定されなかった場合、romfs-inst.shは、現在のディレクトリ[53]srcに指定された値と名前が一致するファイルがあった場合、そのファイルをromfsディレクトリにコピーします。もし、srcと名前が一致するディレクトリがあった場合、そのディレクトリ以下のすべてのファイルとディレクトリをコピーします。ただし、CVSディレクトリはコピーされません。

optionsを指定することで、単純なコピー以外の処理をさせることができます。optionsには、以下のものが指定できます。

表7.6 romfs-inst.shのオプション

オプション 内容

-v

実際に実行した内容を出力

-e env-var

env-varがyのときだけ、指定されたアクションを実行

-o option

optionがyのときだけ、指定されたアクションを実行

-p perms

chmod方式でdstのパーミッションを指定

-a text [-A pattern]

textdstに追加。-A patternが指定されているときは、patterndstに含まれていない場合にtextを追加

-l link

dstで指定された名前で、linkへのハードリンクを作成

-s sym-link

dstで指定された名前で、sym-linkへのシンボリックリンクを作成


7.5.3.2. ファイルのコピー

単純にファイルをコピーする場合は、romfsターゲットを以下のようにmakefileに記述します。

romfs:
        $(ROMFSINST) src.txt /etc/dst.txt

図7.27 ファイルをコピーするルール


これは、makefileがあるディレクトリにあるsrc.txtromfsディレクトリ以下の/etc/dst.txtにインストールすることを意味しています。もし、romfsディレクトリがatmark-dist/romfsであれば、atmark-dist/romfs/etc/dst.txtというファイルができあがります。

src.txtの名前を変更してdst.txtとしておくことで、以下のように簡単に記述することができます。

romfs:
        $(ROMFSINST) /etc/dst.txt

図7.28 ファイルをコピーするルール(srcを省略)


srcが省略された場合、romfs-inst.shはdstbasenameコマンドを適用して、srcの値とします。

/etc/dst.txtbasenameコマンドを適用するとdst.txtとなるので、上記のルールは以下と同じ意味を持ちます。

romfs:
        $(ROMFSINST) dst.txt /etc/dst.txt

7.5.3.3. ディレクトリのコピー

多くのファイルをコピーしたい場合は、ディレクトリごとコピーすると簡単です。たとえば、ターゲットの/etcディレクトリに多くの設定ファイルをコピーする場合などです。

makefileがあるディレクトリにetcという名前でディレクトリを作成し、必要なファイルを置きます。そしてmakefileに以下のように記述します。

romfs:
        $(ROMFSINST) /etc

図7.29 ディレクトリをコピーするルール


この例でもsrcが省略されているので、romfs-inst.shはdstbasenameコマンドを適用します。/etcbasenameコマンドを適用するとetcとなるので、romfs-inst.shはmakefileがあるディレクトリ内のetcというファイルまたはディレクトリを探します。そして今回のようにディレクトリの場合、romfs-inst.shはディレクトリ内にあるファイルとディレクトリをすべてインストールしてくれます。

もちろん、別の名前のディレクトリとしてでインストールすることも可能です。

romfs:
        $(ROMFSINST) etc /var

図7.30 ディレクトリをコピーするルール(ディレクトリ名を指定する)


このコマンドでは、makefileがあるディレクトリ内のetcというディレクトリをatmark-dist/romfs/varにコピーします。

7.5.3.4. リンクの作成

romfs-inst.shを使うと、単純なファイルやディレクトリのコピーだけでなく、リンクを作成することもできます。

シンボリックリンクを作成する場合は、-sオプションを指定します。例として、ターゲットのルートディレクトリ直下のa.txtへのシンボリックリンクをb.txtという名前で作成する場合、以下のようになります。

romfs:
        $(ROMFSINST) /a.txt
        $(ROMFSINST) -s a.txt /b.txt

図7.31 シンボリックリンクを作成するルール


このルールを記述してmake romfsを実行すると、結果は以下のようになります。

[ATDE ~/atmark-dist]$ make romfs
    :
    :
[ATDE ~/atmark-dist]$ ls -l romfs
total 0
-rw-r--r--  1 guest guest 0 Sep 24 05:43 a.txt
lrwxrwxrwx  1 guest guest 5 Sep 24 05:43 b.txt -> a.txt

図7.32 シンボリックリンクの作成結果


ハードリンクを作成する場合は、-lオプションを指定します。

romfs:
        $(ROMFSINST) /a.txt
        $(ROMFSINST) -l a.txt /b.txt

図7.33 ハードリンクを作成するルール


しかし、このように指定した場合、romfsディレクトリ内にできたb.txtは、同じromfsディレクトリ内のa.txtではなく、makefileがあるディレクトリのa.txtへのハードリンクとなります。

ハードリンクの使用は混乱を招きますので、よほど開発環境の容量に困っていないかぎりお勧めしません。現在のAtmark Distでも、romfs内へのハードリンクはあまり使用していません。

7.5.3.5. ファイルへの追記

-aオプションを指定すると、ファイルへ文字列を追記できます。

構文は以下のようになります。

romfs-inst.sh -a "文字列" romfsディレクトリ内のファイル名

図7.34 -aオプション指定時のromfs-inst.shの構文


以下のように記述すると、atmark-dist/romfs/a.txtには、「Hello」と「World」が一行ずつ記述されます。

romfs:
        $(ROMFSINST) -a 'Hello' /a.txt
        $(ROMFSINST) -a 'World' /a.txt

図7.35 文字列を追記するルール


7.5.3.6. 条件実行

-eオプションを指定すると、条件が一致した場合だけインストールを実行することができます。

構文は以下のようになります。

romfs-inst.sh -e 変数名 実行するコマンド

図7.36 -eオプション指定時のromfs-inst.shの構文


変数名に指定した変数の値がyまたはYの場合だけ、コマンドを実行します。変数名 とは、CONFIG_で始まる環境変数がよく用いられます。CONFIG_で始まる環境変数には、対応するコンフィギュレーションが選択されたときにyが代入されますので、特定のコンフィギュレーションが選択されているときだけインストールしたい場合に使用されます。

7.6. プロダクトディレクトリのカスタマイズ

プロダクトディレクトリには、プロダクト専用のアプリケーションプログラム、設定ファイル、コンフィギュレーションファイルなどを置くことができます。Armadilloをベースに独自のプロダクトを開発する場合、使用するArmadiilo用のプロダクトディレクトリをコピーして、独自プロダクト用のプロダクトディレクトリとすることで、設定や管理が楽になります。

7.6.1. プロダクトディレクトリに含まれるファイル

プロダクトディレクトリには、最低限以下のファイルが必要です。

  1. Makefile
  2. config.arch
  3. config.vendor-3.x
  4. tools/config-linux.conf

Makefileには、デフォルト(all)、clean、distclean、romfs、imageターゲットを記述する必要があります。それぞれのターゲットでどのような処理を行うべきかは、「基本ターゲット」「詳細なビルドの流れ」を参照してください。

config.archファイルには、アーキテクチャに依存した設定を記述します。実際には、アーキテクチャごとにデフォルトの値がすでに用意されているため、上書きする設定だけを書けばよいようになっています。

config.vendor-3.xファイルには、ユーザーランドコンフィギュレーションの標準設定を記述します。現在のユーザーランドコンフィギュレーションは、atmark-dist/.configに保存されています。図7.20「コンフィギュレーションを保存する」の手順を実行すると、atmark-dist/.configファイルがプロダクトディレクトリのconfig.vendor-3.xファイルにコピーされます。

tools/config-linux.confには、Linuxカーネルの標準コンフィギュレーションファイルを記述します。最初にカーネルコンフィギュレーションを設定する際、このファイルで指定されたファイルに記述されたコンフィギュレーションを使用します。現在のカーネルコンフィギュレーションは、atmark-dist/linux-3.x/.configファイルに保存されています。図7.20「コンフィギュレーションを保存する」の手順を実行すると、atmark-dist/linux-3.x/.configファイルがプロダクトディレクトリのconfig.linux-3.xファイルにコピーされます。

[ティップ]サフィックス「-3.x」,「-2.6.x」のついたファイル

プロダクトディレクトリ内にあらかじめ用意されているファイルには、config.vendor-3.xのように「-3.x」や「-2.6.x」のサフィックスのついたファイルが存在します。サフィックス「-3.x」のついたファイルは linux-3.xのカーネルを使用したときのみ使用され、サフィックス「-2.6.x」のついたファイルはlinux-2.6.xのカーネルを使用したときのみ使用されます。

7.6.2. プロダクトディレクトリの作成

Atmark Distを使用して独自プロダクトを開発する場合、まずはベースとなるArmadillo用のプロダクトディレクトリをコピーして、独自プロダクト用のプロダクトディレクトリとしてください。基本的に、プロダクトに依存するすべての変更作業は、このディレクトリ内で行います。

ここではArmadillo-420をベースとしてmy-productという名前のプロダクトディレクトリを作成します。

[ATDE ~/atmark-dist]$ cp -a vendors/AtmarkTechno/Armadillo-420 vendors/AtmarkTechno/my-product

図7.37 プロダクトディレクトリの作成


7.6.3. アプリケーションプログラムの追加

Armadilloを使用した組み込みシステムを開発するにあたり、ほとんどの場合、独自のアプリケーションプログラムを作成することになるでしょう。ここでは、独自に作成したアプリケーションプログラムをAtmark Distに追加する方法を紹介します。

7.6.3.1. ディレクトリの準備

プロダクトディレクトリ以下に、アプリケーション用のディレクトリを作成します。ここではhelloとします。

[ATDE ~/atmark-dist]$ cd vendors/AtmarkTechno/my-product
[ATDE ~/atmark-dist/vendors/AtmarkTechno/my-product]$ mkdir hello

図7.38 アプリケーションプログラム用ディレクトリの追加


7.6.3.2. ソースファイルの追加

ソースコードを作成し、helloディレクトリに追加します。以下の内容を、helloディレクトリにhello.cという名前で追加してください。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        printf("Hello World!\n");

        return EXIT_SUCCESS;
}

図7.39 hello.c


7.6.3.3. Makefileの作成

hello.cをコンパイルするためのmakefileを作成し、helloディレクトリに追加します。以下の内容を、helloディレクトリにMakefileという名前で追加してください。

TARGET = hello

all: $(TARGET)

$(TARGET): hello.o
        $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

romfs:
        $(ROMFSINST) /bin/$(TARGET)

clean:
        $(RM) *~ *.o $(TARGET)

%.o: %.c
        $(CC) -c $(CFLAGS) -o $@ $<

図7.40 Makefile


7.6.3.4. プロダクトディレクトリのmakefileを修正

プログラムを追加した場合、プロダクトディレクトリのmakefileを変更する必要があります。

atmark-dist/vendors/AtmarkTechno/my-product/Makefileには、SUBDIR_yという変数が用意されています。この変数にアプリケーションプログラム用のディレクトリ名を追加してください。

:
:
:
SUBDIR_y =
SUBDIR_$(CONFIG_VENDOR_GPIOCTRL_GPIOCTRL)       += gpioctrl/
SUBDIR_$(CONFIG_VENDOR_LEDCTRL_LEDCTRL)         += ledctrl/
SUBDIR_$(CONFIG_VENDOR_SWMGR_SWMGR)             += swmgr/
SUBDIR_$(CONFIG_VENDOR_AWL12_AERIAL)            += awl12/
SUBDIR_$(CONFIG_VENDOR_AWL13_AWL13)             += awl13/
SUBDIR_y += hello/  1
:
:
:

図7.41 プロダクトディレクトリのmakefileにアプリケーションプログラム用のディレクトリを追加


1

作成したディレクトリをSUBDIR_yに追加します。

プロダクト専用のアプリケーションプログラムを追加する手順は以上です。makeコマンドを実行すると、実行ファイルhelloを含んだユーザーランドのイメージファイルが作成されます。

7.6.4. ファイルの追加、変更

プロダクトディレクトリには、アプリケーションプログラムのソースコードだけでなく、ルートファイルシステムに含めたい設定ファイルやデータファイルなども置くことができます。

Armadillo-420ディレクトリをベースにプロダクトディレクトリを作成した場合、プロダクトディレクトリ以下のetchomeusrディレクトリ内にあるファイルやディレクトリはromfsディレクトリにコピーされるようになっています。この時、ファイル名に付加された「-3.x」等のサフィックスは削除されます。[54]通常は、これらのディレクトリに設定ファイルやデータファイルを置くとよいでしょう。

etchomeusrディレクトリ以外の場所にファイルやディレクトリを追加したい場合、プロダクトディレクトリのmakefileを変更する必要があります。例として、varディレクトリ内のファイルとディレクトリをすべてromfsディレクトリにコピーした場合、atmark-dist/vendors/AtmarkTechno/my-product/Makefileを以下のように修正してください。

romfs:
(略)
        mkdir -p $(ROMFSDIR)
        for i in $(ROMFS_DIRS); do \
                [ -d $(ROMFSDIR)/$$i ] || mkdir -p $(ROMFSDIR)/$$i; \
        done
        $(ROMFSINST) -v /var    ←ここに追加

図7.42 varディレクトリの追加


7.7. ソフトウェアアップデートへの対応

LinuxカーネルやAtmark Distは機能追加やバグ修正などで随時アップデートがおこなわれます。この章では、プロダクトの開発中に新しいAtmark DistやLinuxカーネルがリリースされた場合の対応方法について説明します。

7.7.1. Atmark Distがアップデートされた場合

新しいAtmark Distがリリースされた場合、コンフィギュレーションを保存して、プロダクトディレクトリをまるごと新しいAtmark Distにコピーするだけで、コンフィギュレーションを引き継いだまま、移行することができます。

例として、新しいバージョンのAtmark Distをatmark-dist-new、古いバージョンのAtmarkDistをatmark-dist-oldというディレクトリでホームディレクトリの下に作成しているものとして説明します。また使用しているプロダクトは、ベンダー名をAtmarkTechno、プロダクト名をmy-productと設定しているものとします。

まず、make cleanを実行して、古いバージョンのAtmark Distの不要なファイルを削除します。

[ATDE ~/atmark-dist-old]$ make clean

図7.43 不要なファイルの削除


次に、古いバージョンのAtmark Distのコンフィギュレーションを保存します。「コンフィギュレーションの保存」の手順を実行してください。コンフィギュレーションファイルは、プロダクトディレクトリに保存されます。

以上で、古いバージョンのAtmark Distの準備は完了です。

新しいバージョンのAtmark Distのソースコードを取得して展開し、atmark-dist-newディレクトリとしてください。atmark-dist-newディレクトリには、通常どおり、linux-3.xという名前でLinuxカーネルのソースコードディレクトリのシンボリックリンクを張ります。

新しいバージョンのAtmark Distのvendors/AtmarkTechnoディレ クトリに古いバージョンで使用していたプロダクトディレクトリをコピーします。

[ATDE ~/atmark-dist-new]$ cp -a ~/atmark-dist-old/vendors/AtmarkTechno/my-product vendors/AtmarkTechno

図7.44 プロダクトディレクトリのコピー


新しいAtmark Distのatmark-dist-newディレクトリでmake menuconfigを実行し、古いバージョンからコピーしたプロダクトを選択します。

Main Menu
  Vendor/Product Selection
    (AtmarkTechno) Vendor
    (my-product) AtmarkTechno Products

図7.45 プロダクト設定


my-productを選択し、コンフィギュレーション設定画面を終了すると、Atmark Distは自動的にプロダクトディレクトリにあるコンフィギュレーションファイルを読み込みます。

デフォルト設定を読み込み中に新しいAtmark Distで追加されたコンフィギュレーションがあれば、それをどのように設定するか尋ねられます。設定を入力しEnterを押してください。デフォルトの設定を選択する場合は、何も入力せずEnterを押してください。以下に、追加された項目があった場合の設定例を示します。

mjpg-streamer (CONFIG_USER_MJPG_STREAMER_MJPG_STREAMER) [N/y/?] (NEW)  1

図7.46 新しく追加された項目の設定例


1

mjpg-streamerの設定をおこないます。[N/y/?]は入力できる値を示しています。「y」を入力してEnterを押すと、mjpg-streamerを有効に、「n」を入力してEnterを押すとmjpg-stremaerを無効に設定します。「?」を入力してEnterを押すとヘルプが表示されます。入力できる値が大文字になっている値はデフォルトの設定値であることを示しています。

新しいコンフィギュレーションがあった場合は、選択した設定を保存するために、再度「コンフィギュレーションの保存」を実行してください。

7.7.2. Linuxカーネルがアップデートされた場合

新しいLinuxカーネルがリリースされた場合、コンフィギュレーションを保存して、Linuxカーネルのソースコードディレクトリへのシンボリックリンクを差し替えるだけで、コンフィギュレーションを引き継いだまま、移行することができます。

この章では例として、新しいバージョンのLinuxカーネルをLinux-3.14-at-newとし、古いバージョンのLinuxカーネルをLinux-3.14-at-oldとして説明します。

まず、make cleanを実行して、Atmark Distの不要なファイルを削除します。

[ATDE ~/atmark-dist]$ make clean

図7.47 不要なファイルの削除


次に、古いLinuxカーネルのコンフィギュレーションを保存します。「コンフィギュレーションの保存」の手順を実行してください。コンフィギュレーションファイルは、プロダクトディレクトリに保存されます。

古いバージョンのLinuxカーネルのソースコードディレクトリへのシンボリックリンクを削除します

[ATDE ~/atmark-dist]$ rm linux-3.x

図7.48 古いバージョンのLinuxカーネルへのシンボリックリンクの削除


新しいバージョンのLinuxカーネルのソースコードディレクトリへのシンボリックリンクを作成します。

[ATDE ~/atmark-dist]$ ln -s ../linux-3.14-at-new linux-3.x

図7.49 新しいバージョンのLinuxカーネルへのシンボリックリンクの作成


make menuconfigを実行して標準のコンフィギュレーションを読み込みます。図7.19「コンフィギュレーションの変更を元に戻す」の手順を実行してください。

新しいカーネルで追加されたコンフィギュレーションがあれば、それをどのように設定するか尋ねられます。設定を入力しEnterを押してください。デフォルトの設定を選択する場合は、何も入力せずEnterを押してください。以下に、新しく追加された項目があった場合の設定例を示します。

Size of 1 qTD's buffer (USB_STATIC_IRAM_TD_SIZE) [2048] (NEW)  1

図7.50 新しく追加された項目の設定例


1

Size of 1 qTD's bufferの設定をおこないます。[2048]は入力できる値が数字であり、デフォルトの値が2048であることを示しています。値を入力せずEnterを押した場合はデフォルトの値になります。

新しいコンフィギュレーションがあった場合は、選択した設定を保存するために、再度「コンフィギュレーションの保存」を実行してください。



[50] GUIベースのコンフィギュレーションもありますが、あまり使いませんのでここでは紹介しません。

[51] 「Customize Vendor/User Settings」と「Customize Kernel Settings」は同時に選択することもできます。両方選択した場合、カーネルコンフィギュレーションの変更が完了した後に、「Userland Configuration」画面が表示されます。

[52] ネットワーク経由でファイルを取得し、フラッシュメモリに書き込むアプリケーションプログラム

[53] つまり、プロダクトディレクトリのmakefileで実行された場合は、プロダクトディレクトリ

[54] linux-3.xのカーネルを使用した場合、udevd-3.xudevdとしてromfsディレクトリにコピーされます。 また、カーネルと異るサフィックスのついたudevd-2.6.xはコピーされません。