第8章 Linux カーネルデバイスドライバー仕様
本章では、Armadillo-400 シリーズに固有な Linux カーネルのデバイスドライバーの仕様について説明します。
Armadillo-400 シリーズでは、カーネルコンフィギュレーションを変更することにより、標準で有効になっているもの以外の様々な機能を使用することができます。
カーネルコンフィギュレーションを変更する方法は、「イメージをカスタマイズする」を参照してください。
Armadillo-400 シリーズで標準以外の機能を追加する場合には、ボードオプションによりどのピンに機能を割り当てるか選択し、(標準で有効になっていない場合は)対応するデバイスドライバーを有効にする必要があります。ボードオプションは、Linux Kernel ConfigurationのSystem Type -> Freescale MXC Implementations -> MX25 Options -> Armadillo-400 Board optionsで変更することができます。
ボードオプションでは、一つのピンに複数の機能を割り当てることはできないようになっています。また、機能が割り当てられなかったピンは、GPIOとして設定されます。
i.MX25 プロセッサは UART1 から UART5 までの 5 つの UART モジュールを内蔵しています。Armadillo-400 シリーズでは標準状態で UART2 をシリアルインターフェース1 (CON3)、UART3 をシリアルインターフェース2 (CON9)、UART5 をシリアルインターフェース3 (CON9)に使用しています。また、カーネルコンフィギュレーションを変更することにより、CON11 に UART3 及び UART4 の機能を割り当てることができます。UART9 もしくは UART11 に機能を割り当てた場合、CTS/RTSによるハードウェアフローコントロールを有効にするか無効にするかを選択することができます。
UART ドライバーは以下の機能を有します。
各シリアルインターフェースとデバイスファイルの対応を、表8.1「シリアルインターフェースとデバイスファイルの対応」に示します。
表8.1 シリアルインターフェースとデバイスファイルの対応
シリアルインターフェース | デバイスファイル | 使用モジュール |
---|
シリアルインターフェース1 |
/dev/ttymxc1
| UART2 |
シリアルインターフェース2 |
/dev/ttymxc2
| UART3 |
シリアルインターフェース3 |
/dev/ttymxc4
| UART5 |
UART 機能に関連するカーネルコンフィギュレーションを表8.2「UART コンフィギュレーション」に示します。
表8.2 UART コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
SERIAL_MXC | y |
i.MXのシリアルドライバーを有効にします
|
SERIAL_MXC_CONSOLE | y |
i.MXのシリアルドライバーを使ったシステムコンソールを有効にします
|
ARMADILLO400_UART3_CON9 | y |
CON9のUART3を有効にします
CON9_3をUART3_RXDに、CON9_5をUART3_TXDに使用します
|
ARMADILLO400_UART3_HW_FLOW_CON9 | n |
CON9のUART3のハードウェアフローコントロールを有効にします
CON9_11をUART3_RTSに、CON9_13をUART3_CTSに使用します
ARMADILLO400_UART3_CON9に依存します
|
ARMADILLO400_UART3_CON11 | n |
CON11のUART3を有効にします
CON11_40をUART3_RXDに、CON11_41をUART3_TXDに使用します
ARMADILLO400_UART3_CON9と排他です
|
ARMADILLO400_UART3_HW_FLOW_CON11 | n |
CON11のUART3のハードウェアフローコントロールを有効にします
CON11_42をUART3_RTSに、CON11_43をUART3_CTSに使用します
ARMADILLO400_UART3_CON11に依存します
|
ARMADILLO400_UART4_CON11 | n |
CON11のUART4を有効にします
CON11_44をUART4_RXDに、CON11_45をUART4_TXDに使用します
|
ARMADILLO400_UART4_HW_FLOW_CON11 | n |
CON11のUART4のハードウェアフローコントロールを有効にします
CON11_46をUART4_RTSに、CON11_47をUART4_CTSに使用します
ARMADILLO400_UART4_CON11に依存します
|
ARMADILLO400_UART5_CON9 | y |
CON9のUART5を有効にします
CON9_4をUART5_RXDに、CON9_6をUART5_TXDに使用します
|
ARMADILLO400_UART5_HW_FLOW_CON9 | n |
CON9のUART5のハードウェアフローコントロールを有効にします
CON9_12をUART5_RTSに、CON9_14をUART5_CTSに使用します
ARMADILLO400_UART5_CON9に依存します
|
Armadillo-400 シリーズの Ethernet ドライバーは以下の機能を有します。
AutoNegotiation サポート
CarrierDetect サポート
Ethtool サポート
i.MX25 プロセッサは、SD/MMC/SDIO ホストコントローラ(eSDHC)を二個内蔵しています。Armadillo-400 シリーズでは、標準状態で eSDHC1 を microSD スロット(CON1)に使用しています。また、カーネルコンフィギュレーションを変更することにより、CON9 に eSDHC2の機能を割り当てることができます。
Armadillo-400 シリーズの SD/MMC/SDIO ホストドライバーは以下の機能を有します。
microSD カードスロットにカードが挿入されると、/dev/mmcblkN
(Nは0または1)として認識されます。
SD/MMC/SDIO ホスト機能に関連するカーネルコンフィギュレーションを表8.3「SD/MMC/SDIO ホストコントローラ コンフィギュレーション」に示します。
表8.3 SD/MMC/SDIO ホストコントローラ コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
MMC | y |
Linux カーネルの MMC/SD/SDIO カードサポートを有効にします
|
MMC_IMX_ESDHCI | y |
i.MX25のeSDHCドライバーを有効にします
|
ARMADILLO400_SDHC2_CON9 | n |
CON9のSDHC2を有効にします
CON9_15からCON9_24を使用します
|
Armadillo-400 シリーズの USB 2.0 ホストドライバーは以下の機能を有します。
EHCI 準拠
OTG非サポート
USB High Speed ホスト × 1
USB Full Speed ホスト × 1
USB デバイスが検出されると、/dev/sd*
にマップされます。
Armadillo-440 のビデオ出力機能は、フレームバッファデバイスとして実装されています。
フレームバッファデバイスドライバーは以下の機能を有します。
Armadillo-440 液晶モデルの標準では、以下の設定になっています。
解像度 480 × 272 ピクセル
RGB 565 カラー
フレームバッファとデバイスファイルの対応を、表8.4「フレームバッファとデバイスファイルの対応」に示します。
表8.4 フレームバッファとデバイスファイルの対応
フレームバッファ | デバイスファイル |
---|
バックグラウンドプレーン |
/dev/fb0
|
グラフィックウィンドウ |
/dev/fb1
|
Armadillo-440 の LED バックライト機能は、バックライトクラスとして実装されています。
/sys/class/backlight/pwm-backlight
ディレクトリ以下のファイルによって、バックライトの制御を行うことができます。
輝度の調整は、brightness
ファイルによって行うことができます。 brightness
ファイルに 0(消灯)〜255(最高輝度)までの数値を書き込むことにより、輝度を変更することができます。
また、brightness
ファイルを読むことにより現在の輝度を知ることができます。
バックライトの点灯/消灯は、bl_power
ファイルによって行うことができます。bl_power
に 0 を書き込むと消灯になり、1 を書き込むと点灯になります。
Armadillo-440 のタッチスクリーン機能は、インプットデバイスとして実装されており、ユーザーランドとのインターフェースとしてイベントインターフェースを提供しています。
表8.5「タッチスクリーンイベント」に示すイベントが発生します。
表8.5 タッチスクリーンイベント
Type | Code | Value |
---|
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 キーボードなど他のインプットデバイスが起動時に検出されると、タッチスクリーンのイベントデバイス番号は変わる可能性があります。 |
Armadillo-400 シリーズのオーディオ機能は、ALSA デバイスとして実装されています。 ALSA デバイスドライバーは以下の機能を有します。
Playback(2ch) / Capture(1ch)
サンプリング周波数 48k, 32k, 24k, 16k, 12k, 8k Hz
フォーマットSigned 16/20/24 bit, Little-endian
オーディオデバイスの制御は、ALSA ライブラリ (libasound2) を通じて行うことができます。
| |
---|
Armadillo-400 シリーズのオーディオドライバーでは、録音と再生を同時に行うことはできません。 |
i.MX25では、オーディオマルチプレクスにより、オーディオ機能をどのピンで使用するかを選択することができます。Armadillo-400シリーズではカーネルコンフィギュレーションでオーディオマルチプレクスの設定をおこなうことができます。標準では、オーディオマルチプレクスは AUD6 を使用するようになっており、オーディオ機能は CON11 に接続されます。コンフィギュレーションにより AUD5 を使用することで CON9 に接続することができます。
オーディオ 機能に関連するカーネルコンフィギュレーションを表8.6「オーディオ コンフィギュレーション」に示します。
表8.6 オーディオ コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
SOUND | y |
Linux カーネルのサウンドカードサポートを有効にします
|
SND | y |
Linux カーネルのALSAサポートを有効にします
|
SND_SOC | y |
Linux カーネルのASoCサポートを有効にします
|
SND_MXC_SOC | y |
i.MXでオーディオ機能を実現するためのドライバを有効にします
|
SND_SOC_ARMADILLO440_WM8978 | y |
Armadillo-400シリーズでWM8978コーデックを使用したオーディオ機能を実現するためのドライバを有効にします
|
ARMADILLO400_AUD5_CON11 | y |
CON11にオーディオ機能を出力します
CON11_42からCON11_47を使用します
|
ARMADILLO400_AUD6_CON9 | n |
CON9にオーディオ機能を出力します
CON9_15, 17, 21, 22, 23, 24を使用します
ARMADILLO400_AUD5_CON11と排他です
|
Armadillo-400 シリーズの GPIO は、generic GPIO として実装されています。
ユーザーランドから GPIO を操作するためのインターフェースとしては、GPIO sysfs と Armadillo-200 シリーズ互換 GPIO ドライバーの2つがあります。標準状態では GPIO sysfs ドライバーが有効になっています。
カーネルコンフィギュレーションで機能が割り当てられなかったピンは、全て GPIO として設定されます。
GPIO sysfsでは、/sys/class/gpio/(GPIO_NAME)
ディレクトリ以下のファイルで入出力方向の設定、出力レベルの設定、入出力レベルの取得を行うことができます。
GPIO_NAME ディレクトリと GPIOピン の対応を表8.7「GPIO_NAME と GPIO ピンの対応」に示します。
表8.7 GPIO_NAME と GPIO ピンの対応
GPIO_NAME | GPIO ピン | 初期入出力方向 | 初期出力レベル |
---|
CON9_1 | CON9 1ピン | 入力 | - |
CON9_2 | CON9 2ピン | 入力 | - |
CON9_11 | CON9 11ピン | 入力 | - |
CON9_12 | CON9 12ピン | 入力 | - |
CON9_13 | CON9 13ピン | 入力 | - |
CON9_14 | CON9 14ピン | 入力 | - |
CON9_15 | CON9 15ピン | 入力 | - |
CON9_16 | CON9 16ピン | 入力 | - |
CON9_17 | CON9 17ピン | 入力 | - |
CON9_18 | CON9 18ピン | 入力 | - |
CON9_21 | CON9 21ピン | 入力 | - |
CON9_22 | CON9 22ピン | 入力 | - |
CON9_23 | CON9 23ピン | 入力 | - |
CON9_24 | CON9 24ピン | 入力 | - |
CON9_25 | CON9 25ピン | 入力 | - |
CON9_26 | CON9 26ピン | 入力 | - |
CON9_27 | CON9 27ピン | 出力 | LOW |
CON9_28 | CON9 28ピン | 出力 | LOW |
/sys/class/gpio/(GPIO_NAME)/direction
ファイルで入出力方向の設定を行うことができます。表8.8「GPIO 入出力方向の設定」に示す設定をdirection
ファイルに書き込むことにより、入出力方向を設定します。また、direction
ファイルを読み込むことで現在の設定を知ることができます。
表8.8 GPIO 入出力方向の設定
設定 | 説明 |
---|
high | 入出力方向を出力に、出力レベルを HIGH レベルに設定します。出力レベルの取得/設定を行うことができます。 |
low | 入出力方向を出力に、出力レベルを LOW レベルに設定します。出力レベルの取得/設定を行うことができます。 |
out | low を設定した場合と同じです。 |
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.9「Armadillo-200 シリーズ互換 GPIO ドライバー GPIO 一覧」に示します。
表8.9 Armadillo-200 シリーズ互換 GPIO ドライバー GPIO 一覧
GPIO 名 | GPIO ピン | 初期入出力方向 | 初期出力レベル |
---|
GPIO0 | CON9 21ピン | 入力 | - |
GPIO1 | CON9 22ピン | 入力 | - |
GPIO2 | CON9 23ピン | 入力 | - |
GPIO3 | CON9 24ピン | 入力 | - |
GPIO4 | CON9 25ピン | 入力 | - |
GPIO5 | CON9 26ピン | 入力 | - |
GPIO6 | CON9 27ピン | 出力 | LOW |
GPIO7 | CON9 28ピン | 出力 | LOW |
GPIO8 | CON9 11ピン | 入力 | - |
GPIO9 | CON9 12ピン | 入力 | - |
GPIO10 | CON9 13ピン | 入力 | - |
GPIO11 | CON9 14ピン | 入力 | - |
GPIO12 | CON9 15ピン | 入力 | - |
GPIO13 | CON9 16ピン | 入力 | - |
GPIO14 | CON9 17ピン | 入力 | - |
GPIO15 | CON9 18ピン | 入力 | - |
| |
---|
Armadillo-200 シリーズ互換 GPIO ドライバーでの GPIO 名と対応する GPIO ピンの位置は、Armadillo-200 シリーズと同じになっています。そのため、Armadillo-200 シリーズ互換 GPIO ドライバーではArmadillo-400 シリーズで使用可能な GPIO のうち、一部だけしか操作することができません。
|
デバイスファイルのパラメータは、以下の通りです。
表8.10 Armadillo-200 シリーズ互換 GPIO ドライバーデバイスファイル
タイプ | メジャー番号 | マイナー番号 | デバイスファイル |
---|
キャラクタデバイス | 10 | 185 | /dev/gpio |
ioctl の第1引数には、デバイスファイルのファイルディスクリプタを指定します。第2引数には、GPIOを操作するためのコマンドを指定します。
表8.11 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
)のソースコードを参考にしてください。
Armadillo-400 シリーズの LED ドライバーは、LED クラスドライバーと Armadillo-200 シリーズ互換 LED ドライバーの2つがあります。標準状態では、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.12「LED 一覧」に示します。
表8.12 LED 一覧
LED_NAME | 対応する LED | デフォルトトリガー |
---|
red | LED3 | なし |
green | LED4 | default-on |
yellow | LED5 | なし |
8.10.2. Armadillo-200 シリーズ互換 LED ドライバー
Armadillo-200 シリーズ互換 LED ドライバーでは、対応するデバイスファイルに対して ioctl を発行することにより、LED の操作を行うことができます。
| |
---|
Armadillo-200 シリーズ互換 LED ドライバーは標準状態では無効になっています。有効にするには Linux カーネルコンフィギュレーションで、CONFIG_LEDS_GPIO を無効に、CONFIG_ARMADILLO2X0_LED を有効にして、カーネルをビルドする必要があります。 |
LED に対応するデバイスファイルのパラメータは、以下の通りです。
表8.13 LEDノード
タイプ | メジャー番号 | マイナー番号 | デバイスファイル |
---|
キャラクタデバイス | 10 | 215 | /dev/led |
ioctl の第1引数には、デバイスファイルのファイルディスクリプタを指定します。第2引数には、LED を操作するためのコマンドを指定します。
表8.14 LED操作コマンド
コマンド | 説明 | 第3引数のType |
---|
LED_RED_ON | LED3(赤)を点灯します | なし |
LED_RED_OFF | LED3(赤)を消灯します | なし |
LED_RED_STATUS | LED3(赤)の点灯状態を取得します | 状態を保存するバッファ(最小1バイト) |
LED_RED_BLINKON | LED3(赤)の点滅を開始します | なし |
LED_RED_BLINKOFF | LED3(赤)の点滅を停止します | なし |
LED_RED_BLINKSTATUS | LED3(赤)の点滅状態を取得します | 状態を保存するバッファ(最小1バイト) |
LED_GREEN_ON | LED(緑)を点灯します | なし |
LED_GREEN_OFF | LED4(緑)を消灯します | なし |
LED_GREEN_STATUS | LED4(緑)の点灯状態を取得します | 状態を保存するバッファ(最小1バイト) |
LED_GREEN_BLINKON | LED4(緑)の点滅を開始します | なし |
LED_GREEN_BLINKOFF | LED4(緑)の点滅を停止します | なし |
LED_GREEN_BLINKSTATUS | LED4(緑)の点滅状態を取得します | 状態を保存するバッファ(最小1バイト) |
LEDデバイスドライバーの詳細な使用方法については、サンプルのLED制御アプリケーション(atmark-dist/vendors/AtmarkTechno/Armadillo-440/ledctrl
)のソースコードを参考にしてください。
Armadillo-400 シリーズでは、ボタン入力はインプットデバイスとして実装されており、ユーザーランドとのインターフェースとしてイベントインターフェースを提供しています。
Armadillo-440 液晶モデルでは、Armadillo-440 本体にオンボードタクトスイッチ× 1と、LCD 拡張ボードにボタン× 3が実装されています。
それぞれのボタンに対するイベントを、表8.15「Armadillo-440液晶モデルボタンイベント」に示します。
表8.15 Armadillo-440液晶モデルボタンイベント
ボタン | Type | Code | Value |
---|
SW1 | EV_KEY(1) | KEY_ENTER(28) | 0 or 1 |
LCD_SW1 | EV_KEY(1) | KEY_BACK(158) | 0 or 1 |
LCD_SW2 | EV_KEY(1) | KEY_MENU(139) | 0 or 1 |
LCD_SW3 | EV_KEY(1) | KEY_HOME(102) | 0 or 1 |
Armadillo-440 液晶モデルの標準状態では、ボタンのイベントデバイスは /dev/input/event0
にマップされます。
| |
---|
イベントデバイスの番号は、検出された順番に割り振られます。そのため、USB キーボードなど他のインプットデバイスが起動時に検出されると、ボタンのイベントデバイス番号は変わる可能性があります。 |
Armadillo-440 LCD 拡張ボード及びArmadillo-400 RTC オプションモジュールには、リアルタイムクロックが搭載されています。
リアルタイムクロックは、/dev/rtc0
として認識されます。Armadillo-440 液晶モデルに RTC オプションモジュールを接続した場合、RTC オプションモジュールのリアルタイムクロックが /dev/rtc0
となり、LCD 拡張ボードのリアルクロックは /dev/rtc1
として認識されます。
Armadillo-400 シリーズで採用している i.MX25 プロセッサは、内蔵ウォッチドッグタイマーを有しています。
Armadillo-400 シリーズの標準ブートローダーでは、起動直後にこの内蔵ウォッチドッグタイマーを有効にします。標準状態でのタイムアウト時間は 10 秒に設定されます。
Linux カーネルでは、自動でウォッチドッグタイマーをキックします。
もし、何らかの要因で Linux カーネルがフリーズしてウォッチドッグタイマーをキックできなくなりタイムアウトが発生すると、システムリセットが発生します。
i.MX25 プロセッサは、I2C1 から I2C3 の 3 個の I2C コントローラーを内蔵しています。Armadillo-400 シリーズでは、標準で I2C1 はボード内蔵バスとして使用し、I2C2 は CON14 に、I2C3 は CON11 に割り当てています。
I2C バスドライバーは以下の機能を有します。
I2C バスにスレーブデバイスを接続し、それを使用可能にするためには、デバイスに対応したチップドライバを有効にする必要があります。また、チップドライバが "new style"[] で記述されていた場合、struct i2c_board_info を適切に設定しなければいけません。Armadillo-400 シリーズでは、linux-2.6.26-at/arch/arm/maxh-mx25/armadillo400.c の armadillo400_i2cN_board_info配列(Nはバスに対応した数値)に記述してください。
I2C 機能に関連するカーネルコンフィギュレーションを表8.16「I2C コンフィギュレーション」に示します。
表8.16 I2C コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
ARMADILLO400_I2C2_CON14 | y |
CON14のI2C2を有効にします
CON14_3をI2C2_SCLに、CON14_4をI2C2_SDAに使用します
|
ARMADILLO400_I2C3_CON11 | y |
CON11のI2C3を有効にします
CON11_48をI2C3_SCLに、CON11_49をI2C3_SDAに使用します
|
i.MX25 プロセッサは、CSPI1 から CSPI3 の 3 個の SPI コントローラーを内蔵しています。Armadillo-400 シリーズでは、カーネルコンフィギュレーションにより、CSPI1 及び CSPI3 を CON9 に割り当てることが可能です。
SPIドライバーは以下の機能を有します。
SPI バスにスレーブデバイスを接続し、それを使用可能にするためには、デバイスに対応したドライバを有効にする必要があります。また、struct spi_board_info を適切に設定しなければいけません。Armadillo-400シリーズでは、linux-2.6.26-at/arch/arm/maxh-mx25/armadillo400.c の armadillo400_spiN_board_info配列(Nはバスに対応した数値)に記述してください。
SPI 機能に関連するカーネルコンフィギュレーションを表8.17「SPI コンフィギュレーション」に示します。
表8.17 SPI コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
SPI | n |
Linux カーネルの SPI サポートを有効にします
|
SPI_MXC | n |
i.MX の SPI ドライバを有効にします
|
ARMADILLO400_SPI1_CON9 | n |
CON9のSPI1を有効にします
CON9_3をCSPI1_MOSI、CON9_5をCSPI1_MISO、CON9_13をCSPI1_SCLK、CON9_26をCSPI1_RDYとして使用します
|
ARMADILLO400_SPI1_SS0_CON9_25 | n |
CON9_25をSPI1_SS0として使用します
ARMADILLO400_SPI1_CON9に依存します
|
ARMADILLO400_SPI1_SS1_CON9_11 | n |
CON9_11をSPI1_SS1として使用します
ARMADILLO400_SPI1_CON9に依存します
|
ARMADILLO400_SPI3_CON9 | n |
CON9のSPI3を有効にします
CON9_4をCSPI3_MOSI、CON9_6をCSPI3_MISO、CON9_12をCSPI3_SCLK、CON9_14をCSPI3_RDYとして使用します。
|
ARMADILLO400_SPI3_SS0_CON9_16 | n |
CON9_16をSPI3_SS0として使用します
ARMADILLO400_SPI3_CON9に依存します
|
ARMADILLO400_SPI3_SS1_CON9_18 | n |
CON9_18をSPI3_SS1として使用します
ARMADILLO400_SPI3_CON9に依存します
|
ARMADILLO400_SPI3_SS2_CON9_15 | n |
CON9_15をSPI3_SS2として使用します
ARMADILLO400_SPI3_CON9に依存します
|
ARMADILLO400_SPI3_SS2_CON9_17 | n |
CON9_17をSPI3_SS3として使用します
ARMADILLO400_SPI3_CON9に依存します
|
Armadillo-400 シリーズでは、CON9_2 と CON9_26 を one wire マスターとして使用することができます。CON9_2 では、i.MX25 プロセッサ内蔵の one wire コントローラーを使用して機能を実現し、CON9_26 では GPIO one wire ドライバを用いて機能を実現しています。
one wire バスにスレーブデバイスを接続し、それを使用可能にするためには、デバイスに対応したスレーブデバイスドライバーを有効にする必要があります。
one wire 機能に関連するカーネルコンフィギュレーションを表8.18「one wire コンフィギュレーション」に示します。
表8.18 one wire コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
W1 | n |
Linuxカーネルのone wireサポートを有効にします
|
W1_MASTER_MXC | n |
i.MX25内蔵コントローラを使用したone wireマスタードライバーを有効にします
CON9_2を使用する場合には有効にしてください
|
W1_MASTER_GPIO | n |
GPIOを使用したone wireマスタードライバーを有効にします
CON9_26を使用する場合には有効にしてください
|
ARMADILLO400_W1_CON9_2 | n |
CON9_2をone wireとして使用します
|
ARMADILLO400_W1_CON9_26 | n |
CON9_26をone wireとして使用します
|
i.MX25 プロセッサは、PWM1 から PWM4 の 4 個の PWM モジュールを内蔵しています。Armadillo-400 シリーズでは、標準では PWM1 を LED バックライト (CON11_12)として使用しています。カーネルコンフィギュレーションを変更することにより、PWM2 を CON9_25 に、PWM4 を CON14_3 に割り当てることができます。
i.MX25のPWMドライバでは、/sys/class/mxc_pwm/(PWM_NAME) 以下のファイルに値を書き込むことで設定変更することができます。設定に使用するファイルを、表8.19「PWM sysfs」に示します。
表8.19 PWM sysfs
ファイル名 | 説明 |
---|
period_ns |
PWMの周期をnsec単位で設定します
設定可能な範囲は、17から2,147,483,647(約20usecから2sec)です
|
duty_ns |
PWMのON時間(invert = 1の場合はOFF時間)をnsec単位で設定します
設定可能な範囲は、0 < duty_ns < period_nsの範囲です
|
invert |
1に設定すると、PWM出力が反転します
|
enable |
1に設定すると、PWM出力が有効になります
0で出力が停止します
PWM出力中でも、period_ns、duty_ns、invertは設定変更可能です
|
PWM 機能に関連するカーネルコンフィギュレーションを表8.20「PWM コンフィギュレーション」に示します。
表8.20 PWM コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
MXC_PWM | y |
i.MX25のPWMドライバーを有効にします
|
MXC_PWM_CLASS | y |
sysfs経由でPWMの設定を可能にします
|
ARMADILLO400_PWM2_CON9_25 | n |
CON9_25をPWM2として使用します
PWM_NAMEはCON9_25です
|
ARMADILLO400_PWM4_CON14_3 | n |
CON14_3をPWM4として使用します
PWM_NAMEはCON14_3です
|
i.MX25 プロセッサは、CAN1 及び CAN2 の 2 個の CAN コントローラ(FlexCAN)を内蔵しています。Armadillo-400 シリーズでは、カーネルコンフィギュレーションにより、CAN2 を CON14 に割り当てることが可能です。
CAN機能は、SocketCANフレームワークを使用して実現しています。SocketCANについては、linux-2.6.26-at/Documentation/networking/can.txtなどを参照してください。
CAN ドライバーは以下の機能を有します。
/sys/devices/platform/FlexCAN.1/ 以下のファイルに値を書き込むことで設定変更することができます。設定に使用するファイルを、表8.21「CAN sysfs」に示します[]。
表8.21 CAN sysfs
ファイル名 | 説明 | デフォルト値 |
---|
br_clksrc |
クロックソースを指定します
busを指定すると、クロックソースに66.5MHzを使用します
oscを指定すると、クロックソースに24MHzを使用します
| bus |
br_presdiv |
クロックソースのプリスケーラー分周値を設定します
1から8を指定できます
| 7 |
br_propseg |
プロパゲーションセグメントの値を設定します
1から8を指定できます
| 5 |
br_pseg1 |
フェーズバッファセグメント1の値を設定します
1から8を指定できます
| 5 |
br_pseg2 |
フェーズバッファセグメント2の値を設定します
1から8を指定できます
| 8 |
br_rjw |
リシンクロナイゼーションジャンプ幅を設定します
1から4を指定できます
| 3 |
bitrate |
通信速度[bps]を示します
書き込みはできません
| 500000 |
std_msg |
標準フォーマットに対応するかどうかを設定します
1で対応、0で非対応となります
| 1 |
ext_msg |
拡張フォーマットに対応するかどうかを設定します
1で対応、0で非対応となります
| 1 |
maxmb |
メッセージバッファの最大数を設定します
2から64を指定できます
| 64 |
rx_maxmb |
受信メッセージバッファのサイズを設定します
送信メッセージバッファのサイズは maxmb-rx_maxmbとなります
1からmaxmb-1を指定できます
| 32 |
state |
現在のステータスを表示します
"インターフェースのステータス::エラー状態"というフォーマットで表示されます
インターフェースのステータスは、"Start"(up状態)か"Stop"(donw状態)のいずれかです
エラー状態は、"normal"(エラーなし)か"error passive"(エラーパッシブ状態)、"bus off"(バスオフ状態)のいずれかです
| Stop::normal |
boff_rec |
自動的にバスオフから復帰するかどうかを設定します
0で自動的に復帰、1で復帰しません
| 1 |
listen |
listenモード(受信のみ)にするかどうかを設定します
1でlistenモード有効、0で無効になります
| 0 |
loopback |
loopbackモードにするかどうかを設定します
1でloopbackモード有効、0で無効になります
| 0 |
smp |
サンプリング時の動作を設定します
0で1回のサンプルで受信したビットの値を決定します
1で3回のサンプルをおこない多数決により受信したビットの値を決定します
| 1 |
srx_dis |
自身が送信したフレームを受信するかどうかを設定します
0で自身が送信したフレームを受信し、1で受信しません
| 1 |
set_resframe |
リモートフレームを受信した際、返信するデータフレームを設定します
"ID#DATA"という形式で設定します
IDには、16進数3桁(標準フォーマット)もしくは16進数8桁を指定します
DATAには、1データあたり16進数2桁で、0から8個までのデータを指定します
データは.で区切ることもできます
| なし |
del_resframe |
set_resframeで設定したデータフレームを削除します
削除するデータフレームのIDを16進数3桁(標準フォーマット)もしくは16進数8桁で指定してください
| なし |
show_resframe |
set_resframeで設定したデータフレームを表示します
書き込みはできません
| なし |
wakeup |
サスペンド時にCAN受信によるウェイクアップを有効にするかどうかを設定します
1でウェイクアップ有効、0で無効となります
| 0 |
wak_src |
サスペンド時にローパスフィルタを使用するかどうかを設定します
0でフィルタリング無効、1で有効になります
| 0 |
通信速度は以下の計算式により算出されます。
CAN 機能に関連するカーネルコンフィギュレーションを表8.22「CAN コンフィギュレーション」に示します。
表8.22 CAN コンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
CAN | n |
Linux カーネルの CAN サポートを有効にします
|
CAN_RAW | n |
RAW_CANプロトコルを有効にします
|
CAN_BCM | n |
CAN_BCMプロトコルを有効にします
|
CAN_FLEXCAN | n |
i.MX25のFlexCANドライバを有効にします
|
ARMADILLO400_CAN2_CON14 | n |
CON14をCAN2として使用します
CON14_3をCAN2_TXCAN、CON14_4をCAN2_RXCANとして使用します
|
i.MX25 プロセッサは、キーパッドコントローラを内蔵しています。Armadillo-400では、カーネルコンフィギュレーションにより、CON11をキーパッドに割り当てることが可能です。
| |
---|
キーパッドドライバーを有効にすると、イベントデバイスは /dev/input/event0 にマップされます。そのため、ボタン及びタッチスクリーンのイベントデバイス番号が変わります。 |
キーパッド機能に関連するカーネルコンフィギュレーションを表8.23「キーパッドコンフィギュレーション」に示します。
表8.23 キーパッドコンフィギュレーション
カーネルコンフィギュレーション | デフォルト | 説明 |
---|
INPUT | y |
Linux カーネルのインプットレイヤサポートを有効にします
|
INPUT_EVDEV | y |
インプットレイヤのイベントデバイスサポートを有効にします
|
KEYBOARD_MXC | n |
i.MX25のキーパッドドライバを有効にします
|
ARMADILLO400_KEYPAD_CON11 | n |
CON11のキーパッドを有効にします
COLとROWを少なくとも一つずつ有効にしてください
|
ARMADILLO400_KEYPAD_ROW0_CON11_40 | n |
CON11_40をROW0として使用します
|
ARMADILLO400_KEYPAD_ROW1_CON11_41 | n |
CON11_41をROW1として使用します
|
ARMADILLO400_KEYPAD_ROW2_CON11_42 | n |
CON11_42をROW2として使用します
|
ARMADILLO400_KEYPAD_ROW3_CON11_43 | n |
CON11_43をROW3として使用します
|
ARMADILLO400_KEYPAD_COL0_CON11_44 | n |
CON11_44をCOL0として使用します
|
ARMADILLO400_KEYPAD_COL1_CON11_45 | n |
CON11_45をCOL1として使用します
|
ARMADILLO400_KEYPAD_COL2_CON11_46 | n |
CON11_46をCOL2として使用します
|
ARMADILLO400_KEYPAD_COL3_CON11_47 | n |
CON11_47をCOL3として使用します
|
ARMADILLO400_KEYPAD_ROW4_CON11_48 | n |
CON11_48をROW4として使用します
|
ARMADILLO400_KEYPAD_ROW5_CON11_49 | n |
CON11_49をROW5として使用します
|
ROW及びCOLのどの範囲をキーパッドとして使用するかは、linux-2.6.26-at/arch/arm/maxh-mx25/armadillo400.c の armadillo440_keypad_data 変数に適切な値を指定してください。また、各ボタンがどのイベントに対応するかというキーマップは armadillo440_keymapping 変数で指定してください。
Armadillo-400 シリーズは Linux パワーマネジメントのスリープ機能をサポートします。スリープ状態では、アプリケーションの実行は一時停止し、カーネルはサスペンド状態となります。スリープ状態では外部デバイスの動作を停止するため、消費電力を抑えることができます。スリープ状態から実行状態に復帰すると、カーネルのリジューム処理が行われた後、アプリケーションの実行を再開します。
/sys/power/state
ファイルに、standby もしくは mem を書き込むことにより、スリープモードへ移行することができます。また、スリープモード中にウェイクアップ要因による割り込みが発生すると、スリープモードから実行状態へ復帰します。
各モードによる、状態の違いは表8.24「スリープモード」を参照してください。power-on suspend 状態に比べ、suspend-to-RAMの方がより少ない消費電力でスリープすることができます。
表8.24 スリープモード
スリープモード | state ファイルに書き込む文字列 | i.MX25 パワーモード | ウェイクアップ要因 |
---|
power-on suspend | standby | Doze モード | シリアル入力、タッチスクリーン入力、ボタン入力 |
suspend-to-RAM | mem | Stop モード | ボタン入力 |
ウェイクアップ要因になることができるデバイスを、ウェイクアップ要因にするかどうかは、各デバイスに対応する sysfs エントリの power/wakeup
ファイルで指定することができます。power/wakeup
ファイルに enabled と書き込むとウェイクアップ要因になり、 disabled と書き込むとウェイクアップ要因ではなくなります。
表8.25「ウェイクアップ要因の指定」を参照してください。
表8.25 ウェイクアップ要因の指定
デバイス | sysfs ファイル | 初期状態 |
---|
シリアルインターフェース1 | /sys/devices/platform/mxcintuart.1/tty/ttymxc1/power/wakeup | enabled |
シリアルインターフェース2 | /sys/devices/platform/mxcintuart.2/tty/ttymxc2/power/wakeup | disabled |
シリアルインターフェース3 | /sys/devices/platform/mxcintuart.4/tty/ttymxc4/power/wakeup | disabled |
タッチスクリーン | /sys/devices/platform/imx_adc.0/power/wakeup | enabled |
ボタン | /sys/devices/platform/gpio-keys.0/power/wakeup | enabled |
キーパッド | /sys/devices/platform/mxc_keypad.0/power/wakeup | enabled |
FlexCAN | /sys/devices/platform/FlexCAN.1/wakeup | disabled |
8.20.1. スリープ中の外部デバイスの扱いについて
Armadillo-400 シリーズでは、サスペンド処理で外部デバイスへの電源供給を全て停止します。
そのため、USB デバイスはスリープ状態に移行する前に、安全に取り外しができる状態にしておく必要があります。すなわち、USB メモリは umount しておく必要があります。リジューム時にデバイス検出が再度行われるため、USB デバイスはスリープ中に抜き差しすることができます。
一方で、microSD カードは、mount したままでスリープ状態に移行することができます。これを可能にするために、SD ホストドライバーではリジューム時にプローブ処理を行わず、同じカードが挿入されているものとして扱います。そのため、スリープ中に microSD の抜き差しを行うことはできません。
Ethernet デバイスは実行状態に復帰後、ケーブルを抜き差ししたときと同様の処理が行われるため、Auto-negotiation が有効になっている場合、リジューム後に Auto-negotiation が行われます。
初期状態の設定では、+3.3V_IO 出力はスリープ時に停止します。しかし、シリアルポート 2 および 4 をウェイクアップ要因に指定した場合、スリープ時も +3.3V_IO 出力が供給されます。