第10章 デバイスドライバ仕様

10.1. GPIOポート

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

表10.1 GPIOノード

タイプメジャー番号マイナー番号ノード名(/dev/xxx)
キャラクタデバイス10185gpio

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

第1引数には、デバイスファイルのファイルディスクリプタを指定します。第2引数には、GPIOを操作するためのコマンドを指定します。

表10.2 GPIO操作コマンド

コマンド説明第3引数のType
PARAM_SET第3引数で指定する内容でGPIOの状態を設定しますstruct gpio_param
PARAM_GET第3引数で指定する内容でGPIOの状態を取得しますstruct gpio_param
INTERRUPT_WAIT第3引数で指定する内容でGPIOの割込みが発生するまでWAITしますstruct wait_param

第3引数には、(カーネルソース)/include/asm-arm/arch-ep93xx/armadillo2x0_gpio.hに定義されている構造体「struct gpio_param」と「struct wait_param」を使用します。「struct gpio_param」は単方向リストになっているので、複数のGPIOを一度に制御する場合はnextメンバを使用してください。また、リストの最後のnextメンバには"0(NULL)"を指定してください。GPIOデバイスドライバの詳細な使用方法については、サンプルのGPIO制御アプリケーション(atmark-dist/vendors/AtmarkTechno/Armadillo-2x0.Common/gpiod)のソースコードを参考にしてください。

10.2. LED

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

表10.3 LEDノード

タイプメジャー番号マイナー番号ノード名(/dev/xxx)
キャラクタデバイス10215led

ioctlを使用してアクセスすることにより、Armadillo-200シリーズのLEDを直接操作することができます。

第1引数には、デバイスファイルのファイルディスクリプタを指定します。第2引数には、LEDを操作するためのコマンドを指定します。

表10.4 LED操作コマンド

コマンド説明第3引数のType
LED_RED_ONLED(赤)を点灯しますなし
LED_RED_OFFLED(赤)を消灯しますなし
LED_RED_STATUSLED(赤)の点灯状態を取得します状態を保存するバッファ(最小1バイト)
LED_RED_BLINKONLED(赤)を点滅を開始しますなし
LED_RED_BLINKOFFLED(赤)を点滅を停止しますなし
LED_RED_BLINKSTATUSLED(赤)の点滅状態を取得します状態を保存するバッファ(最小1バイト)
LED_GREEN_ONLED(緑)を点灯しますなし
LED_GREEN_OFFLED(緑)を消灯しますなし
LED_GREEN_STATUSLED(緑)の点灯状態を取得します状態を保存するバッファ(最小1バイト)
LED_GREEN_BLINKONLED(緑)を点滅を開始しますなし
LED_GREEN_BLINKOFFLED(緑)を点滅を停止しますなし
LED_GREEN_BLINKSTATUSLED(緑)の点滅状態を取得します状態を保存するバッファ(最小1バイト)

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

10.3. オンボードフラッシュメモリ/NANDフラッシュメモリ(オプション)

オンボードフラッシュメモリは、Memory Technology Device(MTD)としてリージョン単位で扱われます。オンボードフラッシュメモリのリージョンについては、 9章メモリマップについて を参照してください。また、オプション品のNANDフラッシュメモリ(受注生産品)についても、オンボードフラッシュメモリに続く形でリージョンで扱われます。各リージョンに対応するデバイスノードのパラメータは、以下の通りです。

表10.5 MTDノード

タイプ

メジャー

番号

マイナー

番号

ノード名

(/dev/xxx)

デバイス名

キャラクタ

デバイス

900mtd0bootloader
1mtdr0bootloader(read only)
2mtd1kernel
3mtdr1kernel(read only)
4mtd2userland
5mtdr2userland(read only)
6mtd3config
7mtdr3config(read only)
8mtd4NAND Flash(接続時のみ)
9mtdr4NAND Flash(接続時のみ/read only)

ブロック

デバイス

310mtdblock0bootloader
1mtdblock1kernel
2mtdblock2userland
3mtdblock3config
4mtdblock4NAND Flash(接続時のみ)

10.4. USBホスト

EP9307は、OHCI互換のUSBホスト機能を持っています。いくつかのデバイスについては初期状態のカーネルでドライバを有効化しており、接続するだけで使用できるようになっています。

10.4.1. USB Storage

USBメモリやディスクドライブ、メモリカードリーダなどをサポートします。Linuxからは一般的なSCSI機器と同様に認識され、/dev/sda(ブロックデバイス、メジャー番号:8、マイナー番号:0)や/dev/sda1(ブロックデバイス、メジャー番号:8、マイナー番号:1)などから扱うことができます。

10.4.2. USB Human Interface Device(HID)

USBキーボードやマウスなど、各種入力機器をサポートします。

10.5. VGA(Armadillo-240のみ)

VGA出力はフレームバッファドライバが用意されており、コンソール画面として使用することができます。初期状態ではSVGAサイズ(解像度:800x600)の24ビットカラー設定となっていますが、VGAサイズ(640x480)及びXGAサイズ(1024x768)や8/16ビットカラーにも対応しています。ここでは、この設定の変更方法について説明します。

[警告]

現在のソフトウェアでは、デバイスが提供する設定の全てに対応していません。また、Armadillo-240のVGA出力は、VESAなどの規格化されているタイミングを完全に満しているわけではありません。そのため、許容範囲の狭いモニタでは同期ずれが起こる場合があります。

10.5.1. デフォルト設定の変更

デフォルト設定の変更には、カーネルのリコンパイルが必要となります。

まず、コンフィギュレーションします。

[PC ~/atmark-dist]$ make menuconfig

メニューが表示されるので、

Kernel/Library/Defaults Selection --->
 --- Kernel is linux-2.4.x
 (None)Libc Version
 [ ] Default all settings
 [*] Customize Kernel Settings	 	 	 	ここを選択する
 [ ] Customize Vendor/User Settings	 	 	 	 
 [ ] Update Default Vendor Settings

とします。続いてKernel Configurationのメニューが表示されるので、

Device drivers --->
  Graphics support --->
[*]  EP93xx frame buffer support
     EP93xx frame buffer display(CRT display) --->
     EP93xx frame buffer resolution(SVGA(60Hz)) ---> デフォルトの解像度
     EP93xx frame buffer depth(24bpp true color) ---> カラー設定

上記の項目を変更した後、コンフィギュレーションを終了させます。

続いて、ビルドします。

[PC ~/atmark-dist]$ make all

ビルドしてできたカーネルイメージ(linux.bin.gz)をArmadillo-240へ書き込み、VGAのデフォルトの設定は完了です。

10.5.2. 解像度・色深度の変更

デフォルトの解像度・色深度以外でVGAを動作させるときは、Linuxブートオプションに設定を追加するだけで変更ができます。

7章Linuxブートオプションを参考にhermitを起動させます。ブートオプションに" video=ep93xxfb:???"を追加します。"???"には、表10.6「解像度一覧」表10.7「色深度一覧」からモード名を挿入してください。

表10.6 解像度一覧

モード名解像度水平周波数(kHz)垂直周波数(Hz)ドットクロック(MHz)
CRT-640x480640x48024.99831.24859.519
CRT-640x480@75640x48031.99838.09376.186
CRT-800x600800x60038.40137.50160.002
CRT-800x600@75800x60049.99847.34675.754
CRT-1024x7681024x76866.66249.60061.538
CRT-1024x768@751024x76880.00060.97676.220

表10.7 色深度一覧

モード名色深度
8bpp8ビットカラー
16bpp16ビットカラー
24bpp24ビットカラー
32bpp32ビットカラー

以下は800x600 60Hz, 8ビットカラーの設定例です。

hermit> setenv video=ep93xxfb:CRT-800x600,8bpp