プログラムを作成した際に、依存しているライブラリのライセンスを確認する必要があると思います。その際に、リンクしているライブラリのソースコードを取得する必要があるため、指定のバイナリが使用しているライブラリのDebianパッケージ名、Debianソースパッケージ名を調べるためのシェルスクリプトを作ってみました。
以下のシェルスクリプトを作成し、ATDEで動かしてみてください。
プログラムを作成した際に、依存しているライブラリのライセンスを確認する必要があると思います。その際に、リンクしているライブラリのソースコードを取得する必要があるため、指定のバイナリが使用しているライブラリのDebianパッケージ名、Debianソースパッケージ名を調べるためのシェルスクリプトを作ってみました。
以下のシェルスクリプトを作成し、ATDEで動かしてみてください。
DebianパッケージをAtmark Distで作ったユーザーランドに追加する際に、バイナリを実行しても必要なファイルが見つからずに正常に起動しないことがあるかと思います。その際に、何が必要なファイルかを調べる方法を紹介します。
バイナリ実行時に必要なファイルは、open()システムコールで開かれます。そのため、バイナリ実行時にどのシステムコールが使用されたかを調べるstraceを使うことで、どのファイルをopen()しようとしたかを調べることができます。このstraceはLinuxのデバッグユーティリティであり、引数に渡されたバイナリが使用するシステムコールを見ることができます。
Atmark Distのコンフィギュレーションで選択できるstraceでは、ビルド時にエラーが発生するため、Debian Packagesからstraceのバイナリを持ってくる必要があります。
以下のページを参考に、straceをユーザーランドに追加してください。
Armadillo-810 製品マニュアルでは、/sys/class/video4linux/videoN/name(Nは数字が入ります)でどのデバイスファイルがどのカメラに対応するかを確認する方法が記載されています。この方法の場合、複数のカメラが接続されているとコマンドを複数回打つ必要があり面倒です。そのため、2014年11月の製品アップデートで追加されたv4l-utilsを使って、どのデバイスファイルが、どのカメラに対応しているか調べる方法を紹介します。
例として、Armadillo-810 カメラモデル開発セット(標準イメージ)の場合で説明します。 起動時には、以下のように/dev/video0と/dev/video1が作成されています。
[root@armadillo810-0 (ttySC2) ~]# ls -1 /dev/video* /dev/video0 /dev/video1
v4l-utilsに含まれるv4l2-ctlコマンドを、以下のように実行することで、どのデバイスファイルが、どのカメラに対応しているか調べることができます。
Armadillo-840/810開発セットに付属しているUSBシリアル変換アダプタ(FTDI 社製FT232RL内臓)をPCに接続しても、 自動でドライバが認識しない場合は、以下のサイトからダウンロードしてください。
http://www.ftdichip.com/Drivers/VCP.htm
「Currently Supported VCP Drivers」のx86(32bit) OR x64(64bit)
お使いのPCに合わせたOS/アーキテクチャのものをダウンロードしてください。
ユーザーモードqemuを使うと、amd64もしくはi386アーキテクチャのLinux上で、armアーキテクチャのバイナリが動かせます。 この仕組みを使って、ATDE上でArmadillo-800シリーズ用のDebian(armhfアーキテクチャ)を動かす方法を紹介します。
Armadillo上で動作しているプロセスの物理メモリ使用量を調べてみます。
Armadillo-440の標準イメージで自動起動されるfunctesterの場合、まずは
[root@armadillo440-0 (ttymxc1) ~]# ps | grep functester PID Uid VmSize Stat Command 1358 root 6352 S functester
でPIDを確認します。
/proc/[プロセスのID]/status
をcatで確認します。 上記のfunctesterの場合は、プロセスIDは1358なので、
Armadillo-400シリーズで使用可能であった、gpioctrlをArmadillo-840でも使用できるようにしてみたいと思います。 (注意) 実際にハードウェアを接続しての検証はしておりません。 あくまでソフトウェア的に移植をしたところまでですので、ご了承ください。
[9.9.2. Armadillo-200 シリーズ互換 GPIO ドライバー]
https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.1/ch09.html#sec-armadillo-200-series-gpio-driver
Howto : Armadillo-810/840で IEEE802.11ac USB無線LANアダプタ GW-450Sを動作させるを参考に、Armadillo-840のDebian環境(SDカード使用)でGW-450Sを使える環境を作成してみました。
Armadillo-400シリーズには、swmgrというスイッチを押した際に任意のコマンドを実行するツールが標準でインストールされていました。
[Armadillo-440 液晶モデル開発セット スタートアップガイド]
https://manual.atmark-techno.com/armadillo-4x0/armadillo-440_startup_guide_ja-1.1.9/ch09.html#sec-08-2
このswmgrをArmadillo-840でも使えるようにしてみます。
LANケーブル接続時にDHCPを使用して、IPアドレスを取得する方法として、 ifplugdを使用する方法があります。 以下、Armadilloでifplugdを使用する手順について説明いたします。
ソースコードをビルドする際に、特定のファイルが必要で、それをDebianパッケージからインストールしたい場合があると思います。そういった際に便利な方法です。
Armadillo-810/840でHALCONを利用したアプリを実行するとエラーが出力される場合があります。
2014年11月7日時点でHALCONエラーの要因が判明しているものについて記載します。
ライセンスファイル(/opt/halcon/license/license.dat)が存在しない場合に出力されます。
ライセンスファイル(/opt/halcon/license/license.dat)の内容がおかしい場合に出力されます。
Xサーバーに接続できない場合や、ウィンドウを開けない場合に出力されます。
過去に、Armadillo-810での作業中に、やらかしてしまった失敗談を参考まで。
とある問題の切り分けのためにフラッシュ用のboot loaderを、Hermit-At Winを使って、何回か書き換えている最中に、 hermitが立ち上がらなくなる事象が発生。
USBシリアル変換チップのスライドで、保守モードにしようがOS自動起動モードにしようが、シリアルコンソールには何も表示されない。 ハード故障かと思ったが、LEDは点灯しているし、問題はなさそう。
Hermit-At Winから再度書き換えたいが、targetにつながらないといわれる。 ふと再度Hermit-At Winの画面を見ると、前回フラッシュに書き込んだファイルが、SDカード用のboot loaderでした。
復旧方法は以下の通り。
1) Armadillo-810の拡張ボートBに、boot loader入りのSDカードを挿入
2) JP3をショートさせて、SDカード内からhermitを起動
3) 再度Hermit-At Winからフラッシュ用のboot loaderに書き換え
以上
Atmark Distで動かしていたQMLアプリケーションを、Debianへ移行した際のメモです。
Armadillo-840用のDebianユーザーランドにはQt5のパッケージがインストール済のため、 特にQt関係のパッケージ追加は必要なかった。
ただし日本語フォントが入っていなかったので、ひとまずtakaoフォントをインストールした。
#apt-get install ttf-takao-gothic
しかし以下のようにQMLを実行してみたが、タッチイベントに反応しない。
# QT_QPA_EGLFS_DISPLAY=1 # QT_QPA_EGLFS_WIDTH=800 # QT_QPA_EGLFS_HEIGHT=480 # qmlscene ./hoge.qml
調べた結果、pluginオプションでevdevtouchの指定が必要のようです。
開発したアプリケーションや、設定ファイルなどを、Atmark Distで作ったユーザーランドに配置する方法について紹介します。
Armadilloのユーザーランドには、「Atmark Dist」と「Debian GNU/Linux」が使用できます。 それぞれに特徴があり、どういった場面でどちらを使えば良いかわからない場合もあるかと 思います。 今回は、簡単にですが「Atmark Dist」と「Debian GNU/Linux」の選び方について紹介します。
Armadillo-840でQMLを使ってテキストを90度回転させるサンプルコードを書いてみました。
10秒かけて[Hello World]という文字が90度回転し、さらに10秒かけて元の表示位置に戻ります。
以前のブログでは USBでArmadillo-840とプリンタを接続しました。
https://users.atmark-techno.com/blog/750/969
今回試しているNP-2511はUSB以外にもRS232Cで接続することが可能で、ユーザーズガイドにもプリンタの
追加のための手順も記載されています。
今回はArmadillo-840とNP-2511をRS232Cで接続してみたいと思います。
DebianパッケージをAtmark Distにインストールする際に、依存関係を考慮する必要がある場合があります。 その際に、依存しているパッケージをインストールするのにさらに依存パッケージが存在していたりして、インストールするのに手間がかかります。 そのため、簡単にDebianパッケージの依存関係を再帰的に検索し、表示する方法を紹介します。
Armadillo-840のDebianイメージでは、そのままではAVコーデックミドルウェアが使えません。 今回はDebianでAVコーデックミドルウェアを使ったH.264/AACデコードを試してみます。
<***注意***>
本ブログの内容はArmadillo-840のフラッシュメモリに書き込まれているファームウェアが <squashfs-a800-firmware-v3.00.img>の場合でのみ動作します。
それ以外のファームウェアでは動作しませんのでご注意ください。
本文中に出てくる3つのファイルは、以下からダウンロードしてください。
acm_file.zip
製品出荷時に、ArmadilloにLinuxカーネルイメージや、ユーザーランドイメージを書き込むことがあるかと思います。 Hermit-Atのtftpdlコマンド等でイメージを書き込んだ後に、正常にNORフラッシュに書き込まれたのかどうかを確認したい場合もあるかと思います。 ここでは、Hermit-Atのmd5sumコマンドを使用し、イメージが正常に書き込まれているかどうかを確認する方法を紹介します。
Armadilloを使用している際に、作業用PCとのファイルの送受信を行いたい場合があるかと思います。 Ethernet経由や、USBメモリ等のストレージ経由でファイルを送受信することもできますが、 ネットワークの設定が必要であったり、ストレージを用意したりと面倒なこともあるかと思います。 そこで、Armadilloを使用する際に使うシリアル通信ソフト(ここではTeraTermを使用)のZMODEMを使い、 シリアル経由でファイルを送受信する方法を紹介します。
Armadillo-840で日本プリメックス社のUSBプリンタ(NP-2511)を動かそうと思います。
http://www.primex.co.jp/NPIServlet?viewpage=2&nextpage=3&BLGCode=40&ModelCode=57
ただしドライバがUbunts向けのrpmパッケージ(およびソースパッケージ)になります。 よってまずは、Ubunts向けのドライバをDebianで動かせるようにビルドしてみます。
ATDE5をデフォルトのまま使用していると、共有フォルダが自動的にマウントされません。 これはATDE5がopen-vmを使用しているためです。open-vmの代わりにVMware Toolsを インストールすると、自動的に共有フォルダがATDE5にマウントされます。 ここではopen-vmの変わりにVMware Toolsを使用するための方法について紹介します。
Armadillo上でコンフィギュレーションを確認するには、下記のコマンドで可能。
zcat /proc/config.gz
Armadillo-840のUSBホストにLightningケーブルでiPhone5/5Sを接続し、マウントをしてみた時の手順です。
https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_manual_ja-1.1.0/ch15.html
HDMIやDVIで接続するディスプレイでは、タッチパネルがUSBで接続するマルチタッチパネルになっている場合があります。 ここではUSBマルチタッチパネルを使用するための方法を紹介します。
Armadillo-840でQMLを使ってテロップ表示をするサンプルコードを書いてみました。 10秒かけて[Hello World]という文字がArmadillo-840のLCDの右から左に流れます。 流れる速さは duration: 10000 のところで変更します。 ついでに文字も毎回色が変わるようにしています。
多少カクカクするかもしれませんが、参考まで。
Armadillo-840を起動してもLCDには何も表示されませんが、 LCDに、シリアルコンソールに流れているログを表示する方法を試してみました。
QMLで等幅フォントを使いたくなった。
make menuconfig
を実行してユーザーランドコンフィグレーションで、TakaoGothicフォントを追加。
Userland Configuration Fonts ---> [*] TakaoGothic // デフォルトは空白なので、*を付ける。
QMLのコードでは、Textの中で font.family: "TakaoGothic" のように指定する。
Armadillo-840製品マニュアル 14.5. QMLのhello_qmlの場合は、
<font.familyの追加箇所を抜粋>
Armadillo-840は、Armadillo-400シリーズに比べイメージサイズが大きくなっているため起動時間が遅くなりがちです。 最終的に製品化する際には、起動時間を早めたい場合もあるかと思います。 そこで、Armadillo-840の標準イメージに入っている機能をけずり、どこまで起動時間を短縮できるかを試してみました。
iperfコマンドを使用して、ネットワークのスループットを測る方法を紹介します。
NPtcpコマンドを使用して、ネットワークのスループットを測る方法を紹介します。
以下の環境で、USBカメラからの画像をLCDに表示しつつ、USBメモリにH.264形式でエンコードしてファイル保存をしてみました。
Armadillo-840液晶モデル開発セット
保存用のUSBメモリをマウントします。
[root@armadillo840-0 (ttySC2) ~]# mount -t vfat /dev/sda1 /mnt
H.264エンコーダを有効にします。
ATDEで開発をしていると、WindowsでダウンロードしたファイルをATDE上で扱ったり、ATDE上で作成したファイルをWindows上で扱ったり等のファイル共有を行いたい場合があると思います。その場合は、VMwareの共有フォルダ機能を使うことで実現できます。 ここではではVMwareの共有フォルダ機能を使うための手順を紹介します。
開発時に、Linuxカーネルイメージ、ユーザーランドイメージを頻繁に変更することがあると思います。 その際に、毎回フラッシュに書き込むと時間がかかってしまいます。 そのため、起動時に自動的にTFTPサーバーからイメージをダウンロードし、そのイメージで起動する方法を紹介します。
ATDE5を立ち上げた状態で、しばらく操作しない状況が発生すると、再度操作する際にパスワード入力が必要になります(ロック機能)が、 ATDE5はVMware上で動かすため、ロック機能が特に必要のないことが多いかと思います。
そのため、ここではATDE5でロック機能を無効化する手順を紹介します。
以下の画面のように、メニューから「システム設定」を選択してください。
以下の画面が表示されますので、「画面の明るさとロック」を選択してください。
QWTは、Qt上でグラフ表示などを簡単に表示することができるライブラリです。 センサーからのデータを表示するときなどに使えます。 Armadillo-840でも動作させることが可能で、センサー等の結果を表示させる場合などに便利です。
Armadillo-840/810向けに、ATDE5で WLI-UC-GNMのドライバ(DPO_RT5572_LinuxSTA_2.6.1.3_20121022)を コンパイル際には、以下のHowToが参考になります。
[ Howto : Armadilloで11n 対応のUSB無線LANモジュール(GW-USMicroN)を使う ]
https://armadillo.atmark-techno.com/howto/11n-wlan-usb-module-gw-usmicron
ただし、make時に、明示的にアーキテクチャを指定しなければ、 以下のエラーログが出てしまうので注意が必要です。
HowToで公開されているArmadillo-840でArmadillo-810カメラモジュールを 使う方法をベースに、カメラ制御用のcamctrlを使う方法です
[Howto : Armadillo-840でArmadillo-810 カメラモジュール 01 (B コネクタ用)を使用する]
https://armadillo.atmark-techno.com/howto/a840-use-op-a810-cam01-00
まずはArmadillo-840のカーネルコンフィギュレーションでcamctrlを 有効にします。
Armadillo-840で、LCDに表示されている画面をキャプチャする方法を紹介します。
Armadillo-840には標準でGStreamerが入っていますので、そちらを利用してキャプチャします。
以下のコマンドでキャプチャすることができます。
[armadillo ~]# gst-launch-1.0 -e multifilesrc location=/dev/fb1 num-buffers=1 ! \ > "video/x-raw,width=800,height=480,format=BGRx,framerate=1/1" ! \ > videoconvert ! jpegenc ! filesink location=capture.jpg
jpegencなどをpngencなどに変更すれば、他の画像形式でもキャプチャすることができると思います。
QWTは、Qt上でグラフ表示などを簡単に表示することができるライブラリです。 センサーからのデータを表示するときなどに使えます。 Armadillo-840でも動作させることが可能で、センサー等の結果を表示させる場合などに便利です。 今回はArmadillo-840でQWTを動かす前に、デバッグ用にATDE5でQWTのサンプルアプリを動かす方法を紹介します。
Armadillo-840液晶モデル開発セットの拡張ボードに実装されている LED1(EXT1)を、Armadillo-840に電源が投入されてから常時点灯させる方法について。
Device Drivers ---> [*] LED Support ---> <*> LED Default ON Trigger ←チェックをつける
atmark@atde5:~/linux-3.4-at7/arch/arm/mach-shmobile$ vi board-armadillo840.c
static struct gpio_led gpio_leds_pins[]内の以下の部分の [none] を [default-on] に変更
以下のページを参考に、QMLでピンチアウト、ピンチインの動作ができるかどうかを確認しました。
http://developer.nokia.com/community/wiki/How_to_handle_pinch_gestures_using_PinchArea_item
Armadilloで動作させるためには、上記のサンプルスクリプトの以下の部分を必要でした。
1) 1行目のimport 1.1をimport 2.0に変更 2) 表示する画像をArmadilloに保存し、18行目の画像ファイルの場所を画像ファイルの場所に変更
※: 動作確認時は、Armadillo実践開発ガイド 第2部のmidomadillo.bmpを使用
以下のコマンドを実行し、スクリプトを起動します。
Armadillo-840はタッチスクリーンライブラリにマルチタッチ対応のmtdevを採用しています。 しかし抵抗膜式などのタッチスクリーンコントローラをArmadillo-840に接続する際には、mtdevではなく シングルタッチ向けのtslibを使いたくなるケースが出てきます。
ここでは、mtdevではなくtslibを使ってQtのアプリケーションを実行するまでの手順を記述します。
本記事は、Armadillo-840液晶モデル開発セットでの動作を想定したものではありません。
以下のタッチスクリーンコントローラ(TSC2007)を接続した環境で、試しております。
http://www.tij.co.jp/product/jp/tsc2007
(TSC2007を動かすためのカーネルの設定がすでに行われていることが前提となっています。)
Armadillo-440とArmadillo-840のLCD表示と同じ画面をPCのWebブラウザで見る方法を考えてみました。 フレームバッファをJPEGファイルにして、mjpg_streamerで見ることにしました。
添付 lcd2jpeg_a440.zip,
lcd2jpeg_a840.zip
の srcディレクトリ フレームバッファをJPEGファイル化するソース lcd2jpegを実行すると/var/tmp/for_lcd2jpeg/jpeg_file/lcd.jpg
にJPEGファイルが生成されます。
sample_exeディレクトリ lcd2jpegとmjpg_streamerの実行を組み合わせたサンプルスクリプトstart_lcd2mjpgを実行して、PCのWebブラウザで、URLを[ArmadilloのIPアドレス]:8080とすると
LCD表示と同じ画面が見れます。
補足)
Armadillo-840液晶モデルの拡張ボードには、オーディオコーデック(Wolfson WM8978)が 搭載されています。
http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_manual_ja-1.2.0/ch08.html#sct.kernel_spec.drivers.audio
拡張ボードのヘッドフォン出力(CON6)から、テストサウンドを再生するには、 以下のコマンドを実行します。
[root@armadillo840-0 (ttySC2) ~]#gst-launch-1.0 audiotestsrc ! \ "audio/x-raw,channels=2,rate=48000,width=16" ! \ alsasink device=hw:1
*以下も参照 http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_manual_ja-1.2.0/ch06.html#sct.audio
Armadillo-800シリーズでは、DisplayLink 社のチップが搭載された USB接続可能なモニタやディスプレイアダプタを簡単に使用することが できます。
USB接続モニタ(またはディスプレイアダプタ)を使用するには、 以下のLinuxカーネルコンフィギュレーションを変更してください。
Linux/arm 3.4-at6 Kernel Configuration Device Drivers ---> Graphics support ---> <*> Support for frame buffer devices ---> <*> Displaylink USB Framebuffer support ← 有効化
上記のコンフィギュレーションを設定したLinuxカーネルを使うことで、 USB接続モニタが/dev/fb2等のデバイスファイルから使用できるように なります。
http://stackoverflow.com/questions/20633654/create-a-multi-touch-qt-5-1-application
上記URLを参考に、Qtでマルチタッチができるかどうかを試してみました。
コードは以下の通り。