第8章 カーネル/ユーザーランドの配置

Armadillo-400 シリーズでは、標準ではカーネルおよびユーザーランドイメージはフラッシュメモリに配置されており、ブートローダーによってカーネルのブート前に RAM 上に展開されます。

Armadillo-400 シリーズでは、フラッシュメモリ以外の場所にもカーネルおよびユーザーランドを配置することができます。

本章では、イメージの配置方法と、イメージの配置場所を変えたときに必要となるブートオプションの設定方法について説明します。

8.1. TFTP サーバーに配置する

Hermit-At ブートローダーは、TFTP サーバー上に配置されたカーネルまたはユーザーランドのイメージを取得し RAM 上に展開したあと起動する、tftpboot 機能を有しています。

tftpboot 機能を使用すると、フラッシュメモリにイメージを書くことなく起動できるため、開発の初期段階などイメージの更新が頻繁に行われる際に、効率よく作業することができます。

8.1.1. ファイルの配置

TFTP サーバーのルートディレクトリに、カーネルイメージとユーザーランドイメージを配置してください。

[ティップ]

ATDE5は、標準状態で TFTP サーバー (atftpd) が動作しています。/var/lib/tftpboot ディレクトリにファイルを置くことで、TFTP によるアクセスが可能になります。

8.1.2. ブートオプション

ターゲットとなる Armadillo のジャンパを適切に設定し、保守モードで起動してください。

作業用 PC のシリアル通信ソフトウェアを使用して、コマンド[16]を入力します。

hermit> setbootdevice tftp [Armadillo IP adress] [tftp server IP adress]
        --kernel=kernel_image_file_name --userland=userland_image_file_name

図8.1 tftpboot コマンド


カーネルとユーザーランドのイメージは、どちらか一方だけ、もしくは両方指定できます。

TFTP サーバーの IP アドレスが 192.168.10.1、Armadillo の IP アドレスが 192.168.10.10で、カーネルイメージのファイル名が linux.bin.gz、ユーザーランドのイメージのファイル名が romfs.img.gz の場合、以下のようになります[17]

hermit> setbootdevice tftp 192.168.10.10 192.168.10.1
        --kernel=linux.bin.gz --userland=romfs.img.gz

図8.2 tftpboot コマンド例


setbootdevice コマンドでブートデバイスを TFTP サーバーに設定した場合、設定は保存され、起動時に毎回カーネルもしくはユーザーランドイメージを TFTP サーバーから取得するようになります。

8.2. ストレージに配置する

Armadillo-400 シリーズでは、カーネルイメージは microSD/SD に、ユーザーランドのルートファイルシステムは microSD/SD または USB メモリにも配置することができます。

ここでは、例として microSD/SD にカーネルイメージとルートファイルシステム両方を配置する手順を説明します。

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

8.2.1. パーティション作成

最初に、microSD/SD に1つのプライマリパーティションを作成します。

microSD/SD をスロットに挿入し[18]図8.3「パーティション作成手順」のようにしてパーティションを構成してください。

[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
Syncing disks.

[armadillo ~]#

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


1

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

2

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

3

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

4

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

5

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

[ティップ]

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

8.2.2. ファイルシステムの作成

次に、図8.4「ファイルシステム作成手順」のようにして、EXT3 ファイルシステムでフォーマットします。

[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.

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


8.2.3. カーネルイメージの配置

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

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

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

製品URL
Armadillo-420http://download.atmark-techno.com/armadillo-420/image/linux-a400-[version].bin.gz

以下に Armadillo-420 での配置例を示します。

[armadillo ~]# mount /dev/mmcblk0p1 /mnt/
[armadillo ~]# mkdir /mnt/boot
[armadillo ~]# cd /mnt/boot
[armadillo /mnt/boot]# wget http://download.atmark-techno.com/armadillo-420/image/linux-a400-[version].bin.gz
[armadillo /mnt/boot]# mv linux-a400-[version].bin.gz /mnt/boot/linux.bin.gz
[armadillo /mnt/boot]# cd
[armadillo ~]# umount /mnt

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


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

ここでは、microSD/SD にルートファイルシステムを構築する手順について説明します。

ルートファイルシステムは、Debian GNU/Linux もしくは Atmark-Dist で作成したルートファイルシステムを使用できます。

8.2.4.1. Debian GNU/Linuxのルートファイルシステムを構築する

Debian GNU/Linuxルートファイルシステムアーカイブから、ルートファイルシステムを構築する手順を次に示します。

Debian GNU/Linuxルートファイルシステムアーカイブを準備しておきます。

表8.2 Debian GNU/Linuxルートファイルシステムアーカイブのダウンロード先URL

製品URL
Armadillo-420http://download.atmark-techno.com/armadillo-420/image/debian-wheezy-armel_a420_[version].tar.gz

[ATDE ~]$ ls
debian-wheezy-armel_a420_[version].tar.gz

ルートファイルシステムを一旦ATDEでマウントしたmicroSD/SDカードに構築します。

[ATDE ~]$ mkdir sd  1
[ATDE ~]$ sudo mount -t ext3 /dev/sdb1 sd  2
[ATDE ~]$ sudo tar zxf debian-wheezy-armel_a420_[version].tar.gz -C sd  3
[ATDE ~]$ sudo umount sd  4
[ATDE ~]$ rmdir sd 5

1

SDカードをマウントするためのsd/ディレクトリを作成します。

2

sd/ディレクトリにSDカードをマウントします。

3

ルートファイルシステムアーカイブをsd/ディレクトリに展開します。

4

sd/ディレクトリにマウントしたブートディスクの第1パーティションをアンマウントします。

5

sd/ディレクトリを削除します。

[警告]

アンマウントが完了する前にSDカードを作業用PCから取り外すと、SDカードのデータが破損する場合があります。

8.2.4.2. Atmark-Dist イメージから構築する

Atmark-Dist で作成されるルートファイルシステムと同じルートファイルシステムを microSD/SD 上に構築する方法を説明します。Debian を構築する場合に比べ、容量の少ない microSD/SD へシステムを構築することができます。

ここで説明する例では、Atmark-Dist で作成されるルートファイルシステムの initrd イメージの取得に wget コマンドを使用します。wget コマンドで指定する URL は製品によって異なりますので、以下の表を参照し適宜読み替えてください。

表8.3 Atmark-Dist イメージのダウンロード先URL

製品URL
Armadillo-420http://download.atmark-techno.com/armadillo-420/image/romfs-a420-[version].img.gz

[armadillo ~]# mount /dev/mmcblk0p1 /mnt/
[armadillo ~]# mkdir tmp
[armadillo ~]# mkdir romfs
[armadillo ~]# mount -t ramfs ramfs tmp
[armadillo ~]# wget http://download.atmark-techno.com/armadillo-420/image/romfs-a420-[version].img.gz -P tmp
[armadillo ~]# gzip -d tmp/romfs-a420-[version].img.gz
[armadillo ~]# mount -o loop tmp/romfs-a420-[version].img romfs/
[armadillo ~]# (cd romfs/; tar cf - *) | (cd /mnt; tar xf -)
[armadillo ~]# sync
[armadillo ~]# umount romfs
[armadillo ~]# rmdir romfs
[armadillo ~]# umount tmp
[armadillo ~]# rmdir tmp
[armadillo ~]# umount /mnt

図8.6 Atmark-Dist イメージによるルートファイルシステムの構築例


Atmark-Dist イメージは/etc/fstabの設定がフラッシュメモリ用になっているため、/dev/ram0の行を書き換えて、microSD/SD用に変更する必要があります。

[armadillo ~]# mount /dev/mmcblk0p1 /mnt/
[armadillo ~]# vi /mnt/etc/fstab
/dev/mmcblk0p1          /               ext3    defaults                0 1
proc                    /proc           proc    defaults                0 0
udev                    /dev            tmpfs   mode=0755               0 0
run                     /run            tmpfs   mode=0755               0 0
sysfs                   /sys            sysfs   defaults                0 0
[armadillo ~]# umount /mnt

図8.7 fstabの変更例


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

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

ジャンパにより起動モードを保守モードに設定し、再起動してください。

microSD/SD のパーティション1に配置したカーネルイメージで起動するためには、図8.8「ブートデバイスの指定」を実行してください。

hermit> setbootdevice mmcblk0p1

図8.8 ブートデバイスの指定


ルートファイルシステムを microSD/SD のパーティション1にする場合は、図8.9「ルートファイルシステム指定例」を実行してください。

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

図8.9 ルートファイルシステム指定例


ブートデバイスとカーネルパラメーターの設定を元に戻す方法については、「ブートローダーのパラメータを出荷状態に戻す」を参照してください。



[16] 書面の都合上折り返して表記しています。実際にはコマンドは 1 行で入力します。

[17] 書面の都合上折り返して表記しています。実際にはコマンドは 1 行で入力します。

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