Armadillo上にDebian GNU/Linuxを構築する

この章では、本格的な開発に入る前にターゲット側となるArmadilloの準備をおこないます。開発効率を上げるために、ArmadilloにDebian GNU/Linuxをインストールします。

Armadilloの標準ルートファイルシステムは、Atmark Distで作成されたinitrdです。initrdを使う方法は実環境での運用には向いていますが、ルートファイルシステムの空き容量が少ない、変更を簡単に保存できないなどの問題があるので開発段階には適切ではありません。

Armadillo上にDebian GNU/Linuxを構築しておけば、開発に役立つ様々なツールをapt-getコマンド一発でインストールできたり、セルフコンパイルできるようになったりと、大変便利です。Debian GNU/Linuxのバージョンは、ATDE3と同じ5.0(コードネーム "lenny")を使用します。

4.1. 構築手順

Armadillo-400シリーズでは、カーネルイメージはmicroSDカードに、ユーザーランドのルートファイルシステムはmicroSDカードまたはUSBメモリにも配置することができます。ここでは、例としてmicroSDカードにカーネルイメージとルートファイルシステム両方を配置する手順を説明します。microSDカードは、1GB以上の容量のものが必要です。

microSDカードにルートファイルシステムを構築し、/bootディレクトリにカーネルイメージファイルを配置します。どのデバイスからカーネルイメージをロードするかは、Hermit-Atのブートオプションで指定します。また、ルートファイルシステムがどこにあるかは、カーネルパラメーターで指定します。これも、Hermit-Atで設定します。

ArmadilloにDebian GNU/Linuxをインストールする具体的な手順は、以下のようになります。

  1. microSDカードにパーティションを作成しEXT3ファイルシステムでフォーマットする。
  2. カーネルイメージファイルをmicroSDカードにコピーする。
  3. ルートファイルシステムをmicroSDカードにコピーする。
  4. Hermit-Atの設定を行う。
[警告]注意: Hermit-Atのバージョンについて

ここで紹介する手順を適用するには、Hermit-Atブートローダー v2.0.3以降が必要です。Hermit-Atブートローダー v2.0.2以前では、EXT3でフォーマットされた起動パーティションを認識できないため、この手順は適用できません。Hermit-Atブートローダー v2.0.2以前を使用しなければならない場合は、「Armadillo-400シリーズ ソフトウェアマニュアル v1.2.0」の記述を参照してください。

4.1.1. パーティションの作成とフォーマット

まず、microSDに1つのパーティションを作成し、EXT3ファイルシステムでフォーマットします。

Armadillo-420/440/460のmicroSDスロットにmicroSDカードを挿入[34] [35]した後、標準イメージで起動するとカードが認識され、以下のような表示がコンソール(シリアルインターフェース1)に表示されます。この表示は、microSDカードによって異なります。

mmc0: new high speed SD card at address b368
mmcblk0: mmc0:b368 SD    980992KiB
 mmcblk0: p1

図4.1 microSDカード挿入時のカーネルメッセージ


「mmcblk0: p1」という表示から、microSDカードに対応するブロックデバイスが/dev/mmcblk0に作成され、一つのパーティションがあることが分かります。microSDカードに二つのパーティションがある場合、「mmcblk0: p1」の次の行に「mmcblk0: p2」と表示されます。

カードが認識されたら、fdiskコマンドを使用してmicroSDカードのパーティションを構成しなおします。既存のパーティションをすべて削除して、一つのパーティションとします。

[armadillo ~]# fdisk /dev/mmcblk0
The number of cylinders for this disk is set to 124277.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): d   1
Selected partition 1

Command (m for help): n   2
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-124277, default 1):   3
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-124277, default 124277):   4
Using default value 124277
Command (m for help): w   5
The partition table has been altered!
Calling ioctl() to re-read partition table.
mmcblk0: p1
mmcblk0: p1
Syncing disks.
[armadillo ~]#

図4.2 パーティション作成手順


1

まずは、既存のパーティションを削除します。複数のパーティションがある場合は、すべて削除してください。

2

新しくプライマリパーティションを作成します。

3

開始シリンダにはデフォルト値(1)を使用するので、そのままEnterキーを押してください。

4

最終シリンダにもデフォルト値(124277)を使用するので、そのままEnterキーを押してください。

5

変更をmicroSDに書き込みます。

作成したパーティションに対応するブロックデバイスは、/dev/mmcblk0p1となります。

[注記]パーティション作成での注意点

使用するmicroSDカードによって仕様が異なるため、表示されるシリンダ数は手順通りとはならない場合があります。

続いて、作成したパーティションをEXT3ファイルシステムでフォーマットします。フォーマットにはmke2fsコマンドを使用します。-jオプションを指定することで、EXT3ファイルシステムとして指定したブロックデバイスをフォーマットします。また、tune2fsコマンドでファイルシステムのオプションを変更します。-i 0オプションを付けることで、時間経過によるファイルシステムのチェックを行わないようにします。これは、Armadilloのリアルタイムクロックが大きくずれていた際に、ファイルシステムチェックが行われるのを抑制するためです。

[armadillo ~]# mke2fs -j /dev/mmcblk0p1
mke2fs 1.25 (20-Sep-2001)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
497984 inodes, 994220 blocks
49711 blocks (5%) reserved for the super user
First data block=0
31 block groups
32768 blocks per group, 32768 fragments per group
16064 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 35 mounts or
180.00 days, whichever comes first. Use tune2fs -c or -i to override.
[armadillo ~]# tune2fs -i 0 /dev/mmcblk0p1
tune2fs 1.25 (20-Sep-2001)
Setting interval between check 0 seconds

図4.3 ファイルシステム作成手順


4.1.2. カーネルイメージファイルのコピー

microSDから起動する場合は、起動パーティションの/bootディレクトリにカーネルイメージを配置する必要があります。対応しているカーネルイメージファイルの形式は、非圧縮カーネルイメージ(Imagelinux.bin)または、圧縮イメージ(Image.gzlinux.bin.gz)のどちらかになります。

ここで説明する例では、カーネルイメージの取得にwgetコマンドを使用します。wgetコマンドで指定するURLは製品によって異なりますので、以下の表を参照し適宜読み替えてください。

表4.1 カーネルイメージのダウンロード先URL

製品 URL

Armadillo-420

http://download.atmark-techno.com/armadillo-420/image/linux-a400-[バージョン].bin.gz

Armadillo-440

http://download.atmark-techno.com/armadillo-440/image/linux-a400-[バージョン].bin.gz

Armadillo-460

http://download.atmark-techno.com/armadillo-460/image/linux-a460-[バージョン].bin.gz


以下にArmadillo-440での例を示します。

[armadillo ~]# mount /dev/mmcblk0p1 /mnt/
[armadillo ~]# mkdir /mnt/boot
[armadillo ~]# cd /mnt/boot
[armadillo /mnt/boot]# wget http://download.atmark-techno.com/armadillo-440/image/linux-a400-[バージョン].bin.gz
[armadillo /mnt/boot]# mv linux-a400-[バージョン].bin.gz /mnt/boot/linux.bin.gz
[armadillo /mnt/boot]# cd
[armadillo ~]# umount /mnt

図4.4 カーネルイメージの配置


4.1.3. ルートファイルシステムの構築

Armadillo-400シリーズ用に設定済みのDebian GNU/Linuxルートファイルシステムのアーカイブは、付属DVDのdebianディレクトリか、弊社ダウンロードサイトから取得できます。アーカイブをmicroSDカードに展開することでルートファイルシステムを構築することができます。

ここで説明する例では、アーカイブの取得にwgetコマンドを使用します。wgetコマンドで指定するURLは製品によって異なりますので、以下の表を参照し適宜読み替えてください。

表4.2 Debianアーカイブのダウンロード先URL

製品 URL

Armadillo-420/440/460 共通

http://download.atmark-techno.com/armadillo-4x0/debian/debian-lenny-armel-#.tgz[a]

http://download.atmark-techno.com/armadillo-4x0/debian/debian-lenny-armel-a4x0.tgz[b]

[a] 「#」の部分は1〜5まで

[b] 「a4x0」は置き換えを行わず、そのまま使用してください。


[armadillo ~]# mount /dev/mmcblk0p1 /mnt
[armadillo ~]# mkdir tmp
[armadillo ~]# mount -t ramfs ramfs tmp
[armadillo ~]# cd tmp
[armadillo ~/tmp]# for N in 1 2 3 4 5 a4x0; do
> wget http://download.atmark-techno.com/armadillo-4x0/debian/debian-lenny-armel-${N}.tgz;
> gzip -cd debian-lenny-armel-${N}.tgz | (cd /mnt; tar xf -);
> sync;
> rm -f debian-lenny-armel-${N}.tgz;
> done
[armadillo ~/tmp]# cd
[armadillo ~]# umount tmp
[armadillo ~]# rmdir tmp
[armadillo ~]# umount /mnt

図4.5 ルートファイルシステムの構築


4.1.4. ブートデバイスとカーネルパラメーターの設定

カーネルイメージをロードする場所は、Hermit-Atのブートデバイス設定で指定します。また、ユーザーランドの場所は、カーネルパラメーターで指定します。

Hermit-Atの設定は保守モードでおこないます。一度Armadilloの電源を切り、タクトスイッチ(SW1)を押しながら電源を投入し、Hermit-Atの保守モードで起動してください。

カーネルイメージをロードするデバイスの指定は、setbootdeviceコマンドを使用します。microSDカードのパーティション1に配置したカーネルイメージで起動するためには、以下のコマンドを実行してください。

hermit> setbootdevice mmcblk0p1

図4.6 ブートデバイスをmicroSDカードに指定する


カーネルパラメーターの指定は、setenvコマンドを使用します。ルートファイルシステムをmicroSDカードのパーティション1にする場合は、以下のコマンドを実行してください。

hermit> setenv console=ttymxc1 root=/dev/mmcblk0p1 noinitrd rootwait

図4.7 ルートファイルシステムをmicroSDカードに指定する


[ティップ]Hermit-Atの設定を元に戻す

Hermit-Atの設定を初期状態に戻す(カーネルイメージをロードするデバイスとルートファイルシステムの場所をフラッシュメモリにする)には、以下のコマンドを実行してください。

hermit> setbootdevice flash
hermit> clearenv

図4.8 Hermit-Atの設定を元に戻す


以上の設定をおこない、bootコマンドを実行するか再起動すると、microSDカード上に構築されたDebian GNU/Linuxで起動します。

4.2. Debian GNU/Linuxインストール後にまずすること

Armadilloにインストールした直後のDebian GNU/Linuxは、最小限の設定しかされていない状態です。この章では、最低限行わなければならない設定について説明します。

4.2.1. ログインと一般ユーザーの追加

インストール直後のDebian GNU/Linuxでは、特権ユーザーであるrootユーザーしかいません。そのため、ログインはrootユーザーで行います。パスワードなしでログインできます。

Debian GNU/Linux 5.0 debian ttymxc1

debian login: root
Linux debian 2.6.26-at10 #1 PREEMPT Thu Aug 19 16:17:48 JST 2010 armv5tejl

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
debian:~#

図4.9 Armadillo上のDebian GNU/Linuxへログインする


以降は、Armadillo上で動作するDebian GNU/Linuxのプロンプトとして、以下の表記を用います。

[darmadillo ~]#

図4.10 Armadillo上のDebian GNU/Linuxのプロンプト表記


一般ユーザーがいないと何かと不便ですので、まずは一般ユーザーを追加します。一般ユーザーの名前はguest、パスワードもguestとしましょう。

[darmadillo ~]# useradd -m guest
[darmadillo ~]# passwd guest
Enter new UNIX password: guest
Retype new UNIX password: guest
passwd: password updated successfully

図4.11 一般ユーザー(guest)の追加


あくまで開発用ですので、rootユーザーのパスワードは設定しません。

4.2.2. 時刻の設定

続いて、時刻の設定をおこないます。時刻を正しく設定しておかないと、apt-get installを実行する際にワーニングが大量に表示されるなど、色々な問題が発生します。

まずは、dpkg-reconfigure tzdataでタイムゾーンを設定します。テキストベースのメニュー画面が表示されますので、タイムゾーンをJSTに設定するには[Asia]-[Tokyo]を選択してください。

[darmadillo ~]# dpkg-reconfigure tzdata
Package configuration
 lqqqqqqqqqqqqqqqqqqqqqqqqqqu Configuring tzdata tqqqqqqqqqqqqqqqqqqqqqqqqqqqk
 x Please select the geographic area you live in. Subsequent configuration   x
 x questions will narrow this down by presenting a list of cities,           x
 x representing the time zones in which they are located.                    x
 x                                                                           x
 x Geographic area:                                                          x
 x                                                                           x
 x                               Australia                                   x
 x                               Arctic        a                             x
 x                               Asia                                        x
 x                               Atlantic      a                             x
 x                               Europe        a                             x
 x                               Indian        a                             x
 x                               Pacific       a                             x
 x                               SystemV       a                             x
 x                               Etc                                         x
 x                                                                           x
 x                                                                           x
 x                    <Ok>                        <Cancel>                   x
 x                                                                           x
 mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Package configuration
        lqqqqqqqqqqqqqqqqqqqqu Configuring tzdata tqqqqqqqqqqqqqqqqqqqqk
        x Please select the time zone corresponding to your location.  x
        x                                                              x
        x Time zone:                                                   x
        x                                                              x
        x                       Samarkand                              x
        x                       Seoul            a                     x
        x                       Shanghai         a                     x
        x                       Singapore        a                     x
        x                       Taipei           a                     x
        x                       Tashkent         a                     x
        x                       Tbilisi          a                     x
        x                       Tehran           a                     x
        x                       Tel_Aviv         a                     x
        x                       Thimphu          a                     x
        x                       Tokyo                                  x
        x                                                              x
        x                                                              x
        x               <Ok>                   <Cancel>                x
        x                                                              x
        mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj


Current default timezone: 'Asia/Tokyo'
Local time is now:      Wed Oct  6 06:54:23 JST 2010.
Universal Time is now:  Tue Oct  5 21:54:23 UTC 2010.

図4.12 タイムゾーンの設定


次に、システムクロックを設定します。この時点ではntpクライアントが使用できませんので、dateコマンドで手動設定します。リアルタイムクロックがArmadillo-420/440/460に接続されており、適切に設定されている場合、システムクロックは起動時に自動で設定されます。そのため、この手順は不要です。システムクロックが現在時刻と大きくずれている場合だけ実行してください。

[darmadillo ~]# date -s "2010/09/28 00:00:00"

図4.13 システムクロックを手動設定する


システムクロックを設定した後は、それをハードウェアクロック(リアルタイムクロック)にも反映させます。ハードウェアクロックの設定はhwclockコマンドを使用しますが、DebianGNU/Linuxではそれをラップしたhwclock.shスクリプトがあるので、それを使用します。

[darmadillo ~]# /etc/init.d/hwclock.sh restart

図4.14 システムクロックをハードウェアクロックに反映する


4.2.3. パッケージのアップデート

Debian GNU/Linuxでは、セキュリティアップデートやバグフィックスのためパッケージが随時更新されています。ArmadilloにインストールしたDebian GNU/Linuxのアーカイブは最新の状態ではありませんので、パッケージをアップデートする必要があります。

パッケージの管理には、apt-getコマンドを使用します。apt-get updateでローカルに持っているパッケージのリストを最新のものに更新し、apt-get upgradeで更新可能なパッケージをすべてインストールします。

[darmadillo ~]# apt-get update
[darmadillo ~]# apt-get upgrade

図4.15 Debianパッケージのアップデート


4.2.4. FTPサーバーのインストール

ATDEとArmadilloで簡単にファイルを送受信するための方法の1つとしてFTPで転送する方法があります。この章ではArmadillo上のDebian GNU/LinuxにFTPサーバーを構築する方法について説明します。

パッケージのインストールには、apt-get installを使用します。FTPサーバーのパッケージ名は、ftpdです。

[darmadillo ~]# apt-get install ftpd
[darmadillo ~]# /etc/init.d/openbsd-inetd start

図4.16 FTPサーバーのインストール


ftpdは、スーパーサーバー(inetd)を経由して起動されます。そのため、ftpdパッケージをインストールすると、openbsd-inetdパッケージも一緒にインストールされます。Armadillo上で動作するFTPサーバーに外部からアクセス可能にするには、inetdを起動しておく必要があります。なお、次回起動時からはinetdは自動起動されるように、インストールした時点で設定されています。

[darmadillo ~]# /etc/init.d/openbsd-inetd start
Starting internet superserver: inetd.

図4.17 inetdの起動


ATDE3などからFTPでArmadilloに接続する際、ユーザー名とパスワードを要求されます。ftpdが使用するユーザー名とパスワードは、一般ユーザーのものになります。そのため、ユーザー名guest、パスワードguestでアクセスすることができます。

[ATDE ~]$ lftp ArmadilloのIPアドレス -u guest
パスワード: guest

図4.18 lftpでArmadilloのFTPサーバーに接続


[ティップ]lftpの便利な使い方

lftpコマンドでは、-eオプションでFTPコマンドを指定することができます。何度も同じファイルをArmadilloに転送する必要がある場合、一行でコマンドを書いておき、シェルのヒストリー機能を活用することで何度も同じコマンドを入力せずに済みます。

以下のコマンド例では、guestユーザーでログインし、ファイルを送信しています。一度ファイルを削除しているのは、lftpでは同じファイル名のファイルがある場合、上書きしないため何度も同じコマンドを実行してもファイルが更新されないためです。また、パスワードをコマンドラインに書いてしまっています。コマンドの履歴は同じコンピューターを使用する別のユーザーが見ることができるので、通常、コマンドラインに直接パスワードを書くことは望ましくありません。コンピューターを共有している場合は気をつけてください。

[ATDE ~]$ lftp -u guest,guest ArmadilloのIPアドレス -e "rm ファイル名;put ファイル名;quit"

図4.19 lftpを使用してArmadilloにファイルを転送


4.2.5. Telnetサーバーのインストール

Armadillo上で動作するDebian GNU/LinuxにTelnetサーバーを動作させておくと、ATDEからネットワーク経由でArmadilloを操作できるようになります。シリアルインターフェースを端末として使用できない場合などに便利ですので、本章ではTelnetサーバーの構築方法について説明します。

Telnetサーバーのインストールは、いつものようにapt-get installを使用します。パッケージ名はtelnetdです。

[darmadillo ~]# apt-get install telnetd

図4.20 Telnetサーバーのインストール


telnetdもftpdと同様に、inetdを介して起動されます。そのため、inetdが起動していない場合は、起動する必要があります。図4.17「inetdの起動」を参照してください。

ATDE3などからArmadilloのTelnetサーバーにアクセスするには、telnetコマンドを使用します。FTPサーバーと同様に、一般ユーザーguestでログインすることができます。

[ATDE ~]$ telnet ArmadilloのIPアドレス
Trying ArmadilloのIPアドレス...
Connected to ArmadilloのIPアドレス.
Escape character is '^]'.
Debian GNU/Linux 5.0
debian login: guest
Password: guest

図4.21 telnetでArmadilloのTelnetサーバーに接続


4.3. セルフコンパイル用ツールチェインのインストール

複雑な依存関係を持ったソフトウェアなどでは、クロスコンパイルが難しい場合もあります。そのような時のために、Armadillo上にツールチェインをインストールしてセルフコンパイルできるようにする方法を紹介します。

build-essentialパッケージをインストールすると、開発に最低限必要なパッケージをインストールすることができます。

[darmadillo ~]# apt-get install build-essential

図4.22 ツールチェインのインストール


依存関係に基づいて、gcc、g++、binutils、libc6-dev、makeなどがインストールされます。その他のライブラリなどは、必要に応じてインストールしてください。これは、ATDE3上でセルフコンパイルする場合と、変わりありません。

高速なCPUを搭載した作業用PCでクロスコンパイルする場合と比べ、Armadillo上でセルフコンパイルすると格段に時間がかかります。しかし、クロスコンパイルがどうしても難しいという場合もあるので、最後の手段として、このような方法もあることを覚えておいてください。本書では、これ以降セルフコンパイルについては取り上げません。



[34] Armadillo-420/440のmicroSDスロットは、ロック式になっています。microSDカードの着脱方法に関しては「Armadillo-400シリーズハードウェアマニュアル」をご参照ください。

[35] Armadillo-460ではSDスロットです。microSDカードを使用する場合、microSD<⇒SD変換アダプタが必要です。