本章では、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. ルートファイルシステムへの書き込みと電源断からの保護機能
Armadillo-IoT G3Lのルートファイルシステムは、標準で eMMC に配置されます。
Linux が稼動している間は、ログや、設定ファイル、各種アプリケーション
によるファイルへの書き込みが発生します。もし、停電等で終了処理を実行できずに
電源を遮断した場合はRAM上に残ったキャッシュがeMMCに書き込まれずに、
ファイルシステムの破綻やファイルの内容が古いままになる状況が発生します。
また、eMMC内部の NAND Flash Memory には消去回数に上限があるため、書き込み
回数を制限することを検討する必要がある場合もあります。
そこで、Armadillo-IoT G3L では、overlayfs を利用して、eMMCへの書き込み保護を行う機能を提供しています。
eMMCへの書き込み保護を使うには、kernelの起動オプションに"overlay=50%" ("=50%" は省略可、"overlay"のみ書くとRAMの50%を使用)というパラメタを追加するだけです。
パラメタを追加すると、debian の起動前に initramfs によってルートファイルシステムが upper=RAMディスク(tmpfs)、
lower=eMMC(ext4)としたoverlayfs に切り替えられて、Debianが起動します。
overlayfs の機能によって、起動後のルートファイルシステムに対する差分は、
全てRAMディスク( /overlay/ramdisk にマウント) に記録されるようになりま
す。そのため、起動後の情報は保存されませんが、電源を遮断した場合でも、
eMMCは起動前と変らない状態のまま維持されています。
kernelの起動オプションの指定を行うにはArmadillo-IoT G3Lを保守モードで起動し、次のようにコマンドを実行してください。
| |
---|
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.3. RS422/RS485 シリアルポートで通信を行なう
RS422/RS485 シリアルポートを使って、他の機器と通信する手順について説明します。
手順20.2 RS485 シリアルポートを用いた通信
対向機器と接続
表17.5「メインユニットCON4 信号配列」を確認し、Armadillo-IoT G3LのCON4と対向機器を接続します。
RS485の通信設定
保守モードで起動し、Linuxカーネル起動オプションでRS485設定を行います。
例として、RS485設定を全二重通信にします。
TTYデバイスの設定
Linux起動後、接続した対向機器に合わせてTTYデバイスファイルを設定します。
例として、sttyコマンドでボーレートを115200bpsに設定します。
データの送受信
TTYデバイスファイルに任意のデータを書き込むことで、データを送信することができます。
例として、"hoge"という文字列を送信します。
対向機器からデータを受信するには、TTYデバイスファイルをcatコマンド等でオープンしてください。
例として、受信したデータをrecvdataというファイルに出力します。
20.4. WL1837MODモジュールを使って2.4GHz帯で通信する使用例
2つの機器をサンプルにWL1837MODモジュールを使って2.4GHz帯で通信するときの使い方について説明します。
20.4.1. 「BVMCN1101AA」の信号を受信する
Braveridge社製のビーコン「BVMCN1101AA」を例にビーコン信号を受信する方法を説明します。
「BVMCN1101AA」のアドバタイジング・パケットを受信するためには、bluetoothctl
コマンドを使います。
[bluetooth]のプロンプトが表示されたら、scan on
で信号を受信できます。
ご利用の環境によっては、ほかの機器からの信号も受信されます。
スキャンを中止するには、scan off
を実行します。
bluetoothctlを終了するには、exit
を実行します。
外部のセンサーからデータを取得する例として、TEXAS INSTRUMENTS社製のセンサータグ「CC2650」を例にセンサータグをgatttool
で操作する方法を説明します。
手順20.3 「CC2650」の操作手順
hcitool lescan
を実行して、「CC2650」のMACアドレスを確認します。
ご利用の環境によっては、他の機器も検出されます。
「CC2650」に接続します。切断するには、Ctrl+c を入力してください。
プライマリサービスを確認するには、primary
を実行します。
0x004c~0x0050でハンドルされているプロファイルのUUIDを確認するには、char-desc
を実行します。
プロファイルの情報を読み取るには、char-read-hnd
を実行します。
プロファイルの情報を設定するには、char-write-cmd
を実行します。
操作を終了するには、exit
を実行します。
20.5. 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.MX7DualのRTC機能を割り当てています。
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.MX7DualのRTC機能が割り当てられ、/dev/rtc0
にBoard Management ICのRTC機能が割り当てられます。
aliases {
rtc0 = &rtc;
rtc1 = "/soc/aips-bus@30000000/snvs@30370000/snvs-rtc-lp@34";
};