Armadillo-460+LCD拡張ボード(OP-A400-LCD43EXT-L01)でQtを使ってみた。
個人別ブログ
at_kazutaka.bito さんのブログ
-
at_kazutaka.bito
-
at_kazutaka.bito
Armadillo-IoTのRS232アドオンモジュールのテストインタフェースのSPIを使ってみた。
1.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 を使う。
-
at_kazutaka.bito
Armadilloをインターネットに接続している状態で、グローバルIPアドレスは下記コマンドで確認できる。
[armadillo ~]# wget -q -O - ipcheck.ieserver.net
-
at_kazutaka.bito
Armadillo-440でGPIOをI2Cにするドライバ(i2c-gpio)を実際に動作させてみた。
1.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 にすることにした。
-
at_kazutaka.bito
ネットワーク経由でArmadillo-440の赤LEDを点灯->消灯するプログラムをCGIで作ってみた。
1.下記のようなプログラムredled.cを作成する。
redled.c -
at_kazutaka.bito
Armadillo-WLANのアクセスポイントモードでdhcpdを動かして、IPアドレスを自動取得できるようにする。
今回は、Armadillo-810+ATB-A810WLANで確認した。
前提) Armadillo-810製品マニュアル第11章 ビルド手順に従い、ソースコードの準備ができているものとする。
1.ATDEにawl13のソースコードをダウンロードして、atmark-dist/awl13にリンクを貼る
-
at_kazutaka.bito
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行目付近で下記のように指定されている。
-
at_kazutaka.bito
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に展開)
-
at_kazutaka.bito
Armadillo-440液晶開発セットで、Qtを使ってLCDタッチパネルにタッチした位置を表示するサンプルプログラム。 Qtの開発環境については、下記URLを参考
参考URL)
- Howto : Armadillo-440でQt! 第2回
- http://armadillo.atmark-techno.com/howto/armadillo-440-qt-2
- Howto : Armadillo-440でQt! 第3回
- http://armadillo.atmark-techno.com/howto/armadillo-440-qt-3
以下、Howto : Armadillo-440でQt! 第3回を最後まで実行したQtCreatorのプロジェクトを使う。 mainwindow.hとmainwindow.cppを以下のように変更する。(追加箇所には、/ /でコメントしてある。) ビルドして実行すると、LCD拡張ボードのスイッチ(SW1、SW2、SW3)を押すと、LCDに対応するスイッチ名が表示される。
1.カーネルの修正
- Howto : Armadillo-440でQt! 第2回
-
at_kazutaka.bito
Armadillo-440液晶開発セットで、Qtを使ってLCDタッチパネルにタッチした位置を表示するサンプルプログラム。 Qtの開発環境については、下記URLを参考
参考URL)
- Howto : Armadillo-440でQt! 第2回
- http://armadillo.atmark-techno.com/howto/armadillo-440-qt-2
- Howto : Armadillo-440でQt! 第3回
- http://armadillo.atmark-techno.com/howto/armadillo-440-qt-3
以下、Howto : Armadillo-440でQt! 第3回を最後まで実行したQtCreatorのプロジェクトを使う。 mainwindow.hとmainwindow.cppを以下のように変更する。(追加箇所には、/ /でコメントしてある。) ビルドして実行すると、Mainwindow上にLCDにタッチした位置が"(258, 170)"のように表示される。
mainwindow.h
- Howto : Armadillo-440でQt! 第2回
-
at_kazutaka.bito
カーネル起動時にUSBのプローブが有効になっていると、 認識された順番にデバイスファイルの末尾の番号がつく。
例えば、Armadillo-IoT開発セットの場合、3Gモジュールには、ttyUSB[0-4]が割り当てられるが、 USBコネクタにUSB-シリアル変換ケーブルを挿入した状態で起動すると、 USB-シリアル変換ケーブル:ttyUSB0 3Gモジュール:ttyUSB[1-4] のように3Gモジュールのデバイスファイルの番号がずれる。 補足)本例では、カーネルコンフィギュレーションのUSBサポートの機能で、シリアル変換のサポートを有効にしているものとする。
このような番号ずれを防ぐ方法としては、delayed_probeという方法がある。
本例について、USBコネクタにさしたデバイスを、3Gモジュールより後で認識させる場合は、 make menuconfigでカーネルコンフィギュレーションを
-
at_kazutaka.bito
1.ATDEを起動して、MicroSDカードを接続してアンマウントする
SDカードを接続すると自動的にマウントされる
[atde ~]$ mount /dev/sdb1 on /media/略
ので、下記コマンドでアンマウントする。
[atde ~]$ sudo umount /dev/sdb1
2.fdiskコマンドでMicroSDカードのパーティションを構成
-
at_kazutaka.bito
準備)
Armadilloで、転送したいファイルを /home/www-dataに置く。下記例において、
- ArmadilloのIPアドレス:192.168.10.10
- 転送したいファイル:log10.txt
とする。
方法1:htmlを使う
<a href="http://192.168.10.10/log10.txt" download="log10.txt"> Armadillo log </a> </br>
という内容のhtmlファイルを作る。
htmlファイルをダブルクリックするとWebブラウザが開いて。 Armadillo log という文字が表示される。
当方が使ったWebブラウザはFirefox。
Armadillo logの文字を右クリックして、 名前を付けてリンク先を保存 すると、log10.txtがダウンロードされる。
-
at_kazutaka.bito
Armadilloを標準イメージで起動すると、 /etc/network/interfaces の
auto lo eth0 iface eth0 inet dhcp
に基づきDHCPでアドレスを取得するようにネットワーク設定される。
上記の設定でArmadilloを起動後、固定IPアドレスに変更するには、下記のようにifconfigコマンドで設定できる。
[armadillo ~]# ifconfig eth0 192.168.10.0 up
ただし、長時間たつとIPアドレスが変更されることがある。
これは、DHCPクライアントのプロセス
- atmark-distを使用している場合、udhcpc
- Debianを使用している場合、dhclient3
が動作していることが要因のようなので、DHCPクライアントを止める。
・恒久的な方法:DHCPクライアント動作させない
-
at_kazutaka.bito
ifconfigコマンドを使えば、IPアドレスを簡単に設定できる
[armadillo ~]# ifconfig eth0 192.168.11.36 up
helpを読むと他にも設定できることがわかった。 broadcastは
[armadillo ~]# ifconfig eth0 broadcast 0.0.0.0 up
netmaskは
[armadillo ~]# ifconfig eth0 netmask 255.255.255.0 up
などなど。
-
at_kazutaka.bito
実行結果を標準出力とファイルの両方に出力する必要があった。
(ファイルにログを残しつつも、コンソールでリアルタイムにログを確認したかった。)teeコマンドを使えばよかった。 例えば、psコマンドの出力を標準出力とtemp.txtに出力したい場合は、
[armadillo ~]# ps | tee temp.txt
例えば、makeのログを標準出力とtemp.txtに出力したい場合は、
[armadillo ~/atmark-dist]# make 2>&1 | tee temp.txt
-
at_kazutaka.bito
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なので、
-
at_kazutaka.bito
Armadillo-400シリーズのUART2は、標準のカーネルコンフィギュレーションでは ハードフロー制御が有効になっており、make menuconfigからは設定変更できない。
そこで、ハードフロー制御を無効にできるようにする。
備考)以下の説明において、、ディレクトリ構成は、 Armadillo実践開発ガイド第1部7.2. Atmark Distを使ったルートファイルシステムの作成に基づいて環境構築しているものとする。
1. Kconfigの編集
atmark-dist/linux-2.6.x/arch/arm/mach-mx25のKconfig内で、Armadillo-410/420/440については、 デフォルトでUART2のハードフロー制御が有効になるように設定されているので、その設定を削除する。
-
at_kazutaka.bito
例として、 Howto : Armadillo-440でQt! 第3回 で作成されたMainWindowにラベルを貼りつけて3種類のフォントで「こんにちは」を表示する方法を示す。
1.Armadillo-440のROMのユーザーランド領域には、日本語Truetypeフォントを複数置けるサイズはないので、予め、Truetypeフォント書き込んだMicroSDをArmadillo-440に挿入して起動する。
(下記サンプルコードでは、TakaoGothic.ttf、TakaoMincho.ttf、sazanami-mincho.ttf をMicroSDに置いた場合である。これらのttfファイルは、ATDEの/usr/share/fonts/truetype/にある。)2.Armadilloの/usr/local/Trolltech/Qt-4.8.3-qws-armel/lib/fonts のフォントファイルを削除する。(標準では、TakaoPGothic.ttfが存在。)
-
at_kazutaka.bito
Howto : Armadillo-440でQt! 第2回に紹介されているQtに対応したATDE(atde4-qt-amd64)でビルドした場合、 フォントは、 atmark-dist/romfs/usr/local/Trolltech/Qt-4.8.3-qws-armel/lib/fonts の下に置かれる。 (デフォルトは、TakaoPGothic.ttf)
簡易的にフォントを変更する場合は、TakaoPGothic.ttfを削除して 別のフォント(例えばTakaoPMincho.ttfや、sazanami-gothic.ttf等)を置いてmake imageする。
補足)ATDEだと、/usr/share/fonts/truetype/内にフォントファイルがある。
-
at_kazutaka.bito
例として、 Howto : Armadillo-440でQt! 第3回 で作成されたMainWindowにラベルを貼りつけて「こんにちは」を表示する方法を示す。
QtCreatorで、
1.「編集」を選択して、「mainwindow.cpp」をダブルクリックする。
->mainwindow.cppのソースの編集画面に変わる。2.mainwindow.cppのインクルードファイルに
#include <QLabel> #include <QTextCodec>
を追加。
-
at_kazutaka.bito
Armadillo上で、テキストファイルの改行コードがLFのものをLF+CRにする方法を試してみた。
例えば、改行コードがLFのテキストファイル"test0.txt"を、改行コードがLF+CRのテキストファイル"test1.txt"にするには 下記のようなコマンドになる。
[armadillo ~]# awk '{sub(/$/, "\r"); print}' test0.txt > test1.txt
trコマンドやsedコマンドでも可能かもしれないが、当方はうまい方法が見つからなかった。 nkfコマンドとiconvコマンドは標準イメージでは有効になっていなかった。
-
at_kazutaka.bito
Armadillo-440でlighttpd+php5-cgiの組み合わせで、phpinfoが見れるまでを確認した。
以下に手順を示す。
(ATDE上で、ビルド済みの環境(atmark-dist/romfs)が存在するものとする。)1.php5-cgiのdebianパッケージを下記からダウンロードする
- http://archive.debian.org/debian-archive/debian/pool/main/p/php5/php5-cgi_5.2.6.dfsg.1-1+lenny16_armel.deb
2.パッケージを展開する(以下、tempディレクトリに展開したものとする)
[atde ~]$ dpkg -x php5-cgi_5.2.6.dfsg.1-1+lenny16_armel.deb temp
3.上記2で展開してできたphp5-cgiをromfsに置く
-
at_kazutaka.bito
WikiPediaのXlibの項目の例にあるプログラムをArmadillo-440開発セットで実行して、LCDに表示してみた。
1.ATDEで上記プログラムのファイル(下記例では、test_xlib.cとする)を作成し、下記のようにコンパイルする。 [atde ~]$ arm-linux-gnueabi-gcc test_xlib.c -o test_xlib -lX11 上記のようにコンパイルすると実行ファイル(本例では、test_xlib)ができる。 2.上記1の実行ファイルをArmadilloに転送する。 3.Armadillo上で実行ファイルに実行権限をつけて、実行する。 [armadillo ~]# chmod +x test_xlib [armadillo ~]# DISPLAY=:0 ./test_xlib
補足)Armadillo-440の標準のイメージファイルを使う場合はfunctesterというXwindowシステムを使うアプリが自動起動しているので、
-
at_kazutaka.bito
通常、Armadillo上でユーザを追加しても、電源をOFFにすると追加したユーザは消えてしまうので、 次の起動時に追加したユーザでログインできない。 電源をOFFにしても、次の起動時に追加したユーザでログインができるように、追加したユーザを保存する方法を試してみた。
-
at_kazutaka.bito
Armadillo上でコンフィギュレーションを確認するには、下記のコマンドで可能。
zcat /proc/config.gz
-
at_kazutaka.bito
Armadillo-810カメラモデル開発セットで、カメラの画像をH.264エンコードして、MPEG2-TS形式のコンテナにしてみた。 gstreamerのmpegtsmuxというエレメントを使った。 コマンド例は下記の通り。 (画像データの保存先として、/mntにSDカード等、外部メモリマウントしているとする)
gst-launch-1.0 -e v4l2src device="/dev/video1" \ ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 \ ! acmh264enc ! queue \ ! mpegtsmux ! filesink location=/mnt/out.ts
-
at_kazutaka.bito
ATDE上で簡易にテキストファイルをビットマップファイルに変換する方法を考えてみた。
1. テキストファイルをUTF-8で保存
補足)
UTF-8かどうかは、geditエディタを使用している場合、- ファイル->別名で保存
を開いて、エンコーディング(H)の項目で確認できる。 UTF-8になっていない場合は、UTF-8を選択する。
2. convertでUTF-8ファイルをビットマップに変換
下記にスクリプト例(text2bmp.sh)を記載する。
このスクリプトでは- UTF-8のテキストファイル:utf-8.txt
について、
- 背景:黒
- 文字色:オレンジ
- フォント:ゴシック
- 文字サイズ:120
の
- ビットマップファイル:text.bmp
が生成される。
text2bmp.sh
-
at_kazutaka.bito
QMLで等幅フォントを使いたくなった。
make menuconfig を実行してユーザーランドコンフィグレーションで、TakaoGothicフォントを追加。Userland Configuration Fonts ---> [*] TakaoGothic // デフォルトは空白なので、*を付ける。
QMLのコードでは、Textの中で font.family: "TakaoGothic" のように指定する。
Armadillo-840製品マニュアル 14.5. QMLのhello_qmlの場合は、
<font.familyの追加箇所を抜粋> -
at_kazutaka.bito
Armadillo-440にArmadillo 実践開発ガイド第2部 4. Armadillo 上にDebian GNU/Linux を 構築するを参考にDebian環境を構築する際、rootユーザのパスワードを設定しておく必要がある。 (デフォルトはパスワード設定されてない。)
パスワードを設定してないと、一般ユーザでリモートログインした後、suコマンドを実行してもパスワードではじかれてしまう。
-
at_kazutaka.bito
Armadilloに電源を入れて、ログイン入力画面で、
- ユーザ名:root
- パスワード:root
でログインしようとしたとき、
armadillo440-0 login: root Password: Login incorrect armadillo440-0 login: armadillo440-0 login
のようにログインできない場合は、シリアル通信ソフトの改行コードの設定が CR+LFになっている可能性がある。
PCのシリアル通信ソフトの改行コードの設定を
- 受信:CR
- 送信:CR
にすると、ログインできる。
TeraTermだと、メニューの
- 設定->端末
の中に改行コードの設定項目がある。
-
at_kazutaka.bito
Howto : Armadillo-440でQt! 第2回のATDE4を使っていると画面ロックまでの時間が短いのが気になる。
下記の方法で、ATDEの画面ロックの間隔を延ばした。
ATDEが立ち上がった状態で、左上の「赤い渦巻模様」の右にあるメニューの システム->設定->スクリーンセーバー で、スクリーンセーバーの設定画面を開く。
設定画面内で、
- アイドル状態になるまでの時間 の項目で、デフォルトでは5分になっている。 この時間を延ばす。
ちなみに、
- アイドル状態になったらスクリーンセーバーを起動する
- スクリーンセーバーを起動したら画面をロックする
のチェックの有無で、アイドル状態、スクリーンセーバー、画面ロックの連動を選択することが可能。
-
at_kazutaka.bito
GPIOの出力電流の設定は、Armadillo-400シリーズハードウェアマニュアル
6.2.1入出力インタフェースの電気的仕様-「Armadillo-460」 http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_hardware_manual_ja-1.10.0/ch06.html#sec-6-2-1 より、i.MX257のSoftware Pad Control Register(SW_PAD_CTL)とDrive Voltage Select Group Control Register(SW_PAD_CTL_GRP_DVS)で、出力電流(Std, High, Max)、スルーレート(Slow, Fast)、プルアップ/プルダウンを変更することができます。
と記載されています。
実際にCON9の2ピンとCON9の14ピンの電流をmaxに設定変更してみました。
注意点としては、上記のとおり、SW_PAD_CTLで設定できるものと、 SW_PAD_CTL_GRPで設定できるものがありますので、電流設定のパラメータ(DSE)が あるレジスタを選択する必要がある点です。
-
at_kazutaka.bito
Armadillo-810でUSBモニタ(DisplayLink対応)に表示させることに挑戦。
手順は Armadillo 実践開発ガイド第3 部 2.8. USB 接続モニタ http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-3_ja-2.1.2/ch02.html#sec_using_usb_display とほとんど同じ。
違う所は、2か所。
その1 armelの部分は、armhfに読み替える。
その2 図2.89 libdlo をビルドするために必要なパッケージのインストール の
-
at_kazutaka.bito
TeraTermを使っているとときどき文字ずれが起きる。
毎回TeraTermを再起動していたが、ネットを探してみると下記の方法を見つけた。TeraTermのメニューで、コントロール -> ポートのリセット
または、
Alt+O -> Alt+P (Altは押しっぱなし) で文字ずれが回復する。 -
at_kazutaka.bito
Howto : Armadillo-440でQt! 第2回 より入手できるユーザーランド atmark-dist-qt-20121105.tar.gz内の、Qt用のプロダクトディレクトリ atmark-dist-qt-20121105/vendors/AtmarkTechno/Armadillo-440.Qt を現在の最新版のユーザーランド(atmark-dist-20140415)にコピーしてビルドしたところ
- make menuconfig時にコンフィグのデフォルト設定されてない部分を聞かれる
- make時にdepmod.plのディレクトリがないというエラーがでる
という現象が発生しました。
-
at_kazutaka.bito
Armadillo-200シリーズの開発環境ATDE2からnetflashで書き込もうと思ったら、ATDE2は/var/wwwがなかった。
そこで、ATDE2にWebサーバー(lighttpd)をインストールする
[ATDE ~]$ sudo apt-get update [ATDE ~]$ sudo apt-get upgrade [ATDE ~]$ sudo apt-get install lighttpd
と、/var/wwwができた。
あとは、/var/wwwにイメージファイルを置いて、netflashコマンド
[armadillo ~]# netflash -k -n -u -r /dev/flash/[リージョン] http://[ATDEのIPアドレス]/[イメージファイル]
でATDE2からArmadilloに書き込み可能。
-
at_kazutaka.bito
ATDE3の共有フォルダのディレクトリの文字色は、緑地に青字で見づらい。 属性によって緑字になっているので、根本的には属性を変えればいいと思うが、 今回は文字色を変更してみた。
ホームディレクトリで、 dircolors -p > ~/.dir_colors で、.dir_colorsを作成。
.dir_colorsをエディタで開いて、 OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky の箇所を OTHER_WRITABLE 34;43 # dir that is other-writable (o+w) and not sticky に変更。
eval
dircolors ~/.dir_colors -b
で設定を反映。ATDE3の共有フォルダのディレクトリの文字色が、黄色地に青字になった。
-
at_kazutaka.bito
PWMを有効にしようとして、
[armadillo ~]# echo 700000 > /sys/class/mxc_pwm/(PWM_NAME)/duty_ns [armadillo ~]# echo 1 > /sys/class/mxc_pwm/(PWM_NAME)/enable
で、enableが1(有効)に設定。
念のため、catでenableを確認すると、
[armadillo ~]# cat /sys/class/mxc_pwm/(PWM_NAME)/enable 0
で、enableが0(無効)のままだった。
-
at_kazutaka.bito
Armadillo-810でリモート実行、デバッグする方法として、 ATDE5のQtCreatorを使えるようにしてみました。
-
at_kazutaka.bito
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表示と同じ画面が見れます。補足)