本章では、Armadillo-X1 のソフトウェアをカスタマイズをする方法などについて説明します。
Device Treeとは、ハードウェア情報を記述したデータ構造体です。ハードウェアの差分をDevice Treeに記述することによって、1つのLinuxカーネルイメージを複数のハードウェアで利用することができるようになります。
Device Treeに対応しているメリットの1つは、ハードウェアの変更に対するソフトウェアの変更が容易になることです。例えば、拡張インターフェース(CON8)に接続する拡張基板を作成した場合、主にC言語で記述されたLinuxカーネルのソースコードを変更する必要は無く、やりたいことをより直感的に記述できるDTS(Device Tree Source)の変更で対応できます。
ただし、Device Treeは「データ構造体」であるため、ハードウェアの制御方法などの「処理」を記述することができない点に注意してください。Device Treeには、CPUアーキテクチャ、RAMの容量、各種デバイスのベースアドレスや割り込み番号などのハードウェアの構成情報のみが記述されます。
Armadillo-X1でのDevice Treeのカスタマイズ例については、「拡張インターフェースを使う」を参照してください。
Device Treeのより詳細な情報については、Linuxカーネルのソースコードに含まれているドキュメント(Documentation/devicetree/
)、devicetree.orgで公開されている「Device Tree Specification」を参照してください。
コンフィギュレーションを変更してLinuxカーネルイメージをカスタマイズする方法を説明します。
手順21.1 イメージをカスタマイズ
Linuxカーネルアーカイブの展開
Linuxカーネルのソースコードアーカイブと、initramfsアーカイブを準備し、Linuxカーネルのソースコードアーカイブを展開します。
initramfsアーカイブへのシンボリックリンク作成
Linuxカーネルディレクトリに移動して、initramfsアーカイブへのシンボリックリンク作成します。
コンフィギュレーション
コンフィギュレーションをします。
カーネルコンフィギュレーションの変更
カーネルコンフィギュレーションを変更後、"Exit"を選択して「Do you wish to save your new kernel configuration ? <ESC><ESC> to continue.」で"Yes"とし、カーネルコンフィギュレーションを確定します。
| |
---|
Linux Kernel Configurationメニューで"/"キーを押下すると、カーネルコンフィギュレーションの検索を行うことができます。カーネルコンフィギュレーションのシンボル名(の一部)を入力して"Ok"を選択すると、部分一致するシンボル名を持つカーネルコンフィギュレーションの情報が一覧されます。
|
ビルド
ビルドするには、次のようにコマンドを実行します。
イメージファイルの生成確認
ビルドが終了すると、arch/arm/boot/ディレクトリとarch/arm/boot/dts/以下に、イメージファイル(LinuxカーネルとDTB)が作成されています。
21.3. dumprootfs を用いた Debian GNU/Linux ルートファイルシステムアーカイブの構築
dumprootfsを使うと、量産やバックアップのために、すでに動作しているArmadilloに加えた変更を別のArmadilloで再現するためのアーカイブをつくることができます。
実行するとDebian/Linuxルートファイルシステムから自動的にデータを抽出するため、不要なファイルが含まれる可能性があります。
コピー対象から外したいファイルは、以下の説明にあります「ルートファイルシステムアーカイブにコピーしないファイルの指定」を参照し設定を行ってください。
dumprootfs コマンドを実行するには、 USBメモリ(またはSDカード)が必要となります。
コマンド実行時、 USBメモリ(またはSDカード)のデータはすべて削除されますので、予めデータを退避させてください。
手順21.2 dumprootfs を用いた Debian GNU/Linux ルートファイルシステムアーカイブの構築
dumprootfs パッケージのインストール
apt コマンドで dumprootfs パッケージを Armadillo にインストールします。
設定ファイル dumprootfs.conf の編集
/etc/dumprootfs/dumprootfs.conf を必要に応じて編集し、dumprootfsの設定を行います。
ルートファイルシステムアーカイブにコピーしないファイルの指定
/etc/dumprootfs/excludes.list に ルートファイルシステムアーカイブにコピーしないファイルの指定をすることができます。
dumprootfs の実行
各種設定ファイル記載後、dumprootfs コマンドを実行します。
dumprootfs の実行は rootユーザーで実行してください。
dumprootfs コマンドは、 設定ファイルを / にコピーした後、reboot コマンドを実行して Armadillo を再起動させます。
再起動の途中でルートファイルシステムの作成が始まります。
ルートファイルシステムの規模にもよりますが、20分から30分程度かかります。
ルートファイルシステムの作成が終わると Armadillo にログインできるようになります。
"dump_rootfs has succeeded." が表示されると、 USBメモリ(またはSDカード)の第1パーティションのトップディレクトリに
dump_rootfs.tar.gz
とdump_rootfs.tar.gz.md5
が作成されています。
21.4. ルートファイルシステムへの書き込みと電源断からの保護機能
Armadillo-X1のルートファイルシステムは、標準で eMMC に配置されます。
Linux が稼動している間は、ログや、設定ファイル、各種アプリケーション
によるファイルへの書き込みが発生します。もし、停電等で終了処理を実行できずに
電源を遮断した場合はRAM上に残ったキャッシュがeMMCに書き込まれずに、
ファイルシステムの破綻やファイルの内容が古いままになる状況が発生します。
また、eMMC内部の NAND Flash Memory には消去回数に上限があるため、書き込み
回数を制限することを検討する必要がある場合もあります。
そこで、Armadillo-X1 では、overlayfs を利用して、eMMCへの書き込み保護を行う機能を提供しています。
eMMCへの書き込み保護を使うには、kernelの起動オプションに"overlay=50%" ("=50%" は省略可、"overlay"のみ書くとRAMを256MByte使用)というパラメータを追加するだけです。
パラメータを追加すると、debian の起動前に initramfs によってルートファイルシステムが upper=RAMディスク(tmpfs)、
lower=eMMC(ext4)としたoverlayfs に切り替えられて、Debianが起動します。
overlayfs の機能によって、起動後のルートファイルシステムに対する差分は、
全てRAMディスク( /overlay/ramdisk にマウント) に記録されるようになりま
す。そのため、起動後の情報は保存されませんが、電源を遮断した場合でも、
eMMCは起動前と変らない状態のまま維持されています。
kernelの起動オプションの指定を行うにはArmadillo-X1を保守モードで起動し、次のようにコマンドを実行してください。
eMMC への書き込み保護を無効化するには、「保護機能の使用方法」 にて設定したkernelの起動オプションの"overlay"パラメータを削除します。
kernelの起動オプションは次にように確認することができます。パラメータが設定されている場合は"optargs=overlay"と表示されます。
パラメータの削除を行うには、次にようにコマンドを実行してください。
| |
---|
overlayfs は差分を ファイル単位で管理するため、予想以上にRAMディスクを消費する場合があります。
単に、新しいファイルやディレクトリを作れば、その分RAMディスクが消費されるのは想像に難くないと思います。
しかし、「lower=eMMC に既に存在していたファイルの書き換え」をする場合は、upper=RAMディスク に対象のファイル全体をコピーして書き換え」ます。
具体的に、問題になりそうな例を紹介します。
例えば、sqlite はDB毎に1つのファイルでデータ格納します。ここで、1GBのDBを作ってeMMCに保存した後、
overlayfsによる保護を有効にして起動した後に、たった10バイトのレコードを
追加しただけでRAMディスクは 1GB + 10バイト 消費されます。実際には、
Armadilloに1GBもRAMは無いので、追記を開始した時点でRAMディスクが不足します。
|
| |
---|
overlayfsによる、eMMCへの書き込み保護を行う場合、
必ず実際の運用状態でのテストを行い、RAMディスクが不足しないか確認してください。
動作中に書き込むファイルを必要最小限に留めると共に、追記を行う大きなファイルを作らない実装の検討を行ってください。
|
| |
---|
Armadillo-X1 の eMMC の記録方式は出荷時に SLC に設定しており、MLC 方式の eMMC よりも消去回数の上限が高くなっています。
そのため、開発するシステムの構成によってはeMMCへの書き込み保護機能を必要としない可能性があります。
|
| |
---|
eMMCへの書き込み保護機能を有効にすると、eMMCを安全に使用できるというメリットがありますが、その分、使用できるRAMサイズが減る、システム構成が複雑になる、デメリットもあります。
開発・運用したいシステムの構成、eMMCへの書き込み保護機能のメリット・デメリットを十分に考慮・評価したうえで、保護機能を使用する、しないの判断を行ってください。
|
21.5. AR9462モジュールを使った無線LANアクセスポイントの構築例
| |
---|
W53、W56でのAPモードは、Armadillo-X1本体に工事設計認証の証明ラベル(認証番号: 003-170166、007-AE0269 の2つ)が貼られていない場合は使用できません。
|
| |
---|
W53、W56でのAPモードを使用する場合は、Linuxカーネル linux-3.14-x1-atl16 以降(カーネルイメージ uImage-x1-v16.00 以降)である必要があります。
|
AR9462モジュールを使った無線LANアクセスポイントの構築方法について説明します。
21.5.1. 無線LANアクセスポイントを構築する
無線LANアクセスポイントの構築例として、hostapdを使用したソフトウェアアクセスポイントの構築手順を紹介します。
手順21.3 無線LANアクセスポイントの構築例
hostapdをインストールする
無線LANインターフェースをNetworkManagerの管理対象から外す
無線LANインターフェース(wlan0)をNetworkManagerの管理対象から外します。これはhostapdとの競合を避けるためです。
/etc/NetworkManager/NetworkManager.conf
に次の内容を追記します。
NetworkManagerを再起動して設定を有効化します。
hostapdの設定ファイルを作成する
hostapdの設定ファイルを作成します。設定ファイルのサンプルは、/usr/share/doc/hostapd/examples/
にあります。gzip圧縮ファイルか、非圧縮ファイルのどちらかが存在します。環境に合わせて/etc/hostapd/hostapd.conf
を作成してください。
無線設定に応じて/etc/hostapd/hostapd.conf
を編集します。
規制ドメインを指定する
規制ドメインを指定し、無線デバイスが使用してよい規制範囲の設定を検索できるようにします。日本で利用するには"JP"を指定します。
hostapdの設定ファイルを指定する
/etc/default/hostapd
にhostapdの設定ファイルを指定します。ここで指定した設定ファイルはhostapdの自動起動時に読み込まれます。
hostapdを起動する
次のコマンドを実行するとhostapdが起動します。Armadillo-X1を再起動した場合は自動的に起動します。
ネットワークブリッジの作成例として、無線LANインターフェースと有線LANインターフェースのブリッジを作成手順を紹介します。
事前に「無線LANアクセスポイントを構築する」を参照して、無線LANアクセスポイントを構築してください。
手順21.4 ネットワークブリッジの作成例
有線LANインターフェースをNetworkManagerの管理対象から外す
有線LANインターフェース(eth0)をNetworkManagerの管理対象から外します。
/etc/NetworkManager/NetworkManager.conf
を次のように変更します。
NetworkManagerを再起動して設定を有効化します。
ネットワークブリッジを作成する
次のようにネットワークブリッジを作成します。
21.6. WPEB-265AXI(BT)[B33]モジュールを使った無線LANアクセスポイントの構築例
| |
---|
SparkLAN製WPEB-265AXI(BT)[B33]ではW53、W56でのAPモードは使用できませんのでご注意ください。
|
WPEB-265AXI(BT)[B33]モジュールを使った無線LANアクセスポイントの構築方法について説明します。
21.6.1. 無線LANアクセスポイントを構築する
無線LANアクセスポイントの構築例として、hostapdを使用したソフトウェアアクセスポイントの構築手順を紹介します。
手順21.5 無線LANアクセスポイントの構築例
規制ドメインを指定する
規制ドメインを指定し、無線デバイスが使用してよい規制範囲の設定を検索できるようにします。
| |
---|
WPEB-265AXI(BT)[B33]のデバイスドライバは、crdaやiwによる規制ドメインの設定や参照に非対応です。
|
規制ドメインは、Device Treeで指定します。デフォルト状態では、日本を示す"JP"が指定されています。
規制ドメインを変更した場合は、「Linuxカーネルをビルドする」を参照してビルドしたDTBを、Armadilloにインストールしてください。
hostapdをインストールする
無線LANインターフェースをNetworkManagerの管理対象から外す
無線LANインターフェース(wlan0)をNetworkManagerの管理対象から外します。これはhostapdとの競合を避けるためです。
/etc/NetworkManager/NetworkManager.conf
に次の内容を追記します。
NetworkManagerを再起動して設定を有効化します。
hostapdの設定ファイルを作成する
hostapdの設定ファイルを作成します。設定ファイルのサンプルは、/usr/share/doc/hostapd/examples/
にあります。gzip圧縮ファイルか、非圧縮ファイルのどちらかが存在します。環境に合わせて/etc/hostapd/hostapd.conf
を作成してください。
無線設定に応じて/etc/hostapd/hostapd.conf
を編集します。
hostapdの設定ファイルを指定する
/etc/default/hostapd
にhostapdの設定ファイルを指定します。ここで指定した設定ファイルはhostapdの自動起動時に読み込まれます。
hostapdを起動する
次のコマンドを実行するとhostapdが起動します。Armadillo-X1を再起動した場合は自動的に起動します。
ネットワークブリッジの作成例として、無線LANインターフェースと有線LANインターフェースのブリッジを作成手順を紹介します。
事前に「無線LANアクセスポイントを構築する」を参照して、無線LANアクセスポイントを構築してください。
手順21.6 ネットワークブリッジの作成例
有線LANインターフェースをNetworkManagerの管理対象から外す
有線LANインターフェース(eth0)をNetworkManagerの管理対象から外します。
/etc/NetworkManager/NetworkManager.conf
を次のように変更します。
NetworkManagerを再起動して設定を有効化します。
ネットワークブリッジを作成する
次のようにネットワークブリッジを作成します。
21.7. AR9462モジュールを使って2.4GHz帯で通信する使用例
2つの機器をサンプルにAR9462モジュールを使って2.4GHz帯で通信するときの使い方について説明します。
| |
---|
SparkLAN 製 AP6275P モジュールでも同様の手順にて使用することができます。
|
21.7.1. 「BVMCN1101AA」の信号を受信する
Braveridge社製のビーコン「BVMCN1101AA」を例にビーコン信号を受信する方法を説明します。
「BVMCN1101AA」のアドバタイジング・パケットを受信するためには、bluetoothctl
コマンドを使います。
[bluetooth]のプロンプトが表示されたら、scan on
で信号を受信できます。
ご利用の環境によっては、ほかの機器からの信号も受信されます。
bluetoothctl コマンドを使用するには、 bluez をインストールする必要があります。
bluetoothctlを起動します。
スキャンを中止するには、scan off
を実行します。
bluetoothctlを終了するには、exit
を実行します。
外部のセンサーからデータを取得する例として、TEXAS INSTRUMENTS社製のセンサータグ「CC2650」を例にセンサータグをgatttool
で操作する方法を説明します。
手順21.7 「CC2650」の操作手順
hcitool lescan
を実行して、「CC2650」のMACアドレスを確認します。
ご利用の環境によっては、他の機器も検出されます。
「CC2650」に接続します。切断するには、Ctrl+c を入力してください。
プライマリサービスを確認するには、primary
を実行します。
0x004c~0x0050でハンドルされているプロファイルのUUIDを確認するには、char-desc
を実行します。
プロファイルの情報を読み取るには、char-read-hnd
を実行します。
プロファイルの情報を設定するには、char-write-cmd
を実行します。
操作を終了するには、exit
を実行します。
21.8. sshでArmadillo-X1に接続する
ssh-serverをインストールする
sshでrootのログインを禁止する
/etc/ssh/sshd_config内のPermitRootLogin をnoに設定します。
拡張インターフェース(CON8)の使用例を説明します。
拡張インターフェースは、用途によって機能を選択できるように複数の機能が割り当てられたピンが接続されています。Ethernet、USB、SPI、GPIOなどに使用可能な信号やパワーマネジメントICのON/OFF用信号などが接続されています。
ここでは、拡張インターフェースのハードウェア構成例と、対応するDevice Treeを示します。
拡張インターフェースのEthernetの使用例を説明します。
例として、Ethernet PHYにはMicrosemi製VSC8501XML-03を使います。これはArmadillo-X1本体に搭載されているものと同じです。
拡張インターフェースのEthernetを使うためには、Device Treeとブートローダーをカスタマイズする必要があります。VSC8501のドライバは工場出荷イメージで有効になっているため、Linuxカーネルイメージのカスタマイズは不要です。
ブロック図を図21.5「拡張インターフェースEthernetブロック図」に、信号配列を表21.1「拡張インターフェースEthernet信号配列」に示します。
表21.1 拡張インターフェースEthernet信号配列
CON8ピン番号 | 信号名 | I/O | 説明 |
---|
24 | RD0 | In |
受信データ0
i.MX 7DualのENET1_RGMII_RD0ピンに接続
|
25 | RD1 | In |
受信データ1
i.MX 7DualのENET1_RGMII_RD1ピンに接続
|
26 | RD2 | In |
受信データ2
i.MX 7DualのENET1_RGMII_RD2ピンに接続
|
27 | RD3 | In |
受信データ3
i.MX 7DualのENET1_RGMII_RD3ピンに接続
|
28 | RX_CTL | In |
受信制御
i.MX 7DualのENET1_RGMII_RX_CTLピンに接続
|
29 | RXC | In |
受信クロック
i.MX 7DualのENET1_RGMII_RXCピンに接続
|
30 | TD0 | Out |
送信データ0
i.MX 7DualのENET1_RGMII_TD0ピンに接続
|
31 | TD1 | Out |
送信データ1
i.MX 7DualのENET1_RGMII_TD1ピンに接続
|
32 | TD2 | Out |
送信データ2
i.MX 7DualのENET1_RGMII_TD2ピンに接続
|
33 | TD3 | Out |
送信データ3
i.MX 7DualのENET1_RGMII_TD3ピンに接続
|
34 | TX_CTL | Out |
送信制御
i.MX 7DualのENET1_RGMII_TX_CTLピンに接続
|
35 | TXC | Out |
送信クロック
i.MX 7DualのENET1_RGMII_TXCピンに接続
|
36 | GPIO7_IO12 | In |
VSC8501のMDINTピンに接続
i.MX 7DualのENET1_TX_CLKピンに接続
|
37 | GPIO7_IO13 | Out |
VSC8501のNRESETピンに接続
i.MX 7DualのENET1_RX_CLKピンに接続
|
38 | GPIO7_IO14 | Out |
VSC8501のCOMA_MODEピンに接続
i.MX 7DualのENET1_CRSピンに接続
|
69 | MDC | Out |
MDIOクロック
i.MX 7DualのENET1_MDCピンに接続
|
70 | MDIO | In/Out |
MDIOデータ
i.MX 7DualのENET1_MDIOピンに接続
|
21.9.1.2. Device Treeのカスタマイズ
拡張インターフェースのEthernetインターフェースを有効化したDTS(Device Tree Source)を用意します。「ハードウェア構成」に合わせて作成されたサンプルは、Linuxカーネルのソースコードのarch/arm/boot/dts/armadillo_x1-fec1.dts
です。
| |
---|
DTSではMDINTピンなどのVSC8501制御信号が定義されていますが、Linuxカーネルのドライバからはアクセスしません。GPIOクラスディレクトリなどからアクセスされないようにする目的で定義しています。
|
DTSをビルドしてDTB(Device Tree Blob)を生成します。「Linuxカーネルをビルドする」に従ってビルドすると、arch/arm/boot/dts/armadillo_x1-fec1.dtb
が生成されます。
生成したDTB(Device Tree Blob)をeMMCにインストールする方法を次に示します。
VSC8501の初期化はブートローダーが行います。工場出荷イメージでは拡張インターフェースに接続されたVSC8501の初期化に対応していないため、カスタマイズが必要です。
次に示す手順で、U-Bootのビルドを行い、VSC8501の初期化に対応したブートローダーイメージを生成します。
手順21.8 VSC8501の初期化に対応したブートローダーイメージの生成
ソースコードの準備
U-Bootのソースコードアーカイブを準備し展開します。
コンフィギュレーションの適用
ビルド
ビルドにはmakeコマンドを利用します。
イメージファイルの生成確認
ビルドが終了すると、U-Bootディレクトリにイメージファイルが作成されています。
生成したブートローダーイメージをQSPIフラッシュメモリにインストールする方法を次に示します。
まず、「Device Treeのカスタマイズ」でインストールしたDTBで起動するために、保守モードで次のようにコマンドを実行します。
| |
---|
DTBの指定を出荷状態に戻すには、次のようにコマンドを実行します。
|
正しくDTBの指定ができた場合は、起動ログに次のような内容が表示されます。
拡張インターフェースのEthernetインターフェースのネットワークデバイス名はeth0
です。「ネットワーク」を参照してネットワーク設定を行ってください。
| |
---|
Armadillo-X1本体のEthernetインターフェースのネットワークデバイス名はeth1 に変更されます。
|
| |
---|
MACアドレスは、出荷時に割り当て済みです。
|
拡張インターフェースのUSB OTG(On-the-Go)の使用例を説明します。
拡張インターフェースのUSB OTGを使うためには、Device Treeをカスタマイズする必要があります。
ブロック図を図21.6「拡張インターフェースUSB OTGブロック図」に、信号配列を表21.2「拡張インターフェースUSB OTG信号配列」に示します。
表21.2 拡張インターフェースUSB OTG信号配列
CON8ピン番号 | 信号名 | I/O | 説明 |
---|
47 | DP | In/Out |
USBプラス側信号
i.MX 7DualのUSB_OTG2_DPピンに接続
|
48 | DN | In/Out |
USBマイナス側信号
i.MX 7DualのUSB_OTG2_DNピンに接続
|
50 | VBUS | In |
VBUS監視
i.MX 7DualのUSB_OTG2_VBUSピンに接続
|
68 | ID | In |
ID信号
i.MX 7DualのSD2_RESET_Bピンに接続
|
100 | GPIO3_IO28 | Out |
TPS2065のENピンに接続
i.MX 7DualのLCD_DAT23ピンに接続
|
21.9.2.2. Device Treeのカスタマイズ
拡張インターフェースのUSB OTGインターフェースを有効化したDTS(Device Tree Source)を用意します。「ハードウェア構成」に合わせて作成されたサンプルは、Linuxカーネルのソースコードのarch/arm/boot/dts/armadillo_x1-usbotg2.dts
です。
DTSをビルドしてDTB(Device Tree Blob)を生成します。「Linuxカーネルをビルドする」に従ってビルドすると、arch/arm/boot/dts/armadillo_x1-usbotg2.dtb
が生成されます。
生成したDTB(Device Tree Blob)をeMMCにインストールする方法を次に示します。
まず、「Device Treeのカスタマイズ」でインストールしたDTBで起動するために、保守モードで次のようにコマンドを実行します。
| |
---|
DTBの指定を出荷状態に戻すには、次のようにコマンドを実行します。
|
正しくDTBの指定ができた場合は、起動ログに次のような内容が表示されます。
ArmadilloにBプラグが接続された場合はUSBホストとして動作します。例としてUSBフラッシュメモリが接続された場合の使用方法については「ストレージ」を参照してください。
ArmadilloにAプラグが接続された場合はUSBデバイスとして動作します。工場出荷イメージで有効になっているガジェットドライバは、CDC Composite Device(Ethernet and ACM)です。ネットワークデバイス名はusb0
、TTYデバイスファイル名は/dev/ttyGS0
です。
拡張インターフェースのI2Cの使用例を説明します。
例として、I2CデバイスにはNXPセミコンダクターズ製の温度センサー(LM75B)を使います。
拡張インターフェースのI2Cを使うためには、Device Treeをカスタマイズする必要があります。LM75B のドライバは工場出荷イメージで有効になっているため、Linux カーネルイメージのカスタマイズは不要です。
21.9.3.2. Device Treeのカスタマイズ
拡張インターフェースのI2C1インターフェースを有効化したDTS(Device Tree Source)を用意します。「ハードウェア構成」に合わせて作成されたサンプルは、Linuxカーネルのソースコードのarch/arm/boot/dts/armadillo_x1-i2c1_lm75b.dts
です。
DTSをビルドしてDTB(Device Tree Blob)を生成します。「Linuxカーネルをビルドする」に従ってビルドすると、arch/arm/boot/dts/armadillo_x1-i2c1_lm75b.dtb
が生成されます。
生成したDTB(Device Tree Blob)をeMMCにインストールする方法を次に示します。
まず、「Device Treeのカスタマイズ」でインストールしたDTBで起動するために、保守モードで次のようにコマンドを実行します。
| |
---|
DTBの指定を出荷状態に戻すには、次のようにコマンドを実行します。
|
正しくDTBの指定ができた場合は、起動ログに次のような内容が表示されます。
/sys/class/i2c-adapter/i2c-0/0-0048/temp1_input
ファイルの値を読み出すことによって、温度を取得することができます。
拡張インターフェースのSPIの使用例を説明します。
例として、SPIデバイスにはMicrochip製ADコンバーター(MCP3202)を使います。
拡張インターフェースのSPIを使うためには、Device Treeをカスタマイズする必要があります。MCP3202 のドライバは工場出荷イメージで有効になっているため、Linux カーネルイメージのカスタマイズは不要です。
ブロック図を図21.8「拡張インターフェースSPIブロック図」に、信号配列を表21.4「拡張インターフェースSPI信号配列」に示します。
表21.4 拡張インターフェースSPI信号配列
CON8ピン番号 | 信号名 | I/O | 説明 |
---|
72 | MISO | In |
マスター入力/スレーブ出力
i.MX 7DualのLCD_CLKピンに接続
|
73 | MOSI | Out |
マスター出力/スレーブ入力
i.MX 7DualのLCD_ENABLEピンに接続
|
74 | SCLK | Out |
シリアルクロック
i.MX 7DualのLCD_HSYNCピンに接続
|
75 | GPIO3_IO3 | Out |
スレーブセレクト
i.MX 7DualのLCD_VSYNCピンに接続
|
21.9.4.2. Device Treeのカスタマイズ
拡張インターフェースのECSPI4インターフェースを有効化したDTS(Device Tree Source)を用意します。「ハードウェア構成」に合わせて作成されたサンプルは、Linuxカーネルのソースコードのarch/arm/boot/dts/armadillo_x1-ecspi4_mcp3202.dts
です。
DTSをビルドしてDTB(Device Tree Blob)を生成します。「Linuxカーネルをビルドする」に従ってビルドすると、arch/arm/boot/dts/armadillo_x1-ecspi4_mcp3202.dtb
が生成されます。
生成したDTB(Device Tree Blob)をeMMCにインストールする方法を次に示します。
まず、「Device Treeのカスタマイズ」でインストールしたDTBで起動するために、保守モードで次のようにコマンドを実行します。
| |
---|
DTBの指定を出荷状態に戻すには、次のようにコマンドを実行します。
|
正しくDTBの指定ができた場合は、起動ログに次のような内容が表示されます。
/sys/bus/iio/devices/iio:device1/
ディレクトリ以下にあるファイルの値を読み出すことによって、入力電圧を算出することができます。
シングルエンド入力 CH0への入力電圧を算出する例を次に示します。
この例では、シングルエンド入力 CH0への入力電圧は、2.5V (2048 × 1.220703125 [mV])である事がわかります。
| |
---|
awk コマンドを利用して、次のように電源電圧を表示することができます。
|
21.10. Armadillo-X1 評価用拡張ボードを使用する
Armadillo-X1 評価用拡張ボードを使用するために必用なソフトウェアのインストール方法と、各デバイスの動作確認方法を説明します。
これからインストールするソフトウェアは下記ページからダウンロードすることができます。
Armadillo-X1 評価用拡張ボードを使用するために必要なカーネル、DTB(Device Tree Blob)およびブートローダーをインストールする手順を示します。
21.10.1.1. Linuxカーネルのインストール
LinuxカーネルイメージをeMMCにインストールする手順を次に示します。
21.10.1.2. DTB(Device Tree Blob)のインストール
DTB(Device Tree Blob)をインストールする手順について説明します。Armadillo-X1 評価用拡張ボードに対応するDTBを次に示します。
表21.5 Armadillo-X1 評価用拡張ボード対応DTB
ファイル名 | 備考 |
---|
armadillo_x1-extboard-eva01-usbhost.dtb | USBホスト用 |
armadillo_x1-extboard-eva01-usbdevice.dtb | USBデバイス用 |
| |
---|
Armadillo-X1 評価用拡張ボードはハードウェアの性質上、USBインターフェースをUSBホストとして使用する場合と、USBデバイスとして使用する場合とで、使用するDTBが分かれています。目的に合わせてDTBを選択してください。
|
DTBをeMMCにインストールする手順を次に示します。
21.10.1.3. ブートローダーのインストール
ブートローダーをインストールする手順について説明します。Armadillo-X1 評価用拡張ボードに対応するブートローダーイメージを次に示します。
表21.6 Armadillo-X1 評価用拡張ボード対応ブートローダーイメージ
ファイル名 | コンフィグ名 |
---|
u-boot-x1-fec1-en-[version] .bin | x1_fec1_en_config |
評価用拡張ボード対応ブートローダーをインストールするには、次のようにコマンドを実行します。
ブートローダーのインストールが完了したら、対応するDTBで起動するよう指定します。保守モードで起動し、次のようにコマンドを実行します。
以降、setenvコマンドで指定したDTBを使って起動するようになります。
| |
---|
DTBの指定を出荷状態に戻すには、次のようにコマンドを実行します。
|
| |
---|
Armadillo-X1 評価用拡張ボード用のブートローダーイメージのビルドには、uboot_2016.07-at17 以降のバージョンのソースコードが対応しています。
ビルドの際は、以下のようにArmadillo-X1 評価用拡張ボード用のデフォルトコンフィギュレーションの適用してください。ビルド手順の詳細については「ブートローダーをビルドする」を参照してください。
|
各デバイスの動作確認方法を説明します。
Armadillo-X1 評価用拡張ボードの有線LANインターフェースのネットワークデバイス名を次に示します。
表21.7 有線LANインターフェースに対応するネットワークデバイス名
有線LANインターフェース | ネットワークデバイス名 |
---|
Armadillo-X1 CON1 | eth1 |
評価用拡張ボード CON4 | eth0 |
| |
---|
ネットワークデバイス名を永続化するudev rule(/etc/udev/rules.d/70-persistent-net.rules )が存在しない場合に、Armadillo-X1本体の有線LANインターフェースのネットワークデバイス名がeth1に変更されます。
udev ruleで既にArmadillo-X1本体のネットワークデバイス名がeth0に設定されている場合は変更されません。
|
「ネットワーク」を参照してネットワークの設定を行ったあとに、有線LANで正常に通信が可能か確認します。同じネットワーク内にある「192.0.2.20」というIPアドレスの通信機器とPING通信を行う例を次に示します。
| |
---|
評価用拡張ボードのLANインターフェース以外のコネクションが有効化されている場合、ネットワーク通信に他のインターフェースが使用される場合があります。確実に接続確認をする場合は、事前に評価用拡張ボードのLANインターフェース以外のコネクションを無効化してください。
|
Armadillo-X1 評価用拡張ボードのSDインターフェース(CON3)にmicroSDカードを接続すると、/dev/mmcblk1
としてデバイスファイルが生成されます。
| |
---|
ストレージの詳しい使用方法については、「ストレージ」を参照してください。
|
Armadillo-X1 評価用拡張ボードのUSBインターフェース(CON6)は、使用する評価用拡張ボード対応DTBによって機能が変化します。
USBホストとして起動した場合、microUSB接続のフラッシュメモリやハードディスク等を使用することができます。例えばUSBフラッシュメモリを接続した場合は、/dev/sd*
としてデバイスファイルが生成されます。
| |
---|
ストレージの詳しい使用方法については、「ストレージ」を参照してください。
|
USBデバイスとして起動した場合、デフォルトでは「CDC Composite Gadget」が有効になっています。例として、「CDC-ACM(USB Communication Device Class Abstract Control Model)」としての使い方を示します。
USBケーブルでATDEと接続します。Armadillo-X1で/dev/ttyGS0
をcatした状態で、ATDEで"sample"という文字列を/dev/ttyACM0
に書き込むと、Armadillo-X1のコンソール上に"sample"という文字列が表示されます。
Armadillo-X1 評価用拡張ボードに接続されたLCDとタッチパネルの動作確認のため、Qt5のサンプルアプリケーションを利用します。次に示すコマンドでサンプルアプリケーションをインストールし起動してください。
サンプルアプリケーションを起動すると、LCD上に指で絵を描画することができます。
インプットデバイス対応するデバイスファイルを次に示します。
表21.8 インプットデバイス対応するデバイスファイル
インプットデバイス | デバイスファイル |
---|
Armadillo-X1 ユーザースイッチSW1 | /dev/input/event2 |
評価用拡張ボード LCDタッチパネル | /dev/input/event1 |
| |
---|
Armadillo-X1 評価用拡張ボードに対応したソフトウェアで起動すると、Armadillo-X1本体のユーザースイッチSW1のデバイスファイルは/dev/input/event1から/dev/input/event2に変更されます。
|
LCDのLEDバックライト機能は、バックライトクラスとして実装されています。LEDバックライトの輝度変更には、/sys/class/backlight/x1_extboard_eva01_backlight/
ディレクトリ以下の、次に示すファイルを使用します。
表21.9 輝度設定に使用するファイル
ファイル | 説明 |
---|
brightness | 0(消灯) 〜 max_brightness(最高輝度)までの数値を書き込むことで輝度を変更します。 |
max_brightness | brightnessに書きこむ数値の最大値(最高輝度)が読み出せます。 |
例として、LEDバックライトの輝度を最大値に設定する手順を次に示します。
21.11. 無線 LAN をアンテナ 1 本 (SISO) で動作させる
Armadillo-X1 の無線 LAN は、アンテナ 2 本 (MIMO) での動作を標準としております。
ソフトウェアの設定を変更することでアンテナ 1 本 (SISO) での動作が可能となります。
| |
---|
使用する無線 LAN モジュールによって、設定方法と使用するコネクタ(ch0, ch1)が変わります。
|