Armadillo-440シリーズのプロダクトディレクトリにあるGPIO制御のプログラムのgpioctrlを Armadillo-IoTで使用できるようにしてみた。
1.Armadillo-IoTのプロダクトディレクトリにgpioctrlを置く
ここでは、標準のプロダクトディレクトリ"Armadillo-IoTG-Std"を"my-iot"という名前にコピーした プロダクトディレクトリを使う。
Armadillo-440シリーズのプロダクトディレクトリにあるGPIO制御のプログラムのgpioctrlを Armadillo-IoTで使用できるようにしてみた。
ここでは、標準のプロダクトディレクトリ"Armadillo-IoTG-Std"を"my-iot"という名前にコピーした プロダクトディレクトリを使う。
過去にフォーラムで投稿されていた gst-plugins-bad をビルドする方法を、実際に試してみた際のメモです。
以下を参照して、SDカードに Debian環境を構築してArmadillo-840をDebianで起動してください。
https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_manual_ja-1.1.0/ch15.html
インターネットに接続できる状態にした後、まずは時刻合わせをします。
Windows向けに作成されたサンプルコードなどを、ATDE5で修正しようとすると、日本語や改行が正しく表示されないというケースがあるかと思います。
今回はATDE5上で、このようなファイルを一括で UTF-8に変換してみます。
まずはファイルの文字コードを調べてみます。コマンドは [ file ] を使います。
atmark@atde5:~$ file test.cpp test.cpp: C source, Non-ISO extended-ASCII text, with CRLF line terminators
Shift-JIS + 改行コードは CRLF のようです。
一括置換は [find] と [nkf] を組み合わせて使います。
Armadilloで標準で動作するエディタはviエディタでした。 viエディタは、テキスト入力時とファイル操作時でモードの切り替えが必要なので、慣れるまでが大変です。
Armadillo-IoTでは、joeエディタが動作します。 joeエディタは、テキスト入力時とファイル操作時でモードの切り替えが必要ありません。 joeエディタの基本操作は以下のとおりです。
・ファイルを開く
joe [ファイル名]
viエディタは、ファイルを開いた後、iまたはaを入力してテキスト入力モードに移行しないと、テキストが入力できませんでした。 joeエディタは、ファイルを開いた後、そのままテキスト入力できます。
・ファイル操作
Ctrl + c:終了
Ctrl + k, x:保存して終了
Ctrl + k, d:保存
Ctrl + Shift + -:undo
・ファイル操作
Ctrl + k, h:ヘルプ
ヘルプを開いたままテキストを編集できます。
Armadillo-IoT + Heroku(Node.js)でHello World に手を加えて、 Armadillo-IoTからHerokuに送信した文字をWebブラウザで見れるようにします。
Atmark Distに標準で入っているPythonはバージョンが古いため、ここではDebianパッケージを使用してPythonをユーザーランドに追加する方法を紹介します。
Atmark Dist等ダウンロードして展開しようとした場合に、エラーがでて正常に展開できない場合があるかと思います。その際に、ダウンロードしたファイルが壊れているかどうかを調べる方法について紹介します。
Armadillo-840+Qt(QML)でデモを作成してる中で、コマンド引数のようにQMLに対して何らかのパラメータを渡せないかを検討してみました。
Linuxカーネルのコンフィギュレーションを設定する場合に、 BACKLIGHT_LCD_SUPPORT等のシンボルはわかるものの、設定項目が どこにあるのかわからない時があるかと思います。 ここでは、「BACKLIGHT_LCD_SUPPORT」を元に設定項目が どこにあるのかを調べる方法を紹介します。
Linuxにはteeというコマンドがあります。このコマンドは標準出力とファイルの両方へ出力することができます。ここではAtmark Distのmakeコマンド実行結果を例に、コマンド実行結果をファイルに保存しつつ、コンソールにも表示する方法を紹介します。
例えば、make.logファイルにコマンド結果を保存しつつ、コンソールにも表示するには、以下のようなコマンドになります。
[ATDE ~/atmark-dist]# make 2>&1 | tee make.log
ソースコードのビルド時にエラーを記録するときなどに便利ですので、ぜひ使用してみてください。
製品化の際に、アプリケーションが動かなくなった場合などに再起動するためウォッチドッグタイマーを使用する場合があるかと思います。ここではウォッチドッグタイマーの使用方法について説明します。
ウォッチドッグタイマーにはハードウェアウォッチドッグタイマーと、ソフトウェアウォッチドッグタイマーがあります。
ハードウェアウォッチドッグタイマーはCPUのウォッチドッグタイマーの機能を使用しており、ブートローダー(Hermit-At)もしくは、Linuxカーネルで使用しています。そのため、ブートローダーやLinuxカーネルが正常に動作せず、ハードウェアウォッチドッグタイマーをキックできない場合にのみ自動的に再起動が行われます。そのため、アプリケーションが正常に動作しない場合等に使うことには向いていません。
ソフトウェアウォッチドッグタイマーは、Linuxカーネルが提供している機能です。アプリケーション等の死活監視を行う場合に使用することができます。製品化の際に、実装する場合はほぼソフトウェアウォッチドッグタイマーを使用する形になるかと思います。
そのため、ここではソフトウェアウォッチドッグタイマーを使用する方法を以下に紹介します。
Atmark Distにはシリアル-イーサネット変換通信を行うためのseri2ethというアプリが入っています。ここではseri2ethの使用方法について説明します。
Armadillo-460+LCD拡張ボード(OP-A400-LCD43EXT-L01)でQtを使ってみた。
USBメモリはmountコマンドで、マウントすることができます。 マウントコマンドについては、以下のマニュアルにも説明があります。
Armadillo-IoTのRS232アドオンモジュールのテストインタフェースのSPIを使ってみた。
Armadillo-IoT ゲートウェイ スタンダードモデル 製品マニュアル Armadillo-IoTベースボードマルチプレクス表 から、今回は、Armadillo-IoTのCON1にRS232アドオンモジュールを接続して、 RS232アドオンモジュールの CON4の35ピン:CSPI2_SCLK CON4の36ピン:CSPI2_MISO CON4の37ピン:CSPI2_MOSI CON4の50ピン:CSPI2_SS0 を使う。
Armadilloをインターネットに接続している状態で、グローバルIPアドレスは下記コマンドで確認できる。
[armadillo ~]# wget -q -O - ipcheck.ieserver.net
Armadillo-440でGPIOをI2Cにするドライバ(i2c-gpio)を実際に動作させてみた。
Armadillo-400シリーズハードウェアマニュアル5.3.6. CON9(拡張インターフェース1) - 「Armadillo-420/440」 の表5.16 CON9信号マルチプレクス - 「Armadillo-420/440」を参考に CON9_1(GPIO3_17)をSCL CON9_2(GPIO3_14)をSDA にすることにした。
以前、tcpdumpでArmadillo-840が受信したパケットをキャプチャする方法をご紹介しました。
Armadillo-840でtcpdumpを使う
このキャプチャしたデータを再送するためのツールに、tcpreplayというものがあります。
今回、こちらを使って見ましたので、ご紹介します。
パケットを再送信するのは、ATDE5からにしますので、ATDE5を用意します。
以下を参照してください。
http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_manual_ja-1.4.0/ch04.html#sct.before-work.setup-atde5
netflashコマンドでイメージをフラッシュ書いた後、正しく書かれたかチェックしたい場合があるかと思います。
ここでは、netflashコマンドで、正しくイメージが書かれたかどうかをチェックする機能について紹介します。
netflashには-Cオプションがあり、このオプションを付けることによって、指定されたイメージと同じイメージが、フラッシュにかかれているかどうかをチェックすることができます。
コマンド例としては、以下のようになります。
netflash -knubC -r /dev/flash/kernel linux.bin.gz
以下のコマンドを実行して、kernel領域にlinux-a400-1.08.bin.gzイメージを 書き込みます。この際オプションに"-b"を付けて自動的に再起動しないように しておきます。
Armadillo-840のDebian環境で動く hwlockコマンドのデバッグをするために、Debianパッケージをソースから持ってきてビルドした際のメモです。
以下を参照してください。
https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_manual_ja-1.1.0/ch15.html
$ apt-get install dpkg-dev
hwclockコマンドはutil-linuxパッケージに含まれます
Armadillo-IoTに搭載している3Gモジュール Sierra Wireless製 MC8090 は、/dev/ttyUSB3に対してATコマンドを発行することで、各種設定情報を参照可能ですが、今回は電波強度を調べてみました。
3Gがリンクアップしている状態で、以下のコマンドを発行します。
[armadillo ~]$ tip -l /dev/ttyUSB3 -s 115200 Connected. AT+WPOWER=1 ←ATコマンドを入力 +WPOWER: ENABLED! OK AT+WPOWER? ←ATコマンドを入力 +WPOWER: Status: 1 average RxM Power -68dBm, total samples 200 no valid WCDMA RxD Power value available! average Tx Power -18dBm, total samples 46 OK
以上
Armadillo-840でLANで受信したパケットをダンプして解析する手順をまとまめてみました。今回はRTPプロトコルで流れてくるH.264データをダンプ/解析してみたいと思います。
今回はtcpdumpのバイナリはDebianパッケージから持ってきます。
Heroku(Ruby+Sinatra)でHello Worldをやってみましたので、 その際の作業手順をまとめてみます。
以下のURLでHerokuのアカウントを作成してください。
以下のURLを参考にしHeroku toolbeltをインストールします。
以下のコマンドを実行し、toolbeltをATDE5にインストールしてください。
[atde ~]$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
以下のように適当なディレクトリを作成し、そこに移動します。
ネットワーク経由でArmadillo-440の赤LEDを点灯->消灯するプログラムをCGIで作ってみた。
1.下記のようなプログラムredled.cを作成する。
redled.c
Armadillo-WLANのアクセスポイントモードでdhcpdを動かして、IPアドレスを自動取得できるようにする。
今回は、Armadillo-810+ATB-A810WLANで確認した。
前提) Armadillo-810製品マニュアル第11章 ビルド手順に従い、ソースコードの準備ができているものとする。
1.ATDEにawl13のソースコードをダウンロードして、atmark-dist/awl13にリンクを貼る
Armadilloのカーネルソースにパッチを当てるときにpatchコマンドを使うが、なぜか「そのようなファイルやディレクトリはありません」といわれることがある。
atmark@atde5:~/work840/atmark-dist/linux-3.x$ patch -p1 < ../../hoge.patch bash: ../../hoge.patch: そのようなファイルやディレクトリはありません
ファイルはちゃんと~/work840に存在しているし、そもそも[../../hoge.patch]はTABキーによるファイル名補完で出てきたファイル名。
これはpatchを実行しているのがシンボリックリンクで指定されているディレクトリだからのよう。 linux-3.xはシンボリックリンクで、実際には一つ上のlinux-3.4-at4である。
Armadillo+Debian環境などでインターネットに接続して、apt-getなどで外部サーバに接続する必要があるが、外部接続時にGWに対してBasic認証によるユーザ名/パスワード入力を求められる環境があるかもしれません。
PCなどの場合は、ブラウザから適当なサイトにアクセスしてユーザ名/パスワードを入力してあげることで、後は認証不要でアクセスが可能になりますが、Armadiloの場合、X-Window、ブラウザなどの環境を構築するのは面倒です。
そういった場合は、以下のようにwgetで任意のページにアクセスし、その際にユーザ名、パスワードを一度指定することで、以降は、apt-getなども普通に使えます。
(xxxにはユーザ名、パスワードが入ります。)
[root@armadillo840-0 (ttySC2) ~]# wget --http-user=xxx --http-passwd=xxx http://armadillo.atmark-techno.com/files/downloads/armadillo-810/image/linux-a810-v1.04.bin.gz
以上
Armadillo-400シリーズハードウェアマニュアル3.2.2. 電源回路の構成 -「Armadillo-420/440」の 「Armadillo-420/440のUSBインターフェースからUSBデバイスに供給する電源は、 CON12(またはCON13)の電源入力VINと電源ICで生成される+5V電源のどちらかを選択することが可能です。」 より、USB電源の供給源を設定してみる。
USB電源の供給源が、電源入力(VIN)か、電源ICの5Vかは、Linuxカーネルのソースコード atmark-dist/linux-2.6.x/arch/arm/mach-mx25/board-armadillo400.h の80行目付近で下記のように指定されている。
atmark-distにdiffコマンドは含まれていない。 Howto : Debianのパッケージに含まれるコンパイル済みのバイナリをArmadilloで動作させる方法を参考に Armadilloでdiffコマンドを実行できるようにした。
1.DebianパッケージをATDEにダウンロードする
[atde ~]$ wget http://archive.debian.org/debian-archive/debian/pool/main/d/diffutils/diff_2.8.1-12_armel.deb [atde ~]$ ls diff_2.8.1-12_armel.deb
2.パッケージを展開する(本例では、~/temp-dirに展開)
Armadillo-IoTの標準のユーザーランドにruby-serialportが入っているので、 rubyでシリアルエコーサーバーを作ってみました。
以下、ソースコードです。
Armadillo-IoTにはfluentdがプリインストールされているので、
簡単にTreasureDataなどのデータベースに計測データやログなどを入れることができます。
今回は、FluentdプロジェクトのスポンサーであるTreasureDataにデータを溜める方法を紹介します。
まずは、TreasureDataを利用するのに必要なアカウントを作成します。
14日間無償で利用できるので、評価や使い方を学ぶ程度であれば問題ないと思います。
TreasureDataのWebサイトで「今すぐ試す」をクリックして、サインアップします。
メールアドレスのみでアカウントを作成できます。
Armadillo-840では、AVコーデックミドルウェアによりカメラからの入力画像をH.264にエンコードすることができます。 今回は、USBカメラからの画像をJPEGファイルに連続して保存し、ffmpegで動画ファイルに変換するということを試してみます。 ffmegはDebianパッケージのバイナリを使うことにします。
Armadillo-IoTとHeroku(Node.js)でHello Worldをやってみましたので、 その際の作業手順をまとめてみます。
ここではATDE5でNode.jsを動かすために、Node.jsをインストールします。(ローカルで動作させる環境が不要な場合はこの章の手順は不要です)
Node.jsのパッケージ(nodejs, nodejs-legacy)は、ATDE5のベースであるDebian wheezyにはパッケージがありません。そのためbackportから取ってくる必要があります。
ここでは以下のURLを参考にATDE5にNode.jsをインストールします。
まずは/etc/apt/sources.list.d/backports.listファイルを以下の内容で作成してください。
Armadilloの標準イメージには、viエディタが入っています。しかしviエディタは操作方法が特殊であり使いにくいという人もいます。 そのため、Debian GNU/Linuxでも標準のエディタになっているnanoをAtmark Distに追加してみました。
インターネットイニシアティブ(IIJ)のSEILブログにArmadillo-IoTを
SACMに対応させる方法について記載されているので、試してみました。
SACMについては、リモートから色々とできそうなので興味があります。
■ ArmadilloとSACM - SEILブログ
http://www.seil.jp/blog/armadillo_sacm
■ SEIL公式サイト
http://www.seil.jp/
libarms動作検証用SACM利用申請を行うと確認用メールが届きます。
3日ですか。。
待ってる間に次に進むことにしました。
現時点(2015年2月12日時点)では発売前の「BLEアドオンモジュール BT00」(※1)を利用してみました。
今回は、Braveridge社製のビーコン「BVMCN1101AA」 (※2)を利用し、アドバタイジング・パケットを
受信した場合にそのビーコン情報を他のプログラムで処理することができるようにスクリプトを書いてみました。
※1. Armadillo-IoT BLEアドオンモジュール BT00 - Armadilloサイト
※2. Bluetooth Beacon (ビーコン) - Braveridge
Armadillo-400シリーズで、Debianのrsh-clientパッケージをもってきて、とあるrsh-serverに対して任意のコマンドを実行しようとしたところ、connection timeoutとなりました。
ATDE3(Debian)から同様なことを実施したところ成功したので、rsh-server側の問題ではありません。
こういった場合、WireSharkなどを使うと便利です。
http://sourceforge.jp/projects/wireshark/
実際にパケットをキャプチャすると、rsh-server側からArmadilloの1022および1023ポートに対して接続に来ていることがわかりました。このポートはArmadilloのiptableで弾いています。
よって、以下のようにArmadilloの1022、1023ポートを解放することで、解決できました。
Armadillo-IoTでIoTができるということで、データ分析を試してみたくなった。
簡単に試せる環境がないか探していると、どうもkibanaというモノでデータを可視化して分析できるらしい。
ということで、kibanaをATDEにインストールしてみたので、その時のメモを貼り付ける。
どうもkibanaというのは、データを可視化するためだけのアプリケーションのようで、データはelasticsearchに入っているものを使うらしい。
ということで、まずはelasticsearchをインストールする。
elasiticsearchの公式ページのインストール方法を参考に、apt-getでelasticsearchが取れるようにしてみる。
ATDEをVMware Player等(以降VMware)を使用していると、VMwareのウインドウにフォーカスが 移ってしまうとAlt+Tabでタスク切り替えをしようと思っても、ホストOSのタスクに切り替わらない。(ゲスト側でタスク切り替えすることになる) キーボードを使ってタスク切り替えをすることが多いので、これでは不便ということでVMwareのユニティモードを使い、ホストOSのウインドウとして、ATDEのアプリケーションを立ち上げる方法を紹介します。
Armadillo-810/840のfirmwareパーティションは、SquashFSファイルシステムで作成されています。 firmwareパーティションは、Armadillo特有のAVコーデックミドルウェアや、OpenGL ES2 ライブラリが含まれます。
今回は、AVコーデックミドルウェアや、Qt(OpenGLが必要)等を使わない場合で、 firmwareパーティションを変更したい時に、SquashFSファイルシステムのイメージを作成する方法を紹介します。
SquashFSファイルシステムのイメージを作るためには、mksquashfsコマンドを使用します。
以下の様にコマンドを実行することで、SquashFSファイルシステムのイメージが作成されます。
[atde ~]$ mksquashfs イメージ化したいディレクトリ イメージファイル名 -comp xz
※: 「イメージ化したいディレクトリ」、「イメージファイル名」は適宜変更してください。
Armadillo-440液晶開発セットで、Qtを使ってLCDタッチパネルにタッチした位置を表示するサンプルプログラム。 Qtの開発環境については、下記URLを参考
参考URL)
以下、Howto : Armadillo-440でQt! 第3回を最後まで実行したQtCreatorのプロジェクトを使う。 mainwindow.hとmainwindow.cppを以下のように変更する。(追加箇所には、/ /でコメントしてある。) ビルドして実行すると、LCD拡張ボードのスイッチ(SW1、SW2、SW3)を押すと、LCDに対応するスイッチ名が表示される。
1.カーネルの修正
Armadillo-440液晶開発セットで、Qtを使ってLCDタッチパネルにタッチした位置を表示するサンプルプログラム。 Qtの開発環境については、下記URLを参考
参考URL)
以下、Howto : Armadillo-440でQt! 第3回を最後まで実行したQtCreatorのプロジェクトを使う。 mainwindow.hとmainwindow.cppを以下のように変更する。(追加箇所には、/ /でコメントしてある。) ビルドして実行すると、Mainwindow上にLCDにタッチした位置が"(258, 170)"のように表示される。
mainwindow.h
カーネル起動時にUSBのプローブが有効になっていると、 認識された順番にデバイスファイルの末尾の番号がつく。
例えば、Armadillo-IoT開発セットの場合、3Gモジュールには、ttyUSB[0-4]が割り当てられるが、 USBコネクタにUSB-シリアル変換ケーブルを挿入した状態で起動すると、 USB-シリアル変換ケーブル:ttyUSB0 3Gモジュール:ttyUSB[1-4] のように3Gモジュールのデバイスファイルの番号がずれる。 補足)本例では、カーネルコンフィギュレーションのUSBサポートの機能で、シリアル変換のサポートを有効にしているものとする。
このような番号ずれを防ぐ方法としては、delayed_probeという方法がある。
本例について、USBコネクタにさしたデバイスを、3Gモジュールより後で認識させる場合は、 make menuconfigでカーネルコンフィギュレーションを
ATDE3の VMware仮想イメージファイルは、Oracle社のVirtual BOXでも起動することが可能です。
インストール方法は省略いたします。このブログではバージョン 4.3.12 を使用しています。
任意のフォルダに弊社Webサイトで公開しているATDE3の仮想イメージファイルを展開してください。
ATDE5の VMware仮想イメージファイルは、Oracle社のVirtual BOXでも起動することが可能です。
インストール方法は省略いたします。このブログではバージョン 4.3.12 を使用しています。
任意のフォルダに弊社Webサイトで公開しているATDE5の仮想イメージファイルを展開してください。
展開の方法は以下のHowToも参考にしてください。
https://armadillo.atmark-techno.com/howto/tar_xz-extract
プログラムを作成した際に、依存しているライブラリのライセンスを確認する必要があると思います。その際に、リンクしているライブラリのソースコードを取得する必要があるため、指定のバイナリが使用しているライブラリのDebianパッケージ名、Debianソースパッケージ名を調べるためのシェルスクリプトを作ってみました。
以下のシェルスクリプトを作成し、ATDEで動かしてみてください。
Armadillo-IoTで簡易的に任意のRubyライブラリを追加するには、
/usr/lib/ruby/vendor_ruby/ディレクトリにライブラリファイルを配置する
ことで利用できるようになります。
ここでは、WebSocketのシンプル実装である「websocket-client-simple」を
追加する例を記載してみます。
参照: https://rubygems.org/gems/websocket-client-simple
尚、本項では簡易的な手順を示すため、ユーザーランドイメージを作成することはありません。
Armadillo-IoTにログインして、下記のようにwgetコマンドなどでライブラリを配置します。
Armadillo-810の標準イメージではUVCガジェットが起動しているので、USBカメラのように使うことも可能です。 以下のマニュアルには、ATDE5上で guvcviewというツールを使ってArmadillo-810で撮影した画像を確認する方法が 記載されています。
[ 6.2.1. UVCガジェット ]
https://manual.atmark-techno.com/armadillo-810/armadillo-810_product_manual_ja-1.6.0/ch06.html#sct.usb_gadget-uvc
ただしPCのスペックなどによりリソース不足でguvcviewが起動できないケースもあるかもしれません。 ATDE5上ではなく、以下のようなWindowsアプリケーションをインストールすることで、ATDE5を介さずに、直接Windows上でArmadillo-810の画像を確認することができますよ。
以下に公開しているHowToでは、OpenCVのサンプルコードをATDE5上でクロスビルドしています。 これだと、サンプルを直すたびに、Armadillo-810への転送が必要になるので面倒です。
[ Howto : Armadillo-810でOpenCVを用いた画像処理 ]
https://armadillo.atmark-techno.com/howto/armadillo-810-opencv
ここではArmadillo-810上にコンパイルに必要な環境と、OpenCVのライブラリをインストールして、 Armadillo-810上でビルドする方法をご紹介します。
DebianパッケージをAtmark Distで作ったユーザーランドに追加する際に、バイナリを実行しても必要なファイルが見つからずに正常に起動しないことがあるかと思います。その際に、何が必要なファイルかを調べる方法を紹介します。
バイナリ実行時に必要なファイルは、open()システムコールで開かれます。そのため、バイナリ実行時にどのシステムコールが使用されたかを調べるstraceを使うことで、どのファイルをopen()しようとしたかを調べることができます。このstraceはLinuxのデバッグユーティリティであり、引数に渡されたバイナリが使用するシステムコールを見ることができます。
Atmark Distのコンフィギュレーションで選択できるstraceでは、ビルド時にエラーが発生するため、Debian Packagesからstraceのバイナリを持ってくる必要があります。
以下のページを参考に、straceをユーザーランドに追加してください。