第8章 Linux カーネルデバイスドライバー仕様

本章では、Armadillo-400 シリーズに固有な Linux カーネルのデバイスドライバーの仕様について説明します。

8.1. UART

Armadillo-400 シリーズの UART ドライバーは以下の機能を有します。

  • 7/8 bit 送受信

  • 1/2 ストップビット

  • None/Odd/Even パリティ

  • XON/XOFF ソフトウェアフローコントロール

  • CTS/RTS ハードウェアフローコントロール (シリアルインターフェース1 のみ)

  • モデム信号コントロール (シリアルインターフェース1 のみ)

  • スタンダード Linux シリアル API

  • 最大ボーレート 230.4Kbps(シリアルインターフェース1) / 4Mbps[17] (シリアルインターフェース2, 3)

各シリアルインターフェースとデバイスファイルの対応を、表8.1「シリアルインターフェースとデバイスファイルの対応」に示します。

表8.1 シリアルインターフェースとデバイスファイルの対応

シリアルインターフェースデバイスファイル
シリアルインターフェース1 /dev/ttymxc1
シリアルインターフェース2 /dev/ttymxc2
シリアルインターフェース3 /dev/ttymxc4

8.2. Ethernet

Armadillo-400 シリーズの Ethernet ドライバーは以下の機能を有します。

  • AutoNegotiation サポート

  • CarrierDetect サポート

  • Ethtool サポート

    • link status

    • 10/100Mbps Speed

    • Full/Half Duplex

    • AutoNegotiation enable/disable

8.3. SD/MMC/SDIO ホスト

Armadillo-400 シリーズの SD/MMC/SDIO ホストドライバーは以下の機能を有します。

  • 4ビットモード

  • カードディテクト

microSD カードスロットにカードが挿入されると、/dev/mmcblk0 として認識されます。

8.4. USB 2.0 ホスト

Armadillo-400 シリーズの USB 2.0 ホストドライバーは以下の機能を有します。

  • EHCI 準拠

  • OTG非サポート

  • USB High Speed ホスト × 1

  • USB Full Speed ホスト × 1

USB デバイスが検出されると、/dev/sd* にマップされます。

8.5. フレームバッファ

Armadillo-440 のビデオ出力機能は、フレームバッファデバイスとして実装されています。

フレームバッファデバイスドライバーは以下の機能を有します。

  • ダブルバッファサポート

  • 最大解像度 SVGA

Armadillo-440 液晶モデルの標準では、以下の設定になっています。

  • 解像度 480 × 272 ピクセル

  • RGB 565 カラー

フレームバッファとデバイスファイルの対応を、表8.2「フレームバッファとデバイスファイルの対応」に示します。

表8.2 フレームバッファとデバイスファイルの対応

フレームバッファデバイスファイル
バックグラウンドプレーン /dev/fb0
グラフィックウィンドウ /dev/fb1

8.6. LED バックライト

Armadillo-440 の LED バックライト機能は、バックライトクラスとして実装されています。

/sys/class/backlight/pwm-backlight ディレクトリ以下のファイルによって、バックライトの制御を行うことができます。

輝度の調整は、brightness ファイルによって行うことができます。 brightness ファイルに 0(消灯)〜255(最高輝度)までの数値を書き込むことにより、輝度を変更することができます。

また、brightness ファイルを読むことにより現在の輝度を知ることができます。

バックライトの点灯/消灯は、bl_power ファイルによって行うことができます。bl_power に 0 を書き込むと消灯になり、1 を書き込むと点灯になります。

8.7. タッチスクリーン

Armadillo-440 のタッチスクリーン機能は、インプットデバイスとして実装されており、ユーザーランドとのインターフェースとしてイベントインターフェースを提供しています。

表8.3「タッチスクリーンイベント」に示すイベントが発生します。

表8.3 タッチスクリーンイベント

TypeCodeValue
EV_KEY(1)BTN_TOUCH(330)0 or 1
EV_ABS(3)ABS_X(0)100 〜 4000
EV_ABS(3)ABS_Y(1)100 〜 4000
EV_ABS(3)ABS_PRESSURE(24)0 or 1

Armadillo-440 液晶モデルの標準状態では、タッチスクリーンのイベントデバイスは /dev/input/event1 にマップされます。

[警告]

イベントデバイスの番号は、検出された順番に割り振られます。そのため、USB キーボードなど他のインプットデバイスが起動時に検出されると、タッチスクリーンのイベントデバイス番号は変わる可能性があります。

8.8. オーディオ

Armadillo-440 のオーディオ機能は、ALSA デバイスとして実装されています。 ALSA デバイスドライバーは以下の機能を有します。

  • Playback(2ch) / Capture(1ch)

  • サンプリング周波数 48k, 32k, 24k, 16k, 12k, 8k Hz

  • フォーマットSigned 16/20/24 bit, Little-endian

オーディオデバイスの制御は、ALSA ライブラリ (libasound2) を通じて行うことができます。

[警告]

Armadillo-440 のオーディオドライバーでは、録音と再生を同時に行うことはできません。

8.9. GPIO

Armadillo-400 シリーズの GPIO は、generic GPIO として実装されています。

ユーザーランドから GPIO を操作するためのインターフェースとしては、GPIO sysfs と Armadillo-200 シリーズ互換 GPIO ドライバーの2つがあります。標準状態では GPIO sysfs ドライバーが有効になっています。

8.9.1. GPIO sysfs

GPIO sysfsでは、/sys/class/gpio/(GPIO_NAME) ディレクトリ以下のファイルで入出力方向の設定、出力レベルの設定、入出力レベルの取得を行うことができます。

GPIO_NAME ディレクトリと GPIOピン の対応を表8.4「GPIO_NAME と GPIO ピンの対応」に示します。

表8.4 GPIO_NAME と GPIO ピンの対応

GPIO_NAMEGPIO ピン初期入出力方向初期出力レベル
CON9_1CON9 1ピン入力-
CON9_2CON9 2ピン入力-
CON9_11CON9 11ピン入力-
CON9_12CON9 12ピン入力-
CON9_13CON9 13ピン入力-
CON9_14CON9 14ピン入力-
CON9_15CON9 15ピン入力-
CON9_16CON9 16ピン入力-
CON9_17CON9 17ピン入力-
CON9_18CON9 18ピン入力-
CON9_21CON9 21ピン入力-
CON9_22CON9 22ピン入力-
CON9_23CON9 23ピン入力-
CON9_24CON9 24ピン入力-
CON9_25CON9 25ピン入力-
CON9_26CON9 26ピン入力-
CON9_27CON9 27ピン出力LOW
CON9_28CON9 28ピン出力LOW

/sys/class/gpio/(GPIO_NAME)/direction ファイルで入出力方向の設定を行うことができます。表8.5「GPIO 入出力方向の設定」に示す設定をdirection ファイルに書き込むことにより、入出力方向を設定します。また、direction ファイルを読み込むことで現在の設定を知ることができます。

表8.5 GPIO 入出力方向の設定

設定説明
high入出力方向を出力に、出力レベルを HIGH レベルに設定します。出力レベルの取得/設定を行うことができます。
low入出力方向を出力に、出力レベルを LOW レベルに設定します。出力レベルの取得/設定を行うことができます。
outlow を設定した場合と同じです。
in入出力方向を入力に設定します。入力レベルの取得を行うことができます。

/sys/class/gpio/(GPIO_NAME)/value ファイルで出力レベルの設定、入出力レベルの取得を行うことができます。0 が LOW レベルを、1 が HIGH レベルを意味します。

8.9.2. Armadillo-200 シリーズ互換 GPIO ドライバー

Armadillo-200 シリーズ互換 GPIO ドライバーでは、対応するデバイスファイルに対して ioctl を発行することにより、GPIO の操作および状態の取得を行うことができます。

[警告]

Armadillo-200 シリーズ互換 GPIO ドライバーは標準状態では無効になっています。有効にするには Linux カーネルコンフィギュレーションで、CONFIG_GPIO_SYSFS を無効に、CONFIG_ARMADILLO2X0_GPIO を有効にして、カーネルをビルドする必要があります。

Armadillo-200 シリーズ互換 GPIO ドライバーでの GPIO 名と GPIOピンの対応を表8.6「Armadillo-200 シリーズ互換 GPIO ドライバー GPIO 一覧」に示します。

表8.6 Armadillo-200 シリーズ互換 GPIO ドライバー GPIO 一覧

GPIO 名GPIO ピン初期入出力方向初期出力レベル
GPIO0CON9 21ピン入力-
GPIO1CON9 22ピン入力-
GPIO2CON9 23ピン入力-
GPIO3CON9 24ピン入力-
GPIO4CON9 25ピン入力-
GPIO5CON9 26ピン入力-
GPIO6CON9 27ピン出力LOW
GPIO7CON9 28ピン出力LOW
GPIO8CON9 11ピン入力-
GPIO9CON9 12ピン入力-
GPIO10CON9 13ピン入力-
GPIO11CON9 14ピン入力-
GPIO12CON9 15ピン入力-
GPIO13CON9 16ピン入力-
GPIO14CON9 17ピン入力-
GPIO15CON9 18ピン入力-

[警告]

Armadillo-200 シリーズ互換 GPIO ドライバーでの GPIO 名と対応する GPIO ピンの位置は、Armadillo-200 シリーズと同じになっています。そのため、Armadillo-200 シリーズ互換 GPIO ドライバーではArmadillo-400 シリーズで使用可能な GPIO のうち、一部だけしか操作することができません。

デバイスファイルのパラメータは、以下の通りです。

表8.7 Armadillo-200 シリーズ互換 GPIO ドライバーデバイスファイル

タイプメジャー番号マイナー番号デバイスファイル
キャラクタデバイス10185/dev/gpio

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

表8.8 Armadillo-200 シリーズ互換 GPIO ドライバー ioctl コマンド

コマンド説明第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/linux/armadillo2x0_gpio.h に定義されている構造体「struct gpio_param」と「struct wait_param」を使用します。「struct gpio_param」は単方向リストになっているので、複数の GPIO を一度に制御する場合は next メンバを使用してください。また、リストの最後の next メンバには"0(NULL)"を指定してください。GPIO デバイスドライバーの詳細な使用方法については、GPIO 操作アプリケーション(atmark-dist/vendors/AtmarkTechno/Armadillo-440/gpioctrl)のソースコードを参考にしてください。

8.10. LED

Armadillo-400 シリーズの LED ドライバーは、LED クラスドライバーと Armadillo-200 シリーズ互換 LED ドライバーの2つがあります。標準状態では、LED クラスドライバーが有効になっています。

8.10.1. LED クラス

/sys/class/leds/(LED_NAME) ディレクトリ以下のファイルによって、LED の制御を行うことができます。

点灯/消灯の制御は、/sys/class/leds/(LED_NAME)/brightness ファイルによって行うことができます。 brightness ファイルに 0を書き込むと消灯、0以外の数値を書き込むと点灯となります。

LED クラスでは、点滅などの制御はトリガーという仕組みを使用して行います。Armadillo-400 シリーズでは、mmc0、timer、heartbeat、default-on のトリガーを使用することができます。各文字列を、/sys/class/leds/(LED_NAME)/trigger ファイルに書き込むことでトリガーが有効になります。

mmc0 トリガーを有効にすると MMC/SD カードへの読み書きに連動して LED が点灯/消灯します。

timer トリガーにより、指定した周期で LED を点滅させることができます。 timer トリガーを有効にすると、新しく /sys/class/leds/(LED_NAME)/delay_on/sys/class/leds/(LED_NAME)/delay_off ファイルが作成されます。それぞれのファイルに点灯時間[msec]と消灯時間[msec]を書き込むことで LED が点滅します。

heartbeat トリガーを有効にすると、鼓動のように LED が点滅します。

default-on トリガーを有効にすると、点灯状態で起動します。

LED_NAMEと対応する LED の一覧を表8.9「LED 一覧」に示します。

表8.9 LED 一覧

LED_NAME対応する LEDデフォルトトリガー
redLED3なし
greenLED4default-on
yellowLED5なし

8.10.2. Armadillo-200 シリーズ互換 LED ドライバー

Armadillo-200 シリーズ互換 LED ドライバーでは、対応するデバイスファイルに対して ioctl を発行することにより、LED の操作を行うことができます。

[警告]

Armadillo-200 シリーズ互換 LED ドライバーは標準状態では無効になっています。有効にするには Linux カーネルコンフィギュレーションで、CONFIG_LEDS_GPIO を無効に、CONFIG_ARMADILLO2X0_LED を有効にして、カーネルをビルドする必要があります。

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

表8.10 LEDノード

タイプメジャー番号マイナー番号デバイスファイル
キャラクタデバイス10215/dev/led

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

表8.11 LED操作コマンド

コマンド説明第3引数のType
LED_RED_ONLED3(赤)を点灯しますなし
LED_RED_OFFLED3(赤)を消灯しますなし
LED_RED_STATUSLED3(赤)の点灯状態を取得します状態を保存するバッファ(最小1バイト)
LED_RED_BLINKONLED3(赤)の点滅を開始しますなし
LED_RED_BLINKOFFLED3(赤)の点滅を停止しますなし
LED_RED_BLINKSTATUSLED3(赤)の点滅状態を取得します状態を保存するバッファ(最小1バイト)
LED_GREEN_ONLED(緑)を点灯しますなし
LED_GREEN_OFFLED4(緑)を消灯しますなし
LED_GREEN_STATUSLED4(緑)の点灯状態を取得します状態を保存するバッファ(最小1バイト)
LED_GREEN_BLINKONLED4(緑)の点滅を開始しますなし
LED_GREEN_BLINKOFFLED4(緑)の点滅を停止しますなし
LED_GREEN_BLINKSTATUSLED4(緑)の点滅状態を取得します状態を保存するバッファ(最小1バイト)

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

8.11. ボタン

Armadillo-400 シリーズでは、ボタン入力はインプットデバイスとして実装されており、ユーザーランドとのインターフェースとしてイベントインターフェースを提供しています。

Armadillo-440 液晶モデルでは、Armadillo-440 本体にオンボードタクトスイッチ× 1と、LCD 拡張ボードにボタン× 3が実装されています。

それぞれのボタンに対するイベントを、表8.12「Armadillo-440液晶モデルボタンイベント」に示します。

表8.12 Armadillo-440液晶モデルボタンイベント

ボタンTypeCodeValue
SW1EV_KEY(1)KEY_ENTER(28)0 or 1
LCD_SW1EV_KEY(1)KEY_BACK(158)0 or 1
LCD_SW2EV_KEY(1)KEY_MENU(139)0 or 1
LCD_SW3EV_KEY(1)KEY_HOME(102)0 or 1

Armadillo-440 液晶モデルの標準状態では、ボタンのイベントデバイスは /dev/input/event0 にマップされます。

[警告]

イベントデバイスの番号は、検出された順番に割り振られます。そのため、USB キーボードなど他のインプットデバイスが起動時に検出されると、ボタンのイベントデバイス番号は変わる可能性があります。

8.12. リアルタイムクロック

Armadillo-440 LCD 拡張ボード及びArmadillo-400 RTC オプションモジュールには、リアルタイムクロックが搭載されています。

リアルタイムクロックは、/dev/rtc0 として認識されます。Armadillo-440 液晶モデルに RTC オプションモジュールを接続した場合、RTC オプションモジュールのリアルタイムクロックが /dev/rtc0 となり、LCD 拡張ボードのリアルクロックは /dev/rtc1 として認識されます。

8.13. ウォッチドッグタイマー

Armadillo-400 シリーズで採用している i.MX25 プロセッサは、内蔵ウォッチドッグタイマーを有しています。

Armadillo-400 シリーズの標準ブートローダーでは、起動直後にこの内蔵ウォッチドッグタイマーを有効にします。標準状態でのタイムアウト時間は 10 秒に設定されます。

Linux カーネルでは、自動でウォッチドッグタイマーをキックします。

もし、何らかの要因で Linux カーネルがフリーズしてウォッチドッグタイマーをキックできなくなりタイムアウトが発生すると、システムリセットが発生します。

8.14. パワーマネジメント

Armadillo-400 シリーズは Linux パワーマネジメントのスリープ機能をサポートします。スリープ状態では、アプリケーションの実行は一時停止し、カーネルはサスペンド状態となります。スリープ状態では外部デバイスの動作を停止するため、消費電力を抑えることができます。スリープ状態から実行状態に復帰すると、カーネルのリジューム処理が行われた後、アプリケーションの実行を再開します。

/sys/power/state ファイルに、standby もしくは mem を書き込むことにより、スリープモードへ移行することができます。また、スリープモード中にウェイクアップ要因による割り込みが発生すると、スリープモードから実行状態へ復帰します。

各モードによる、状態の違いは表8.13「スリープモード」を参照してください。power-on suspend 状態に比べ、suspend-to-RAMの方がより少ない消費電力でスリープすることができます。

表8.13 スリープモード

スリープモードstate ファイルに書き込む文字列i.MX25 パワーモードウェイクアップ要因
power-on suspendstandbyDoze モードシリアル入力、タッチスクリーン入力、ボタン入力
suspend-to-RAMmemStop モードボタン入力

ウェイクアップ要因になることができるデバイスを、ウェイクアップ要因にするかどうかは、各デバイスに対応する sysfs エントリの power/wakeup ファイルで指定することができます。power/wakeup ファイルに enabled と書き込むとウェイクアップ要因になり、 disabled と書き込むとウェイクアップ要因ではなくなります。

表8.14「ウェイクアップ要因の指定」を参照してください。

表8.14 ウェイクアップ要因の指定

デバイスsysfs ファイル初期状態
シリアルインターフェース1/sys/devices/platform/mxcintuart.1/tty/ttymxc1/power/wakeupenabled
シリアルインターフェース2/sys/devices/platform/mxcintuart.2/tty/ttymxc2/power/wakeupdisabled
シリアルインターフェース3/sys/devices/platform/mxcintuart.4/tty/ttymxc4/power/wakeupdisabled
タッチスクリーン/sys/devices/platform/imx_adc.0/power/wakeupenabled
ボタン/sys/devices/platform/gpio-keys.0/power/wakeupenabled

8.14.1. スリープ中の外部デバイスの扱いについて

Armadillo-400 シリーズでは、サスペンド処理で外部デバイスへの電源供給を全て停止します。

そのため、USB デバイスはスリープ状態に移行する前に、安全に取り外しができる状態にしておく必要があります。すなわち、USB メモリは umount しておく必要があります。リジューム時にデバイス検出が再度行われるため、USB デバイスはスリープ中に抜き差しすることができます。

一方で、microSD カードは、mount したままでスリープ状態に移行することができます。これを可能にするために、SD ホストドライバーではリジューム時にプローブ処理を行わず、同じカードが挿入されているものとして扱います。そのため、スリープ中に microSD の抜き差しを行うことはできません。

Ethernet デバイスは実行状態に復帰後、ケーブルを抜き差ししたときと同様の処理が行われるため、Auto-negotiation が有効になっている場合、リジューム後に Auto-negotiation が行われます。

初期状態の設定では、+3.3V_IO 出力はスリープ時に停止します。しかし、シリアルポート 2 および 4 をウェイクアップ要因に指定した場合、スリープ時も +3.3V_IO 出力が供給されます。



[17] DMA 転送を有効にした場合。標準では DMA 転送は無効になっています。