| |
本章では、Armadillo-IoT のソフトウェアをカスタマイズをする方法などについて説明します。
コンフィギュレーションを変更してLinuxカーネルイメージをカスタマイズする方法を説明します。
手順22.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)が作成されています。
22.2. dumprootfs を用いた Debian GNU/Linux ルートファイルシステムアーカイブの構築
dumprootfsを使うと、量産やバックアップのために、すでに動作しているArmadilloに加えた変更を別のArmadilloで再現するためのアーカイブをつくることができます。
実行するとDebian/Linuxルートファイルシステムから自動的にデータを抽出するため、不要なファイルが含まれる可能性があります。
コピー対象から外したいファイルは、以下の説明にあります「ルートファイルシステムアーカイブにコピーしないファイルの指定」を参照し設定を行ってください。
dumprootfs コマンドを実行するには、 USBメモリ(またはSDカード)が必要となります。
コマンド実行時、 USBメモリ(またはSDカード)のデータはすべて削除されますので、予めデータを退避させてください。
手順22.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 が作成されています。
dump_rootfs.tar.gz は、11章イメージファイルの書き換え方法のルートファイルシステムとして使用することができます。
22.3. ルートファイルシステムへの書き込みと電源断からの保護機能
Armadillo-IoT G3のルートファイルシステムは、標準で eMMC に配置されます。
Linux が稼動している間は、ログや、設定ファイル、各種アプリケーション
によるファイルへの書き込みが発生します。もし、停電等で終了処理を実行できずに
電源を遮断した場合はRAM上に残ったキャッシュがeMMCに書き込まれずに、
ファイルシステムの破綻やファイルの内容が古いままになる状況が発生します。
また、eMMC内部の NAND Flash Memory には消去回数に上限があるため、書き込み
回数を制限することを検討する必要がある場合もあります。
そこで、Armadillo-IoT G3 では、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-IoT G3を保守モードで起動し、次のようにコマンドを実行してください。
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-IoT G3 の eMMC の記録方式は出荷時に SLC に設定しており、MLC 方式の eMMC よりも消去回数の上限が高くなっています。
そのため、開発するシステムの構成によってはeMMCへの書き込み保護機能を必要としない可能性があります。
|
| |
---|
eMMCへの書き込み保護機能を有効にすると、eMMCを安全に使用できるというメリットがありますが、その分、使用できるRAMサイズが減る、システム構成が複雑になる、デメリットもあります。
開発・運用したいシステムの構成、eMMCへの書き込み保護機能のメリット・デメリットを十分に考慮・評価したうえで、保護機能を使用する、しないの判断を行ってください。
|
| |
---|
ec25-utils(v1.1.0) 以降に実装されている ec25-reset-config.service は、
Armadillo 起動時に前回保存した SIM の識別番号(ICCID)と、挿入されている SIM の情報を比較し、合致しない場合はモデムの保持情報をクリアした後に新しい情報を書き込みます。
overlayfs が有効の場合は書き込みができなくなるため、Armadillo が起動する度にモデムの保持情報をクリアしてしまいます。
これを防ぐため、ec25-utils(v1.1.0) が導入されている Armadillo で overlayfs を使用する場合は以下の対応を行ってください。
|
| |
---|
ec25-utils のバージョンが 1.2.0 以降の場合、 overlayfs 有効時は ec25-reset-config が実行されなくなります。
overlayfs 有効時に SIM カードを挿し替えて 3G/LTE が接続出来なくなった場合は、図6.24「3G/LTE モジュールの初期化手順」記載のコマンドを手動実行してください。
|
アドオンインターフェースのGPIOを制御する方法を説明します。
Armadillo-IoT のGPIOは、generic GPIOとして実装されています。GPIOクラスディレクトリ以下のファイルによってGPIOの制御を行うことができます。
アドオンインターフェース(CON1, CON2)のGPIOと、GPIOクラスディレクトリの対応を次に示します。
表22.1 アドオンインターフェースのGPIOディレクトリ ピン番号 | GPIOクラスディレクトリ |
---|
CON1_3ピン, CON2_41ピン | /sys/class/gpio/gpio64 | CON1_4ピン, CON2_40ピン | /sys/class/gpio/gpio65 | CON1_5ピン, CON2_39ピン | /sys/class/gpio/gpio66 | CON1_6ピン, CON2_38ピン | /sys/class/gpio/gpio67 | CON1_7ピン, CON2_32ピン | /sys/class/gpio/gpio98 | CON1_8ピン, CON2_34ピン | /sys/class/gpio/gpio99 | CON1_9ピン, CON2_36ピン | /sys/class/gpio/gpio100 | CON1_10ピン, CON2_37ピン | /sys/class/gpio/gpio101 | CON1_11ピン, CON2_35ピン | /sys/class/gpio/gpio102 | CON1_12ピン, CON2_50ピン | /sys/class/gpio/gpio103 | CON1_13ピン, CON2_24ピン | /sys/class/gpio/gpio106 | CON1_14ピン, CON2_25ピン | /sys/class/gpio/gpio107 | CON1_15ピン, CON2_33ピン | /sys/class/gpio/gpio139 | CON1_16ピン, CON2_46ピン | /sys/class/gpio/gpio179 | CON1_17ピン, CON2_47ピン | /sys/class/gpio/gpio180 | CON1_18ピン, CON2_49ピン | /sys/class/gpio/gpio182 | CON1_19ピン, CON2_48ピン | /sys/class/gpio/gpio181 | CON1_22ピン, CON2_42ピン | /sys/class/gpio/gpio108 | CON1_23ピン, CON2_43ピン | /sys/class/gpio/gpio109 | CON1_24ピン | /sys/class/gpio/gpio89 | CON1_25ピン | /sys/class/gpio/gpio90 | CON1_32ピン | /sys/class/gpio/gpio204 | CON1_33ピン | /sys/class/gpio/gpio205 | CON1_34ピン | /sys/class/gpio/gpio199 | CON1_35ピン | /sys/class/gpio/gpio194 | CON1_36ピン | /sys/class/gpio/gpio200 | CON1_37ピン | /sys/class/gpio/gpio195 | CON1_38ピン | /sys/class/gpio/gpio192 | CON1_39ピン | /sys/class/gpio/gpio193 | CON1_40ピン | /sys/class/gpio/gpio97 | CON1_41ピン | /sys/class/gpio/gpio96 | CON1_42ピン | /sys/class/gpio/gpio196 | CON1_43ピン | /sys/class/gpio/gpio197 | CON1_44ピン | /sys/class/gpio/gpio198 | CON1_45ピン | /sys/class/gpio/gpio202 | CON1_46ピン | /sys/class/gpio/gpio203 | CON1_47ピン | /sys/class/gpio/gpio140 | CON1_48ピン | /sys/class/gpio/gpio141 | CON1_49ピン | /sys/class/gpio/gpio142 | CON1_50ピン | /sys/class/gpio/gpio201 | CON1_51ピン | /sys/class/gpio/gpio143 | CON1_52ピン | /sys/class/gpio/gpio144 | CON1_53ピン | /sys/class/gpio/gpio145 |
以降の説明では、任意のGPIOを示すGPIOクラスディレクトリを"/sys/class/gpio/[GPIO] "のように表記します。
22.4.1. GPIOクラスディレクトリを作成する
/sys/class/gpio/export にGPIO番号を書き込むことによって、GPIOクラスディレクトリを作成することができます。
アドオンインターフェース(CON1) 3ピンに対応するGPIOクラスディレクトリを作成する例を次に示します。
| |
---|
作成済みのGPIOクラスディレクトリを削除するには、/sys/class/gpio/unexport にGPIO番号を書き込みます。
|
| |
---|
工場出荷イメージでは、Linux カーネルのコンフィギュレーションにてAIOTG_ADDON_AUTO_DETECTが有効化されています。
AIOTG_ADDON_AUTO_DETECTが有効化されていると、アドオンモジュールの自動認識機能が動作し、必要に応じてピンマルチプレクス設定などを行います。自動認識機能にて既に設定が行われているピンはGPIOクラスディレクトリの作成を行うことができません。
既に設定が行われているピンのGPIOクラスディレクトリを作成したい場合は、Linux カーネルのコンフィギュレーションにてAIOTG_ADDON_AUTO_DETECTを無効化してください。
Linux カーネルのコンフィギュレーションの変更方法については、「イメージをカスタマイズする」を参照してください。
|
GPIOディレクトリ以下のdirectionファイルへ値を書き込むことによって、入出力方向を変更することができます。directionに書き込む有効な値を次に示します。
表22.2 directionの設定 設定 | 説明 |
---|
high | 入出力方向をOUTPUTに設定します。出力レベルの取得/設定を行うことができます。出力レベルはHIGHレベルになります。 | out | 入出力方向をOUTPUTに設定します。出力レベルの取得/設定を行うことができます。出力レベルはLOWレベルになります。 | low | outを設定した場合と同じです。 | in | 入出力方向をINPUTに設定します。入力レベルの取得を行うことができますが設定はできません。 |
GPIOディレクトリ以下のvalueファイルから値を読み出すことによって、入力レベルを取得することができます。"0"はLOWレベル、"1"はHIGHレベルを表わします。入力レベルの取得は入出力方向がINPUT, OUTPUTのどちらでも行うことができます。
入出力方向がOUTPUTの時に読み出される値は、GPIOピンの状態です。そのため、valueファイルに書き込んだ値とは異なる場合があります。
GPIOディレクトリ以下のvalueファイルへ値を書き込むことによって、出力レベルを設定することができます。"0"はLOWレベル、"0"以外はHIGHレベルを表わします。出力レベルの設定は入出力方向がOUTPUTでなければ行うことはできません。
22.5. AR9462モジュールを使って2.4GHz帯で通信する使用例
2つの機器をサンプルにAR9462モジュールを使って2.4GHz帯で通信するときの使い方について説明します。
22.5.1. 「BVMCN1101AA」の信号を受信する
Braveridge社製のビーコン「BVMCN1101AA」を例にビーコン信号を受信する方法を説明します。
「BVMCN1101AA」のアドバタイジング・パケットを受信するためには、bluetoothctl コマンドを使います。
[bluetooth]のプロンプトが表示されたら、scan on で信号を受信できます。
ご利用の環境によっては、ほかの機器からの信号も受信されます。
スキャンを中止するには、scan off を実行します。
bluetoothctlを終了するには、exit を実行します。
外部のセンサーからデータを取得する例として、TEXAS INSTRUMENTS社製のセンサータグ「CC2650」を例にセンサータグをgatttool で操作する方法を説明します。
手順22.3 「CC2650」の操作手順
hcitool lescan を実行して、「CC2650」のMACアドレスを確認します。
ご利用の環境によっては、他の機器も検出されます。
「CC2650」に接続します。切断するには、Ctrl+c を入力してください。
プライマリサービスを確認するには、primary を実行します。
0x004c~0x0050でハンドルされているプロファイルのUUIDを確認するには、char-desc を実行します。
プロファイルの情報を読み取るには、char-read-hnd を実行します。
プロファイルの情報を設定するには、char-write-cmd を実行します。
操作を終了するには、exit を実行します。
22.6. sshでArmadillo-IoT G3に接続するssh-serverをインストールする sshでrootのログインを禁止する /etc/ssh/sshd_config内のPermitRootLogin をnoに設定します。
22.7. クローズドネットワークを使用する場合の再接続サービス設定変更
Armadillo-IoT G3の初期出荷設定では、再接続サービスが定期的に8.8.8.8へpingを実行し、疎通確認が取れない場合に3G/LTEの切断・再接続を試みます。
クローズドネットワークの場合、8.8.8.8と通信できないため3G/LTEの切断・再接続を試み続けてしまいます。
そのため、クローズドネットワークでは再接続サービスを停止するか、pingの送付先を疎通可能なアドレスに切り替える必要があります。
22.8. 3G/LTE のネットワークデバイス名に ttyCommModem を利用する
通信モジュール Quectel製 EC25-J 搭載の Armadillo にて、USBコネクタにセンサーなどを接続した状態で起動すると、ネットワークデバイス名が ttyUSB2 から変化することがあります。また WLAN+BT コンボモジュール搭載モデルでも同様の現象が発生することがあります。この場合、 3G/LTE 通信が正常に行われなくなります。
この状態は、ネットワークデバイスに ttyCommModem を利用することで回避可能です。
ttyCommModem は、表22.3「ttyCommModem が利用可能なパッケージのバージョン」に記載されているバージョン以降がインストールされている場合に利用可能です。
表22.3 ttyCommModem が利用可能なパッケージのバージョン パッケージ名 | バージョン |
---|
modemmanager | v1.6.4-1atmark6 | atmark-x1-base | v2.4.0-1 |
| |
---|
既に ttyUSB2 のコネクション設定が存在する場合、事前にコネクション設定を削除してください。
|
手順22.4 ttyCommModem の利用 /etc/ModemManager/symlink.conf の変更
/etc/ModemManager/symlink.conf を以下のように変更します。
| |
---|
本機能を有効にする場合、この行には quectel-ec25-symlink のみを記載してください。同じ行にタブ・スペースを含めたこれ以外の文字・記号が存在しますと、本機能が有効になりません。
|
ModemManager サービスの再起動
ModemManager サービスを、以下のように再起動させます。
ttyCommModem のコネクション作成
ネットワークデバイス名に ttyCommModem を指定します。
作成したコネクション設定で 3G/LTEのデータ通信が行われれば確認完了です。
| |
---|
利用するネットワークデバイスを ttyCommModem から ttyUSB2 に変更する場合、/etc/ModemManager/symlink.conf の quectel-ec25-symlink の行を以下のようにコメントアウトしてください。
|
22.9. 無線 LAN をアンテナ 1 本 (SISO) で動作させる
Armadillo-IoT ゲートウェイ G3 の無線 LAN は、アンテナ 2 本 (MIMO) での動作を標準としております。
ソフトウェアの設定を変更することでアンテナ 1 本 (SISO) での動作が可能となります。
| |
---|
使用する無線 LAN モジュールによって、設定方法と使用するコネクタ(ch0, ch1)が変わります。
|
| |
| | | |
| |