第4章 ソフトウェアについて

この章では、Armadillo-300で使用されているソフトウェアについて説明します。

4.1. ソフトウェアの種類

Armadillo-300は4つの種類のソフトウェアで構成されています。

4.1.1. 1stブートローダ「IPL」

1stブートローダには、オリジナルのIPL(Initial Program Loader)が採用されています。IPLはShoehorn-At Hostと協調動作を行い、2ndブートローダの復旧を行うことができます。

[警告]

IPLは通常書き換えを行うことはできないようになっていますが、IPLが破壊された場合、JTAG経由でフラッシュメモリを復旧しなければなりません。フラッシュメモリの書き換え時には細心の注意を払ってください。

[警告]

JP1を「2-3」に設定した場合、Armadillo-300の起動時にCON7から数バイトのデータが出力されます。これは、Shoehorn-Atとネゴシエーションするために必要な機能です。 システム設計をされる場合は、本現象を考慮した上で設計してください。

4.1.2. 2ndブートローダ「Hermit-At」

2ndブートローダには、高機能ブートローダ/ダウンローダのHermit-Atが採用されています。Hermit-AtはHermit-At Hostと協調動作を行い、2ndブートローダ、Kernel又はUserlandの復旧を行うことができます。

Armadillo-300の2ndブートローダには、表4.1「2ndブートローダイメージの種類」に示される種類のフラッシュメモリのイメージファイルが用意されています。

表4.1 2ndブートローダイメージの種類

イメージファイル名PROFILE名シリアルインターフェース説明
loader-armadillo3x0.bin(none)CON7付加機能のない、小さなイメージです。
loader-armadillo3x0-ttyAM1.binttyAM1CON6ログが表示されるシリアルインターフェースがCON6に変更されます。
loader-armadillo3x0-notty.binnotty-ログを表示しません。
loader-armadillo3x0-eth.binethCON7

出荷時のイメージです。

LANを使用したイメージの書き換えが可能です。

loader-armadillo3x0-boot.binbootCON7Shoehorn-Atで使用します。
loader-armadillo3x0-boot-eth.binboot-ethCON7

Shoehorn-Atで使用します。

LANを使用したイメージの書き換えが可能です。


[ティップ]

PROFILE名は、ソースコードからイメージファイルをビルドするときに指定するオプションです。詳しくは、「ブートローダーイメージのビルド」を参照してください。

本書で単にブートローダと表記した場合、2ndブートローダ(Hermit-At)を意味します。

4.1.3. Kernel

Kernelには、Linux-2.6.12.5-at1が採用されています。これは、Linux-2.6.12.5をベースにボード固有のオリジナルデバイスドライバを追加したものとなっています。オリジナルデバイスドライバに関しては「オリジナルデバイスドライバ」を参照してください。

4.1.4. Userland

Userlandには、各種ユーティリティ、サーバアプリケーション又は、各種設定ファイル等をEXT2ファイルシステムイメージにしたものを採用しています。イメージファイルの作成にはAtmark-distを使用しています。

4.2. メモリマップ

表4.2 メモリマップ(フラッシュメモリ)

物理

アドレス

フラッシュメモリの内容サイズ説明

0x50000000

0x50001fff

ipl8KB

1stブートローダ領域

ipl-a300.bin」のイメージ

0x50002000

0x5000ffff

bootloader56KB

2ndブートローダ領域

loader-a3x0.bin」のイメージ

0x50010000

0x5020ffff

kernel2MB

カーネル領域「linux.bin(.gz)」のイメージ

(非圧縮イメージ、gz圧縮イメージに対応)

0x50210000

0x507effff

userland5.875MB

ユーザランド領域「romfs.img(.gz)」のイメージ

(非圧縮イメージ、gz圧縮イメージに対応)

0x507f0000

0x507fffff

config64KBコンフィグ領域

表4.3 メモリマップ(RAM)

論理

アドレス

RAMの内容

ファイル

システム

説明
0xc0018000kernel-

Linux起動前に

フラッシュメモリから展開・コピーされます

0xc0800000userlandext2fs

Linuxの起動前に

フラッシュメモリから展開・コピーされます


4.3. オリジナルデバイスドライバ

ここではArmadillo-300オリジナルデバイスドライバの仕様を説明します。Armadillo-300には次に示すオリジナルデバイスドライバがあります。

  • GPIO

  • LED

4.3.1. GPIOデバイスドライバ

Armadillo-300のGPIOポート(CON9)は、GPIOデバイスドライバで設定の変更、及び状態の取得を行うことができます。

GPIOポートに対応するデバイスノードの情報は、以下の通りです。

表4.4 GPIOノード

タイプmajorminornode(/dev/xxx)

キャラクタ

デバイス

10185gpio

システムコール(ioctl)を使用してアクセスすることにより、Armadillo-300のGPIOポートを操作することができます。

第1引数には、デバイスファイルのファイルディスクリプタを指定します。

第2引数には、GPIOを操作するためのコマンドを指定します。

表4.5 GPIO操作コマンド

コマンド説明第3引数のType
PARAM_SET第3引数で指定する内容でGPIOの状態を設定しますstruct gpio_param
PARAM_GET第3引数で指定する内容でGPIOの状態を取得しますstruct gpio_param

第3引数には、(カーネルソース)/include/asm-arm/arch-ns9750/armadillo3x0_gpio.hに定義されている構造体「struct gpio_param」を使用します。「struct gpio_param」は単方向リストになっているので、複数のGPIOを一度に制御する場合はnextメンバを使用してください。また、リストの最後のnextメンバには"0(NULL)"を指定してください。

struct gpio_param{
        struct gpio_param *next;
        unsigned long no;
        unsigned long mode;
        union{
                struct output_param o;
                struct input_param i;
        }data;
};

/* GPIOポート0をHigh出力にする場合 */
struct gpio_param param;
param.no = GPIO0;
param.mode = MODE_OUTPUT;
param.data.o.value = 1;
param.next = NULL;

ioctl(fd, PARAM_SET, &param);

図4.1 ioctlの発行例(GPIO)


GPIOデバイスドライバの詳細な使用方法については、サンプルのGPIO制御アプリケーション(atmark-dist/vendors/AtmarkTechno/Armadillo-300/gpioctrl)のソースコードを参考にしてください。

4.3.2. LEDデバイスドライバ

LEDデバイスドライバは、Armadillo-300のLED(D2)を点灯・消灯したり、状態を取得したりすることができます。

LEDに対応するデバイスノードのパラメータは、以下の通りです。

表4.6 LEDノード

タイプmajorminornode(/dev/xxx)

キャラクタ

デバイス

10215led

ioctlを使用してアクセスすることにより、Armadillo-300のLEDを操作することができます。

第1引数には、デバイスファイルのファイルディスクリプタを指定します。

第2引数には、LEDを操作するためのコマンドを指定します。

表4.7 LED操作コマンド

コマンド説明第3引数のType
A3X0_LED_SET第3引数で指定する構造体でLEDを設定しますstruct a3x0_led_param
A3X0_LED_GET第3引数で指定する構造体にLEDの状態を格納しますstruct a3x0_led_param

第3引数には、(カーネルソース)/include/asm-arm/arch-ns9750/armadillo3x0_led.hに定義されている構造体「struct a3x0_led_param」を使用します。bufメンバは、"1:点灯"、"0:消灯"が設定/取得されます。

struct a3x0_led_param {
  unsigned long buf;
};

/* LEDを点灯させる場合 */
struct a3x0_led_param param;
param.buf = LED_ON;

ioctl(fd, A3X0_LED_SET, &param);

図4.2 ioctlの発行例(LED)


LEDデバイスドライバの詳細な使用方法については、サンプルのLED制御アプリケーション(atmark-dist/vendors/AtmarkTechno/Armadillo-300/ledctrl)のソースコードを参考にしてください。