本章では、Armadillo-IoT のソフトウェアをカスタマイズをする方法などについて説明します。
コンフィギュレーションを変更してLinuxカーネルイメージをカスタマイズする方法を説明します。
手順20.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)が作成されています。
20.2. dumprootfs を用いた Debian GNU/Linux ルートファイルシステムアーカイブの構築
dumprootfsを使うと、量産やバックアップのために、すでに動作しているArmadilloに加えた変更を別のArmadilloで再現するためのアーカイブをつくることができます。
実行するとDebian/Linuxルートファイルシステムから自動的にデータを抽出するため、不要なファイルが含まれる可能性があります。
コピー対象から外したいファイルは、以下の説明にあります「ルートファイルシステムアーカイブにコピーしないファイルの指定」を参照し設定を行ってください。
dumprootfs コマンドを実行するには、 USBメモリ(またはSDカード)が必要となります。
コマンド実行時、 USBメモリ(またはSDカード)のデータはすべて削除されますので、予めデータを退避させてください。
手順20.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
が作成されています。
20.3. ルートファイルシステムへの書き込みと電源断からの保護機能
Armadillo-IoT G3Lのルートファイルシステムは、標準で eMMC に配置されます。
Linux が稼動している間は、ログや、設定ファイル、各種アプリケーション
によるファイルへの書き込みが発生します。もし、停電等で終了処理を実行できずに
電源を遮断した場合はRAM上に残ったキャッシュがeMMCに書き込まれずに、
ファイルシステムの破綻やファイルの内容が古いままになる状況が発生します。
また、eMMC内部の NAND Flash Memory には消去回数に上限があるため、書き込み
回数を制限することを検討する必要がある場合もあります。
そこで、Armadillo-IoT G3L では、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 G3Lを保守モードで起動し、次のようにコマンドを実行してください。
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 G3L の eMMC の記録方式は出荷時に SLC に設定しており、MLC 方式の eMMC よりも消去回数の上限が高くなっています。
そのため、開発するシステムの構成によってはeMMCへの書き込み保護機能を必要としない可能性があります。
|
| |
---|
eMMCへの書き込み保護機能を有効にすると、eMMCを安全に使用できるというメリットがありますが、その分、使用できるRAMサイズが減る、システム構成が複雑になる、デメリットもあります。
開発・運用したいシステムの構成、eMMCへの書き込み保護機能のメリット・デメリットを十分に考慮・評価したうえで、保護機能を使用する、しないの判断を行ってください。
|
20.4. RS422/RS485 シリアルポートで通信を行なう
RS422/RS485 シリアルポートを使って、他の機器と通信する手順について説明します。
手順20.3 RS485 シリアルポートを用いた通信
対向機器と接続
表17.5「メインユニットCON4 信号配列」を確認し、Armadillo-IoT G3LのCON4と対向機器を接続します。
RS485の通信設定
保守モードで起動し、Linuxカーネル起動オプションでRS485設定を行います。
例として、RS485設定を全二重通信にします。
TTYデバイスの設定
Linux起動後、接続した対向機器に合わせてTTYデバイスファイルを設定します。
例として、sttyコマンドでボーレートを115200bpsに設定します。
データの送受信
TTYデバイスファイルに任意のデータを書き込むことで、データを送信することができます。
例として、"hoge"という文字列を送信します。
対向機器からデータを受信するには、TTYデバイスファイルをcatコマンド等でオープンしてください。
例として、受信したデータをrecvdataというファイルに出力します。
20.5. WL1837MODモジュールを使って2.4GHz帯で通信する使用例
2つの機器をサンプルにWL1837MODモジュールを使って2.4GHz帯で通信するときの使い方について説明します。
20.5.1. 「BVMCN1101AA」の信号を受信する
Braveridge社製のビーコン「BVMCN1101AA」を例にビーコン信号を受信する方法を説明します。
「BVMCN1101AA」のアドバタイジング・パケットを受信するためには、bluetoothctl
コマンドを使います。
[bluetooth]のプロンプトが表示されたら、scan on
で信号を受信できます。
ご利用の環境によっては、ほかの機器からの信号も受信されます。
スキャンを中止するには、scan off
を実行します。
bluetoothctlを終了するには、exit
を実行します。
外部のセンサーからデータを取得する例として、TEXAS INSTRUMENTS社製のセンサータグ「CC2650」を例にセンサータグをgatttool
で操作する方法を説明します。
手順20.4 「CC2650」の操作手順
hcitool lescan
を実行して、「CC2650」のMACアドレスを確認します。
ご利用の環境によっては、他の機器も検出されます。
「CC2650」に接続します。切断するには、Ctrl+c を入力してください。
プライマリサービスを確認するには、primary
を実行します。
0x004c~0x0050でハンドルされているプロファイルのUUIDを確認するには、char-desc
を実行します。
プロファイルの情報を読み取るには、char-read-hnd
を実行します。
プロファイルの情報を設定するには、char-write-cmd
を実行します。
操作を終了するには、exit
を実行します。
20.6. sshでArmadillo-IoT G3Lに接続する
ssh-serverをインストールする
sshでrootのログインを禁止する
/etc/ssh/sshd_config内のPermitRootLogin をnoに設定します。
linux-3.14-x1-at14以降のArmadillo-IoT G3L用のDTB(armadillo_iotg_g3l.dtb
)では、/dev/rtc0
にi.MX 7DualのRTC機能を割り当てています。
linux-3.14-x1-at13以前のように、/dev/rtc0
にBoard Management ICのRTC機能を割り当てるには、DTBを変更する必用があります。
linux-3.14-x1-at14以降では、arch/arm/boot/dts/armadillo_x1l.dts
でRTCのデバイスファイル名をエイリアスで指定しています。
aliases {
rtc0 = "/soc/aips-bus@30000000/snvs@30370000/snvs-rtc-lp@34";
rtc1 = &rtc;
};
次のようにrtc0とrtc1の記述を入れ替えビルドすると、at13以前と同様に/dev/rtc1
にi.MX 7DualのRTC機能が割り当てられ、/dev/rtc0
にBoard Management ICのRTC機能が割り当てられます。
aliases {
rtc0 = &rtc;
rtc1 = "/soc/aips-bus@30000000/snvs@30370000/snvs-rtc-lp@34";
};
20.8. LTE のネットワークデバイス名に ttyCommModem を利用する
通信モジュール Telit 製 ELS31-J 搭載の Armadillo にて、USBコネクタにセンサーなどを接続した状態で起動すると、ネットワークデバイス名が ttyACM0 から変化することがあります。
この場合、LTE通信が正常に行われなくなります。
この状態は、ネットワークデバイスに ttyCommModem を利用することで回避可能です。
| |
---|
既に ttyACM0 のコネクション設定が存在する場合、事前にコネクション設定を削除してください。
|
手順20.5 ttyCommModem の利用
/etc/ModemManager/symlink.conf の変更
/etc/ModemManager/symlink.conf を以下のように変更します。
| |
---|
本機能を有効にする場合、この行には cinterion-els31-symlink のみを記載してください。同じ行にタブ・スペースを含めたこれ以外の文字・記号が存在しますと、本機能が有効になりません。
|
ModemManager サービスの再起動
ModemManager サービスを、以下のように再起動させます。
ttyCommModem のコネクション作成
ネットワークデバイス名に ttyCommModem を指定します。
作成したコネクション設定で LTEのデータ通信が行われれば確認完了です。
| |
---|
利用するネットワークデバイスを ttyCommModem から ttyACM0 に変更する場合、/etc/ModemManager/symlink.conf の cinterion-els31-symlink の行を以下のようにコメントアウトしてください。
|