個人別ブログ

at_kazutaka.bito さんのブログ

  • 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-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.カーネルの修正

  • 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

  • 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

    実行結果を標準出力とファイルの両方に出力する必要があった。
    (ファイルにログを残しつつも、コンソールでリアルタイムにログを確認したかった。)

    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-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-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表示と同じ画面が見れます。

    補足)