ブログ

  • at_ito

    Linuxカーネルのコンフィギュレーションを設定する場合に、 BACKLIGHT_LCD_SUPPORT等のシンボルはわかるものの、設定項目が どこにあるのかわからない時があるかと思います。 ここでは、「BACKLIGHT_LCD_SUPPORT」を元に設定項目が どこにあるのかを調べる方法を紹介します。

  • at_ito

    Linuxにはteeというコマンドがあります。このコマンドは標準出力とファイルの両方へ出力することができます。ここではAtmark Distのmakeコマンド実行結果を例に、コマンド実行結果をファイルに保存しつつ、コンソールにも表示する方法を紹介します。

    例えば、make.logファイルにコマンド結果を保存しつつ、コンソールにも表示するには、以下のようなコマンドになります。

    [ATDE ~/atmark-dist]# make 2>&1 | tee make.log
    

    ソースコードのビルド時にエラーを記録するときなどに便利ですので、ぜひ使用してみてください。

  • at_ito

    製品化の際に、アプリケーションが動かなくなった場合などに再起動するためウォッチドッグタイマーを使用する場合があるかと思います。ここではウォッチドッグタイマーの使用方法について説明します。

    ウォッチドッグタイマーにはハードウェアウォッチドッグタイマーと、ソフトウェアウォッチドッグタイマーがあります。

    ハードウェアウォッチドッグタイマーはCPUのウォッチドッグタイマーの機能を使用しており、ブートローダー(Hermit-At)もしくは、Linuxカーネルで使用しています。そのため、ブートローダーやLinuxカーネルが正常に動作せず、ハードウェアウォッチドッグタイマーをキックできない場合にのみ自動的に再起動が行われます。そのため、アプリケーションが正常に動作しない場合等に使うことには向いていません。

    ソフトウェアウォッチドッグタイマーは、Linuxカーネルが提供している機能です。アプリケーション等の死活監視を行う場合に使用することができます。製品化の際に、実装する場合はほぼソフトウェアウォッチドッグタイマーを使用する形になるかと思います。

    そのため、ここではソフトウェアウォッチドッグタイマーを使用する方法を以下に紹介します。

  • 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_ito

    netflashコマンドでイメージをフラッシュ書いた後、正しく書かれたかチェックしたい場合があるかと思います。

    ここでは、netflashコマンドで、正しくイメージが書かれたかどうかをチェックする機能について紹介します。

    1. チェック方法

    netflashには-Cオプションがあり、このオプションを付けることによって、指定されたイメージと同じイメージが、フラッシュにかかれているかどうかをチェックすることができます。

    コマンド例としては、以下のようになります。

    netflash -knubC -r /dev/flash/kernel linux.bin.gz
    

    2. ベリファイ実行例

    2.1. kernel領域に、linux-a400-1.08.bin.gzイメージを書き込む

    以下のコマンドを実行して、kernel領域にlinux-a400-1.08.bin.gzイメージを 書き込みます。この際オプションに"-b"を付けて自動的に再起動しないように しておきます。

  • 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_takuya.sasaki

    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ポートを解放することで、解決できました。

  • at_ito

    ATDEをVMware Player等(以降VMware)を使用していると、VMwareのウインドウにフォーカスが 移ってしまうとAlt+Tabでタスク切り替えをしようと思っても、ホストOSのタスクに切り替わらない。(ゲスト側でタスク切り替えすることになる) キーボードを使ってタスク切り替えをすることが多いので、これでは不便ということでVMwareのユニティモードを使い、ホストOSのウインドウとして、ATDEのアプリケーションを立ち上げる方法を紹介します。

  • 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_takuya.sasaki

    ATDE3の VMware仮想イメージファイルは、Oracle社のVirtual BOXでも起動することが可能です。

    1. VirtualBoxのインストール

    インストール方法は省略いたします。このブログではバージョン 4.3.12 を使用しています。

    2. ATDE3イメージの展開

    任意のフォルダに弊社Webサイトで公開しているATDE3の仮想イメージファイルを展開してください。

    3. VirtualBoxを起動します

    4. [新規(N)]を押して、[名前](任意)を入力し、[タイプ][バージョン]を選択してください。

  • at_ito

    プログラムを作成した際に、依存しているライブラリのライセンスを確認する必要があると思います。その際に、リンクしているライブラリのソースコードを取得する必要があるため、指定のバイナリが使用しているライブラリのDebianパッケージ名、Debianソースパッケージ名を調べるためのシェルスクリプトを作ってみました。

    以下のシェルスクリプトを作成し、ATDEで動かしてみてください。

  • at_ito

    DebianパッケージをAtmark Distで作ったユーザーランドに追加する際に、バイナリを実行しても必要なファイルが見つからずに正常に起動しないことがあるかと思います。その際に、何が必要なファイルかを調べる方法を紹介します。

    バイナリ実行時に必要なファイルは、open()システムコールで開かれます。そのため、バイナリ実行時にどのシステムコールが使用されたかを調べるstraceを使うことで、どのファイルをopen()しようとしたかを調べることができます。このstraceはLinuxのデバッグユーティリティであり、引数に渡されたバイナリが使用するシステムコールを見ることができます。

    Atmark Distのコンフィギュレーションで選択できるstraceでは、ビルド時にエラーが発生するため、Debian Packagesからstraceのバイナリを持ってくる必要があります。

    以下のページを参考に、straceをユーザーランドに追加してください。

  • at_ito

    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コマンドを、以下のように実行することで、どのデバイスファイルが、どのカメラに対応しているか調べることができます。

  • 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_takuya.sasaki

    Armadillo-400シリーズのドライバにはLEDクラスが用意されています。
    https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.1/ch09.html#sec-led-class

    Armadillo-420/440に標準で用意されている red / yellow / green のLED以外に、 新しいLEDを追加する際の手順です。

    今回は、例としてCON9_28ピンをLEDクラスに割り当てます。 また諸事情により、kernel2.6.35に対する修正方法を記載していますが、2.6.26でも大きな違いはないと思います。

    まずは以下のソースを編集します。

  • at_takuya.sasaki

    Armadillo-400シリーズのSoCであるi.MX257には、CANコントローラは2つ(CAN1、CAN2)あります。 しかし、現在のカーネルソースでは、CON14のCAN2のみを有効にできるようになっています。

    CON11にマルチプレクサされているCAN1を有効化する手順を紹介します。

    (注意)
    こちらはハードウェアを接続しての検証はしておりません。またCAN2を有効化している環境を想定しています。CAN2を有効化するには以下を参照してください。
    https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.1/ch09.html#sec-CAN

    環境: linux-2.6.26-at20

  • 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_nakai

    久しぶりにArmadillo-420/440のブートローダー「hermit-at」をカスタマイズしたので記事にしてみました。

    【要件】

    ブートローダーがLinuxを起動する際に、USBデバイスが接続されていればフラッシュメモリに格納されているシステムイメージを利用して起動する

    上記が必要な場面は、電源ON/OFF(リセット)以外の制御が行えない状況下で、マイクロSDに格納されているシステムイメージを更新するといった場面です。
    システムリカバリにも利用可能です。

    【カスタマイズ内容】

  • 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_ito

    Armadilloのユーザーランドには、「Atmark Dist」と「Debian GNU/Linux」が使用できます。 それぞれに特徴があり、どういった場面でどちらを使えば良いかわからない場合もあるかと 思います。 今回は、簡単にですが「Atmark Dist」と「Debian GNU/Linux」の選び方について紹介します。

  • 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>
    

    を追加。

    MainWindow::MainWindowに下記のように /***** Display Japanese: begin ****//***** Display Japanese: end ****/ で囲んだ範囲を追加。

  • 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_ito

    DebianパッケージをAtmark Distにインストールする際に、依存関係を考慮する必要がある場合があります。 その際に、依存しているパッケージをインストールするのにさらに依存パッケージが存在していたりして、インストールするのに手間がかかります。 そのため、簡単にDebianパッケージの依存関係を再帰的に検索し、表示する方法を紹介します。

  • 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_ito

    製品出荷時に、ArmadilloにLinuxカーネルイメージや、ユーザーランドイメージを書き込むことがあるかと思います。 Hermit-Atのtftpdlコマンド等でイメージを書き込んだ後に、正常にNORフラッシュに書き込まれたのかどうかを確認したい場合もあるかと思います。 ここでは、Hermit-Atのmd5sumコマンドを使用し、イメージが正常に書き込まれているかどうかを確認する方法を紹介します。

  • at_ito

    Armadilloを使用している際に、作業用PCとのファイルの送受信を行いたい場合があるかと思います。 Ethernet経由や、USBメモリ等のストレージ経由でファイルを送受信することもできますが、 ネットワークの設定が必要であったり、ストレージを用意したりと面倒なこともあるかと思います。 そこで、Armadilloを使用する際に使うシリアル通信ソフト(ここではTeraTermを使用)のZMODEMを使い、 シリアル経由でファイルを送受信する方法を紹介します。

  • 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_ito

    Armadillo-400シリーズでDebianを使用する場合には、標準でDebian lennyのアーカイブを展開して使うことになります。 Debian lennyは2012年にリリースされており古いため、使用するパッケージのバージョンが古い場合があります。 そのため、ここではArmadillo-400でDebian squeezeを使用する方法を紹介します。

  • at_kazutaka.bito

    Armadillo-440にArmadillo 実践開発ガイド第2部 4. Armadillo 上にDebian GNU/Linux を 構築するを参考にDebian環境を構築する際、rootユーザのパスワードを設定しておく必要がある。 (デフォルトはパスワード設定されてない。)

    パスワードを設定してないと、一般ユーザでリモートログインした後、suコマンドを実行してもパスワードではじかれてしまう。

  • at_takuya.sasaki

    Armadillo-400シリーズではタクトスイッチ(SW1)を押しながら電源を入れると、オートブートがキャンセルされ保守モードで起動します。
    https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_software_manual_ja-1.9.0/ch03.html#sec-boot-mode

    このオートブートキャンセル機能を無効にし、タクトスイッチを押しながら電源を入れても、オートブートする方法を紹介します。

  • at_kazutaka.bito

    Howto : Armadillo-440でQt! 第2回のATDE4を使っていると画面ロックまでの時間が短いのが気になる。

    下記の方法で、ATDEの画面ロックの間隔を延ばした。

    ATDEが立ち上がった状態で、左上の「赤い渦巻模様」の右にあるメニューの システム->設定->スクリーンセーバー で、スクリーンセーバーの設定画面を開く。

    設定画面内で、

    • アイドル状態になるまでの時間 の項目で、デフォルトでは5分になっている。 この時間を延ばす。

    ちなみに、

    • アイドル状態になったらスクリーンセーバーを起動する
    • スクリーンセーバーを起動したら画面をロックする

    のチェックの有無で、アイドル状態、スクリーンセーバー、画面ロックの連動を選択することが可能。