第6章 動作確認方法

6.1. USBガジェット

Armadillo-810をUSBデバイスとして使用することができます。ここでは動作確認をATDE5で行うため、「取り外し可能デバイスの使用」を参照してATDE5とArmadillo-810のCON4をUSB2.0 ケーブルで接続する必要があります。

USBデバイスの機能は、LinuxカーネルのUSBガジェットドライバによって提供されます。USBガジェットドライバは様々な種類のものが用意されていますが、工場出荷イメージではArmadillo-810をUSB複合デバイス[9]として使用することができる「UVC Composite Gadget」が有効になっています。

UVC Composite Gadgetは以下に示す3種類のUSBデバイス機能を持っています。各機能は同時に利用することができます。

UVCガジェット

Armadilloをビデオ出力デバイス、ATDEをビデオ入力デバイスとして扱うことができます。V4L2インターフェースを利用するキャプチャーアプリケーションなどで利用することができます。

シリアルガジェット

ArmadilloとATDEを、互いにシリアルデバイスとして扱うことができます。シリアル(tty)デバイスで通信するアプリケーションなどで利用することができます。

イーサネットガジェット

ArmadilloとATDEを、互いにネットワークデバイスとして扱うことができます。ソケットで通信するアプリケーションで利用することができます。

6.1.1. UVCガジェット

Armadillo-810のUVCガジェットは、「UVC(USB Video Class)」として実装されています。ATDEがUVCガジェットを認識すると、/dev/video0というデバイスファイルが作成されます。アプリケーションは、このデバイスを介して画像を取得することができます。ここでは、「guvcview」というアプリケーションで動作の確認を行います。

6.1.1.1. 起動方法

図6.1「guvcviewを起動」を実行すると、図6.2「guvcviewのビデオウィンドウ」図6.3「guvcviewのコントロールウィンドウ」の2つのウィンドウが立ち上がります。ビデオウィンドウには、UVCガジェットから取得した映像が表示され、コントロールウィンドウで解像度の切り替えなどを行うことが出来ます。

[ATDE ~]$ guvcview -w 0

図6.1 guvcviewを起動


guvcviewのビデオウィンドウ画面は、ハメコミ合成しています。

図6.2 guvcviewのビデオウィンドウ[10]


guvcviewのコントロールウィンドウ

図6.3 guvcviewのコントロールウィンドウ


[注記]

UVCガジェットの機能は、UVCガジェットドライバとカメラドライバで画像を転送するような形で実現しています。2つのドライバは「V4L2(Video for Linux 2)」という共通のインターフェースを持っています。V4L2を利用して画像を転送するのが「uvc-gadget」というアプリケーションです。UVCガジェットの概念図を次に示します。

6.1.1.2. カメラ設定

「起動方法」に従ってguvcviewを起動した状態で、リアルタイムにカメラの設定を変更することができます。カメラの設定には、「camctrl」というアプリケーションを使用します。

[注記]

camctrlは、動作中のカメラ設定を変更および取得するサンプルアプリケーションです。ソースコードはMITライセンスで配布されています。

camctrlのソースコードは、Atmark Distのソースコード(user/camctrl/)に含まれています。

[注記]

camctrlコマンドは、ユーザーランドイメージ v1.03(Atmark Dist v20131018)で追加されました。ユーザーランドイメージ v1.02(Atmark Dist v20130704)以前には含まれていません。

camctrlコマンドのフォーマットは、次の通りです。

[armadillo ~]# camctrl [アプリケーションオプション] [Setオプション|Getオプション] [ヘルプオプション]

図6.4 camctrlコマンド書式


「アプリケーションオプション」の"--set"を指定した場合はカメラ設定の変更を、"--get"を指定した場合は現在のカメラ設定の取得を行います。"--set"と"--get"のどちらも指定しなかった場合は、"--get"が指定された場合と同じ挙動を行います。

「アプリケーションオプション」を次に示します。

表6.1 camctrlのアプリケーションオプション

オプション説明
--set「Setオプション」に従って、カメラ設定を変更します。"--get"オプションと同時に指定することはできません。
--get「Getオプション」に従って、現在のカメラ設定を取得します。"--set"オプションと同時に指定することはできません。
--versionバージョン番号を表示します。

カメラ設定の変更を行う際に、どの設定を変更するかを決定するための「Setオプション」を次に示します。「アプリケーションオプション」には"--set"を指定する必要があります。

表6.2 camctrlのSetオプション

オプション設定値説明
--gain16〜496までの整数(10進数)ゲイン値を設定します(自動ゲイン調整機能を無効化します)。この設定は画面全体の明さに影響します。分解能または計算誤差により、設定値と実際の設定が異なる場合があります。"--auto-gain"オプションと同時に指定することはできません。
--exposure0〜1081217までの整数(10進数)露光時間をマイクロ秒単位で設定します(自動露光時間調整機能を無効化します)。この設定は画面全体の明さや動体検出時の時間分解能に影響します。分解能または計算誤差により、設定値と実際の設定が異なる場合があります。"--auto-exposure"オプションと同時に指定することはできません。
--red128〜510までの整数(10進数)青、赤、緑色それぞれのゲイン値を設定します(自動ホワイトバランス調整機能を無効化します)。この設定は色合いに影響します。青、赤、緑色全てのゲイン値が255以下または256以上となるよう設定してください[a]。分解能または計算誤差により、設定値と実際の設定が異なる場合があります。"--auto-white-balance"オプションと同時に指定することはできません。
--green
--blue
--auto-gain"on" または "off"自動ゲイン調整機能の有効/無効を設定します。"--gain"オプションと同時に指定することはできません。
--auto-exposure"on" または "off"自動露光時間調整機能の有効/無効を設定します。"--exposure"オプションと同時に指定することはできません。
--auto-white-balance"on" または "off"自動ホワイトバランス調整機能の有効/無効を設定します。"--red"、"--green"および"--blue"オプションと同時に指定することはできません。
--colorbar"on" または "off"カラーバー出力の有効/無効を設定します。有効化すると、現在取得中の画像にカラーバーが重ね合わせて表示されます。
--dsp-colorbar"on" または "off"DSP[b]カラーバー出力の有効/無効を設定します。有効化すると、カラーバーのみが表示されます。

[a] "--red=100 --green=100 --blue=300"のように255以下と256以上のゲイン値を混ぜて設定した場合は、正しく設定されません。

[b] Digital Signal Processor


カメラ設定の取得を行う際に、どの設定を取得するかを決定するための「Getオプション」を次に示します。「アプリケーションオプション」には"--get"を指定するか、未指定である必要があります。

表6.3 camctrlのGetオプション

オプション説明
--all全設定の設定値を表示します。
--gainゲイン値を表示します。表示される数値は10進数の整数です。
--exposure露光時間を表示します。表示される数値はマイクロ秒単位です。
--red赤、緑、青色それぞれのゲイン値を表示します。表示される数値は10進数の整数です。
--green
--blue
--auto-gain自動ゲイン調整機能の有効/無効を表示します。有効時には"on"が、無効時には"off"が表示されます。
--auto-exposure自動露光時間調整機能の有効/無効を表示します。有効時には"on"が、無効時には"off"が表示されます。
--auto-white-balance自動ホワイトバランス調整機能の有効/無効を表示します。有効時には"on"が、無効時には"off"が表示されます。
--colorbarカラーバー出力の有効/無効を表示します。有効時には"on"が、無効時には"off"が表示されます。
--dsp-colorbarDSPカラーバー出力の有効/無効を表示します。有効時には"on"が、無効時には"off"が表示されます。

camctrlコマンドの使用例を次に示します。

[armadillo ~]# camctrl --get --all 1
                gain: 20
            exposure: 8381
                 red: 164
               green: 128
                blue: 312
           auto-gain: on
       auto-exposure: on
  auto-white-balance: on
            colorbar: off
        dsp-colorbar: off
[armadillo ~]# camctrl --set --exposure=5000 2
[armadillo ~]# camctrl --get --all 3
                gain: 20
            exposure: 4998 4
                 red: 164
               green: 128
                blue: 312
           auto-gain: on
       auto-exposure: off 5
  auto-white-balance: on
            colorbar: off
        dsp-colorbar: off

1

全設定の設定値を表示します。

2

露光時間を5000マイクロ秒に設定します。自動露光時間調整機能は無効化されます。

3

設定が反映されていることを確認するため、再度全設定の設定値を表示します。

4

露光時間が設定されていることが確認できます。分解能により誤差が生じています。

4

自動露光時間調整機能が無効に設定されていることが確認できます。

図6.5 camctrlコマンドの使用例


[警告]

guvcviewの再起動やコントロールウィンドウから解像度の切り替えなどの制御を行った場合には、camctrlで設定した設定値は初期化されます。

各オプションの使用方法は、「ヘルプオプション」を使用することで表示可能です。「ヘルプオプション」を次に示します。

表6.4 camctrlのヘルプオプション

オプション説明
--help「ヘルプオプション」と「アプリケーションオプション」の使用方法を表示します。
--help-all全オプションの使用方法を表示します。
--help-get「Getオプション」の使用方法を表示します。
--help-set「Setオプション」の使用方法を表示します。

6.1.2. シリアルガジェット

Armadillo-810のシリアルガジェットは、「CDC-ACM(USB Communication Device Class - Abstract Control Model)」として実装されています。Armadillo-810では/dev/ttyGS0を、ATDEでは/dev/ttyACM0を使用したシリアル通信を行うことができます。

シリアルガジェットの動作を確認するには、Armadillo-810の/dev/ttyGS0にシリアルコンソールを起動させます。ATDEのシリアル通信ソフトウェア(minicom)を用いることで、シリアルガジェット経由でArmadillo-810にログインすることができます。

手順6.1 CDC-ACM通信確認手順

  1. ATDEでminicomを起動します。シリアルデバイスには/dev/ttyACM0を指定します。

    [ATDE ~]$ minicom -o -w -D /dev/ttyACM0

    図6.6 /dev/ttyACM0を指定してシリアルターミナルを起動


  2. Armadilloでgettyを起動します。シリアルデバイスにはttyGS0[11]を指定します。/etc/inittabの設定を有効にするためには、プロセスIDが1であるinitプロセスにSIGHUPシグナルを送る必要があります。

    [armadillo ~]# echo ::respawn:/sbin/getty -L 115200 ttyGS0 >> /etc/inittab
    [armadillo ~]# kill -SIGHUP 1

    図6.7 /dev/ttyGS0上でシリアルコンソールを起動


ATDEのminicomにログインプロンプトが表示されます。ユーザー「guest」でログインすることができます。

[ティップ]

以下のように/etc/securettyに端末(シリアルデバイス)を登録すると、特権ユーザー「root」でログインすることが可能になります。

[armadillo ~]# echo ttyGS0 >> /etc/securetty

6.1.3. イーサネットガジェット

Armadillo-810のイーサネットガジェットは、「RNDIS(Remote NDIS)」として実装されています。Armadillo-810とATDEは、互いにネットワークインターフェースusb0を使用したネットワーク通信を行うことができます。

Armadillo-810とATDEをイーサネットガジェットで接続すると、IPv4LLという機構を使ってリンクローカルアドレス[12]が設定されます。

[注記]

ATDE5のネットワーク設定は、ネットワークマネージャーを利用せずに "/etc/network/interfaces" に基づいて設定されています。

ATDEでイーサネットガジェットを認識したかどうかは、"ifconfig"コマンドの出力結果をみると判断することができます。

[ATDE ~]$ LANG=C sudo ifconfig
(省略)
usb0      Link encap:Ethernet  HWaddr a2:e4:92:6f:c6:54 1
          inet6 addr: fe80::a0e4:92ff:fe6f:c654/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:77 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:905 (905.0 B)  TX bytes:13943 (13.6 KiB)

usb0:avahi Link encap:Ethernet  HWaddr a2:e4:92:6f:c6:54 2
          inet addr:169.254.9.18  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

1

イーサネットガジェットを認識すると"usb0"が表示されます

2

リンクローカルアドレスが割り当てられた場合に"usb0:avahi"が表示されます

図6.8 イーサネットガジェット認識時のifconfigの出力例


[注記]

イーサネットガジェットのネットワークインターフェース(usb0)のMACアドレスには、Linuxカーネルが生成したランダム値が設定されます。このMACアドレスのうち、特定の意味を持つI/G(Individual/Group)およびU/L(Universal/Local)ビットについてはランダム値ではなく固定の値が設定されます。I/Gビットは0(ユニキャストアドレス)に、U/Lビットは1(ローカルアドレス)に設定されます。

Armadillo-810とATDEをイーサネットガジェットで接続すると、マルチキャストDNS(mDNS)という技術を利用してローカルネットワークで利用することができるホスト名が設定されます。mDNSにより設定されるホスト名を次に示します。

表6.5 mDNSで設定されるホスト名

ホストホスト名
Armadillo-810armadillo810-0.local
ATDE5atde5.local

[ティップ]

ATDE5が所属するネットワーク内に複数のATDE5が存在する場合は、mDNSで設定されるホスト名が重複しないように"atde5-2.local"のようなホスト名が設定されます。

ATDE5にmDNSで設定されたホスト名を確認するには、次のようにコマンドを実行します。

[ATDE ~]$ ps axu | grep avahi-daemon
avahi     2464  0.0  0.0  34156  1700 ?        S    12:40   0:00 avahi-daemon: running [atde5-2.local]
(省略)

ネットワーク設定が完了すると、ネットワーク通信ができる状態となります。pingで通信させてみましょう。

[ATDE ~]$ ping armadillo810-0.local

図6.9 イーサネットガジェットの通信確認


6.2. ネットワーク

イーサネットガジェットを利用することにより、ネットワーク機能を利用することができます。ここでは、ネットワークの設定方法やネットワークを利用するアプリケーションについて説明します。

6.2.1. ネットワーク設定の変更方法

Armadilloのネットワーク設定の変更方法について説明します。

[警告]

ネットワーク接続に関する不明な点については、ネットワークの管理者へ相談してください。

6.2.1.1. Armadilloにログインしてネットワーク設定を変更する

Armadillo上の「/etc/config」以下にあるファイルを編集し、コンフィグ領域に保存することにより起動時のネットワーク設定を変更することができます。コンフィグ領域の保存については、7章コンフィグ領域 − 設定ファイルの保存領域を参照してください。

6.2.1.1.1. デフォルト状態のネットワーク設定

ネットワーク設定は、/etc/config/interfacesに記述されています。デフォルト状態では、次のように設定されています。

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

auto lo usb0
iface lo inet loopback
iface eth0 inet dhcp
iface usb0 inet manual 1
	up ifconfig usb0 up
	post-up zcip usb0 /etc/zcip.script > /dev/null
	down ifconfig usb0 down

1

イーサネットガジェット(usb0)用の設定は、リンクローカルアドレスを利用

図6.10 デフォルト状態の/etc/config/interfaces


6.2.1.1.2. 固定IPアドレスに設定する

表6.6「固定IPアドレス設定例」に示す内容に設定変更するには、viエディタで/etc/config/interfacesを、図6.11「固定IPアドレス設定」のように編集します。

表6.6 固定IPアドレス設定例

項目設定
IPアドレス192.168.10.10
ネットマスク255.255.255.0
ネットワークアドレス192.168.10.0
ブロードキャストアドレス192.168.10.255
デフォルトゲートウェイ192.168.10.1

[armadillo ~]# vi /etc/config/interfaces
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

auto lo usb0
iface lo inet loopback
iface eth0 inet dhcp
iface usb0 inet static
      address 192.168.10.10
      netmask 255.255.255.0
      network 192.168.10.0
      broadcast 192.168.10.255
      gateway 192.168.10.1

図6.11 固定IPアドレス設定


6.2.1.1.3. DHCPに設定する
[ティップ]

イーサネットガジェットは、IPv4LLによってリンクローカルアドレスが設定されるため、通常DHCPに設定する必要はありません。

DHCPに設定するには、viエディタで/etc/config/interfacesを、次のように編集します。

[armadillo ~]# vi /etc/config/interfaces
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

auto lo usb0
iface lo inet loopback
iface eth0 inet dhcp
iface usb0 inet dhcp

図6.12 DHCP設定


6.2.1.1.4. DNSサーバーを指定する

DNSサーバーを指定する場合は、viエディタで/etc/config/resolv.confを編集します。

[armadillo ~]# vi /etc/config/resolv.conf
nameserver 192.168.10.1

図6.13 DNSサーバーの設定


[ティップ]

DHCPを利用している場合には、DHCPサーバーがDNSサーバーを通知する場合があります。この場合、/etc/config/resolv.confは自動的に更新されます。

6.2.1.2. 接続を確認する

ここでは、変更したIP設定で正常に通信が可能か確認します。次のように設定を反映させます。

[armadillo ~]# ifdown -a
[armadillo ~]# ifup -a

図6.14 設定を反映させる


[注記]

ネットワークの設定をコンフィグ領域に保存し、Armadilloを再起動している場合には図6.14「設定を反映させる」に示す操作は不要です。

同じネットワーク内にある通信機器とPING通信を行います。

[armadillo ~]# ping 192.168.10.20

図6.15 PING確認


6.2.2. ファイアーウォール

Armadilloでは、簡易ファイアーウォールが動作しています。設定されている内容を参照するには、図6.16「iptables」のようにコマンド実行してください。

[armadillo ~]# iptables --list

図6.16 iptables


6.2.3. ネットワークアプリケーション

工場出荷イメージで利用することができるネットワークアプリケーションについて説明します。

[注記]

ATDEとArmadilloのネットワーク設定がデフォルト状態であることを想定して記述しています。ネットワーク設定を変更している場合は適宜読み換えてください。

6.2.3.1. TELNET

ATDEなどのPCからネットワーク経由でログインし、リモート操作することができます。ログイン可能なユーザを次に示します。

表6.7 TELNETでログイン可能なユーザ

ユーザ名パスワード
guest(なし)

TELNETを使用してATDEからArmadilloにリモートログインする場合の例を、次に示します。

[ATDE ~]$ telnet armadillo810-0.local
Trying 169.254.245.125...
Connected to armadillo810-0.local.
Escape character is '^]'.

atmark-dist v1.31.0 (AtmarkTechno/Armadillo-810)
Linux 3.4-at1 [armv7l arch]

armadillo810-0 login: guest 1
[guest@armadillo ~]$ 
[guest@armadillo ~]$ su 2
Password:  3
[root@armadillo ~]#
[root@armadillo ~]# exit 4
[guest@armadillo ~]$ exit 5
Connection closed by foreign host.
[ATDE ~]$ 

1

"guest"と入力するとログインすることができます。パスワードの入力は不要です。

2

特権ユーザーとなる場合には"su"コマンドを実行します。

3

特権ユーザーのデフォルトパスワードは"root"です。

4

特権トユーザーからguestユーザーに戻る場合は、"exit"と入力します

5

telnetを終了するにはもう一度"exit"を入力します

図6.17 telnetでリモートログイン


6.2.3.2. FTP

ATDEなどのPCからネットワーク経由でファイル転送することができます。次に示すユーザでログインすることができます。

表6.8 ftpでログイン可能なユーザ

ユーザ名パスワード
ftp(なし)

ftpを使用してATDEからArmadilloにファイルを転送する場合の例を、次に示します。

[ATDE ~]$ ls -l file
-rw-r--r-- 1 atmark atmark 1048576 Jan 1 12:00 file
[ATDE ~]$ ftp armadillo810-0.local
Connected to armadillo810-0.local.
220 localhost FTP server (GNU inetutils 1.4.1) ready.
Name (armadillo810-0.local:atmark): ftp
331 Guest login ok, type your name as password.
Password: 1
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub 2
250 CWD command successful.
ftp> put file 3
local: file remote: file
200 PORT command sucessful.
150 Opening BINARY mode data connection for 'file'.
226 Transfer complete.
1048576 bytes sent in 0.14 secs (7399.5 kB/s)
ftp> quit 4
221 Goodbye.
[ATDE ~]$ 

1

ftpユーザにパスワードが設定されていないためEnterキーを入力します。

2

ファイル転送することができるpubディレクトリに移動します。

3

ファイルをアップロードします。ダウンロードする場合は"get"コマンドを使用します。

4

ftpを終了する場合は"quit"と入力します。

図6.18 ftpでファイル転送


ATDEからArmadilloにファイルをアップロードすると、/home/ftp/pub/ディレクトリ以下にファイルが作成されています。ダウンロードする場合も、同じディレクトリにファイルを配置してください。

[armadillo ~]# cd /home/ftp/pub/
[armadillo /home/ftp/pub]# ls
file

図6.19 Armadillo上でアップロードされたファイルを確認


6.2.3.3. HTTPサーバー

Armadilloでは、HTTPサーバーが動作しています。ATDEなどのPCのWebブラウザからArmadilloのURL (http://armadillo810-0.local/ または、http://[ArmadilloのIPアドレス]/ [13] )にアクセスすると、Armadilloのトップページ(index.html)が表示されます。

Armadilloトップページ

図6.20 Armadilloトップページ


6.3. シリアル

Armadillo-810でシリアルポートとして使用可能なデバイスを次に示します。

表6.9 シリアルデバイス

インターフェースデバイスファイル(ATDE5)デバイスファイル(Armadillo-810)
シリアルインターフェース1(CON2)/dev/ttyS0/dev/ttySC8
シリアルインターフェース2(CON3)/dev/ttyUSB0/dev/ttySC2
USBインターフェース(CON4)[a]/dev/ttyACM0/dev/ttyGS0

[a] 「USBガジェット」に示すシリアルガジェットを使用します。


[警告]

表6.9「シリアルデバイス」に示すデバイスファイルは、「接続方法」に従って接続された場合のものです。異なる接続をしている場合は適宜読み替えてください。

6.3.1. シリアルコンソールとして使用する

シリアルの動作を確認するには、シリアルコンソールを起動させます。ATDEのシリアル通信ソフトウェア(minicom)を用いることで、シリアル経由でArmadilloにログインすることができます。

[注記]

Armadillo-810の工場出荷イメージでは、シリアルインターフェース2(CON3)が標準でシリアルコンソールとして使用できるようになっています。

シリアルインターフェース1(CON2)をシリアルコンソールとして使用する手順を次に示します。

手順6.2 シリアルコンソールとして使用

  1. ATDEでminicomを起動します。シリアルデバイスには/dev/ttyS0を指定します。

    [ATDE ~]$ minicom -o -w -D /dev/ttyS0
  2. Armadilloでgettyを起動します。シリアルデバイスには ttySC8[14]を指定します。/etc/inittabの設定を有効にするためには、プロセスIDが1であるinitプロセスにSIGHUPシグナルを送る必要があります。

    [armadillo ~]# echo ::respawn:/sbin/getty -L 115200 ttySC8 >> /etc/inittab
    [armadillo ~]# kill -SIGHUP 1

ATDEのminicomにログインプロンプトが表示されます。ユーザー「guest」でログインすることができます。

[ティップ]

以下のように/etc/securettyに端末(シリアルデバイス)を登録すると、特権ユーザー「root」でログインすることが可能になります。

[armadillo ~]# echo ttySC8 >> /etc/securetty

6.4. ストレージ

Armadillo-810でストレージとして使用可能なデバイスを次に示します。

表6.10 ストレージデバイス

デバイス種類ディスクデバイス先頭パーティション
USBフラッシュメモリ/dev/sd*[a]/dev/sd*1
SDカード/dev/mmcblk0/dev/mmcblk0p1

[a] USBハブを利用して複数のUSBメモリを接続した場合は、認識された順に sda sdb sdc ... となります。


6.4.1. ストレージの使用方法

ここでは、SDカードを例にストレージの使用方法を説明します。

Linuxでは、アクセス可能なファイルやディレクトリは、一つの木構造にまとめられています。あるストレージデバイスのファイルシステムを、この木構造に追加することを、マウントするといいます。マウントを行うコマンドは、mountです。

mountコマンドの典型的なフォーマットは、次の通りです。

mount -t fstype device dir

図6.21 mountコマンド書式


-t オプションに続くdeviceには、ファイルシステムタイプを指定します[15]。FAT32ファイルシステムの場合はvfat[16]、EXT3ファイルシステムの場合はext3を指定します。

deviceには、ストレージデバイスのデバイスファイル名を指定します。SDカードのパーティション1の場合は/dev/mmcblk0p1、パーティション2の場合は/dev/mmcblk0p2となります。

dirには、ストレージデバイスのファイルシステムをマウントするディレクトリを指定します。

SDスロットにSDカードを挿入した状態で図6.22「ストレージのマウント」に示すコマンドを実行すると、/mntディレクトリにSDカードのファイルシステムをマウントします。SDカード内のファイルは、/mntディレクトリ以下に見えるようになります。

[armadillo ~]# mount -t vfat /dev/mmcblk0p1 /mnt

図6.22 ストレージのマウント


[注記]

FAT32ファイルシステムをマウントした場合、次の警告メッセージが表示される場合があります。

FAT-fs (mmcblk0p1): utf8 is not a recommended IO charset for
FAT filesystems, filesystem will be case sensitive!

これは無視して構いません。 UTF-8 ロケールでは結局はファイル名の表示を正しく処理できないためです。

ストレージを安全に取り外すには、アンマウントする必要があります。アンマウントを行うコマンドは、umountです。オプションとして、アンマウントしたいデバイスがマウントされているディレクトリを指定します。

[armadillo ~]# umount /mnt

図6.23 ストレージのアンマウント


6.4.2. ストレージのパーティション変更とフォーマット

通常、購入したばかりのSDカードやUSBメモリは、一つのパーティションを持ち、FAT32ファイルシステムでフォーマットされています。

パーティション構成を変更したい場合、fdiskコマンドを使用します。fdiskコマンドの使用例として、一つのパーティションで構成されているSDカードのパーティションを、2つに分割する例を図6.24「fdiskコマンドによるパーティション変更」に示します。一度、既存のパーティションを削除してから、新たにプライマリパーティションを二つ作成しています。先頭のパーティションには100MByte、二つめのパーティションに残りの容量を割り当てています。先頭のパーティションは/dev/mmcblk0p1、二つめは/dev/mmcblk0p2となります。fdiskコマンドの詳細な使い方は、manページ等をご参照ください。

[armadillo ~]# fdisk /dev/mmcblk0

The number of cylinders for this disk is set to 62528.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): d
Selected partition 1

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-62528, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-62528, default 62528): +100M

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (3054-62528, default 3054): 
Using default value 3054
Last cylinder or +size or +sizeM or +sizeK (3054-62528, default 62528): 
Using default value 62528

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
 mmcblk0: p1 p2
 mmcblk0: p1 p2
Syncing disks.

図6.24 fdiskコマンドによるパーティション変更


FAT32ファイルシステムでストレージデバイスをフォーマットするには、mkfs.vfatコマンドを使用します。また、EXT2やEXT3ファイルシステムでフォーマットするには、mke2fsコマンドを使用します。SDカードのパーティション1をEXT3ファイルシステムでフォーマットするコマンド例を、次に示します。

[armadillo ~]# mke2fs -j /dev/mmcblk0p1

図6.25 EXT3ファイルシステムの構築


6.5. AVコーデックミドルウェア

AVコーデックミドルウェアを使い、Armadillo-810 カメラモジュール 01 (B コネクタ用)のカメラデバイスから取り込んだ画像をH.264/AVCでエンコードし、MP4(MPEG-4 Part 14)コンテナに格納する方法を説明します。

[ティップ]

AVコーデックミドルウェアには、Atmark Dist v20140131以降(ユーザーランドイメージ romfs-a810-v1.04.img以降)、Linuxカーネル v3.4-at6以降(カーネルイメージ linux-a810-v1.05.img.gz 以降)で対応しています。それ以前のものを使用されている場合、本節で説明する動作確認を行う前にイメージを対応バージョンに書き換えてください。

標準状態ではuvc-gadgetが起動しており、それがカメラデバイスを使用しています。AVコーデックミドルウェアでカメラデバイスを扱う前に、uvc-gadgetを停止させてください。

[armadillo ~]# killall uvc-gadget

図6.26 uvc-gadgetの停止


また、エンコード結果のファイルはサイズが大きくなるので、ストレージに保存します。「ストレージ」を参照して、USBメモリやSDカード等のストレージデバイスを/mntにマウントしておいてください。

Armadillo-810 カメラモデルの場合、Armadillo-810 カメラモジュール01 (Bコネクタ用)のデバイスファイルは/dev/video1となります。下記のコマンドを実行すると、カメラデバイスから取り込んだ画像をエンコードし、MP4ファイルに保存します。エンコードを停止する場合は、Ctrl+cを入力してください。

[armadillo ~]# gst-launch-1.0 -e v4l2src device=/dev/video1 \
 ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 \
 ! acmh264enc ! queue \
 ! qtmux ! filesink location=/mnt/output.mp4
Setting pipeline to PAUSED ...
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver attached to camera 0
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
WARNING: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not get 
parameters on device '/dev/video1'
Additional debug info:
gstv4l2object.c(2445): gst_v4l2_object_set_format (): /GstPipeline:pipeline0/Gst
V4l2Src:v4l2src0:
system error: Inappropriate ioctl for device
Redistribute latency...

図6.27 H.264/AVC動画のエンコード


[ティップ]

次のようにnum-buffersプロパティを指定すると、カメラデバイスから取り込む画像の枚数を指定することできます。

[armadillo ~]# gst-launch-1.0 -e v4l2src device=/dev/video1 \
 num-buffers=300 \
 ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 \
 ! acmh264enc ! queue \
 ! qtmux ! filesink location=/mnt/output.mp4

6.6. LED

Armadillo-810のLEDは、LEDクラスとして実装されています。LEDクラスディレクトリ以下のファイルによってLEDの制御を行うことができます。LEDクラスディレクトリとLEDの対応については、表6.11「LEDクラスディレクトリとLEDの対応」を参照してください。

表6.11 LEDクラスディレクトリとLEDの対応

LEDクラスディレクトリ説明デフォルトトリガ
/sys/class/leds/LED1/LED1 (黄)none
/sys/class/leds/LED2/LED2 (黄)none
/sys/class/leds/LED3/LED3 (黄)none
/sys/class/leds/LED4/LED4 (黄)none

以降の説明では、任意のLEDを示すLEDクラスディレクトリを"/sys/class/leds/[LED]"のように表記します。

6.6.1. LEDを点灯/消灯する

LEDクラスディレクトリ以下のbrightnessファイルへ値を書き込むことによって、LEDの点灯/消灯を行うことができます。brightnessに書き込む有効な値は0〜255です。

brightnessに0以外の値を書き込むとLEDが点灯します。

[armadillo ~]# echo 1 > /sys/class/leds/[LED]/brightness

図6.28 LEDを点灯させる


[ティップ]

Armadillo-810のLEDには輝度制御の機能が無いため、0 (消灯)、1〜255 (点灯)の2つの状態のみ指定することができます。

brightnessに0を書き込むとLEDが消灯します。

[armadillo ~]# echo 0 > /sys/class/leds/[LED]/brightness

図6.29 LEDを消灯させる


brightnessを読み出すとLEDの状態が取得できます。

[armadillo ~]# cat /sys/class/leds/[LED]/brightness
0

図6.30 LEDの状態を表示する


6.6.2. トリガを使用する

LEDクラスディレクトリ以下のtriggerファイルへ値を書き込むことによってLEDの点灯/消灯にトリガを設定することができます。triggerに書き込む有効な値を次に示します。

表6.12 triggerの種類

設定説明
noneトリガを設定しません。
mmc0SDカードのアクセスランプにします。
timer任意のタイミングで点灯/消灯を行います。この設定にすることにより、LEDクラスディレクトリ以下にdelay_on, delay_offファイルが出現し、それぞれ点灯時間, 消灯時間をミリ秒単位で指定します。
heartbeat心拍のように点灯/消灯を行います。工場出荷イメージでは設定することができません。
default-on主にカーネルから使用します。起動時にLEDが点灯します。工場出荷イメージでは設定することができません。

以下のコマンドを実行すると、LEDが1秒点灯、500ミリ秒消灯を繰り返します。

[armadillo ~]# echo timer > /sys/class/leds/[LED]/trigger
[armadillo ~]# echo 1000 > /sys/class/leds/[LED]/delay_on
[armadillo ~]# echo 500 > /sys/class/leds/[LED]/delay_off

図6.31 LEDのトリガにtimerを指定する


triggerを読み出すとLEDのトリガが取得できます。"[ ]"が付いているものが現在のトリガです。

[armadillo ~]# cat /sys/class/leds/[LED]/trigger
[none] mmc0 timer

図6.32 LEDのトリガを表示する


6.7. GPIO

Armadillo-810のGPIOは、generic GPIOとして実装されています。GPIOクラスディレクトリ以下のファイルによってGPIOの制御を行うことができます。GPIOクラスディレクトリとGPIOの対応を次に示します。

表6.13 Armadillo-810 拡張ボード01 (Aコネクタ用)のCON2のGPIOディレクトリ

ピン番号GPIOディレクトリ
CON2 1ピン/sys/class/gpio/gpio66/
CON2 2ピン/sys/class/gpio/gpio67/
CON2 3ピン/sys/class/gpio/gpio68/
CON2 4ピン/sys/class/gpio/gpio69/
CON2 5ピン/sys/class/gpio/gpio70/
CON2 6ピン/sys/class/gpio/gpio71/
CON2 7ピン/sys/class/gpio/gpio72/
CON2 8ピン/sys/class/gpio/gpio73/
CON2 9ピン/sys/class/gpio/gpio74/
CON2 10ピン/sys/class/gpio/gpio75/
CON2 13ピン/sys/class/gpio/gpio160/
CON2 14ピン/sys/class/gpio/gpio161/
CON2 15ピン/sys/class/gpio/gpio159/
CON2 16ピン/sys/class/gpio/gpio162/
CON2 18ピン/sys/class/gpio/gpio7/
CON2 19ピン/sys/class/gpio/gpio8/
CON2 20ピン/sys/class/gpio/gpio10/
CON2 21ピン/sys/class/gpio/gpio11/
CON2 22ピン/sys/class/gpio/gpio20/
CON2 23ピン/sys/class/gpio/gpio12/
CON2 24ピン/sys/class/gpio/gpio5/
CON2 25ピン/sys/class/gpio/gpio13/
CON2 26ピン/sys/class/gpio/gpio9/

以降の説明では、任意のGPIOを示すGPIOクラスディレクトリを"/sys/class/gpio/[GPIO]"のように表記します。

6.7.1. 入出力方向を変更する

GPIOディレクトリ以下のdirectionファイルへ値を書き込むことによって、入出力方向を変更することができます。directionに書き込む有効な値を次に示します。

表6.14 directionの設定

設定説明
high入出力方向をOUTPUTに設定します。出力レベルの取得/設定を行うことができます。出力レベルはHIGHレベルになります。
out入出力方向をOUTPUTに設定します。出力レベルの取得/設定を行うことができます。出力レベルはLOWレベルになります。
lowoutを設定した場合と同じです。
in入出力方向をINPUTに設定します。入力レベルの取得を行うことができますが設定はできません。

6.7.2. 入力レベルを取得する

GPIOディレクトリ以下のvalueファイルから値を読み出すことによって、入力レベルを取得することができます。"0"はLOWレベル、"1"はHIGHレベルを表わします。入力レベルの取得は入出力方向がINPUT, OUTPUTのどちらでも行うことができます。入出力方向がOUTPUTの時に読み出される値は、GPIOピンの状態ではなく、自分がvalueファイルに書き込んだ値となります。

[armadillo ~]# cat /sys/class/gpio/[GPIO]/value
0

図6.33 GPIOの入力レベルを取得する


6.7.3. 出力レベルを設定する

GPIOディレクトリ以下のvalueファイルへ値を書き込むことによって、出力レベルを設定することができます。"0"はLOWレベル、"0"以外はHIGHレベルを表わします。出力レベルの設定は入出力方向がOUTPUTでなければ行うことはできません。

[armadillo ~]# echo 1 > /sys/class/gpio/[GPIO]/value

図6.34 GPIOの出力レベルを設定する


6.8. RTC

Armadillo-810 拡張ボード01 (Aコネクタ用)には、カレンダ時計(Real Time Clock)が実装されています。電源を切断しても一定時間(平均300秒間、最小60秒間)時刻を保持することができます

[ティップ]

長時間電源が切断されても時刻データを保持させたい場合は、Armadillo-810 拡張ボード01 (Aコネクタ用)のCON8(RTC外部バックアップ)にバッテリ(対応電池: CR2032)を接続します。

6.8.1. RTCに時刻を設定する

Linuxの時刻には、Linuxカーネルが管理するシステムクロックと、RTCが管理するハードウェアクロックの2種類があります。RTCに時刻を設定するためには、まずシステムクロックを設定します。その後に、ハードウェアクロックをシステムクロックと一致させる手順となります。

システムクロックは、dateコマンドを用いて設定します。dateコマンドの引数には、設定する時刻を[MMDDhhmmCCYY.ss]というフォーマットで指定します。時刻フォーマットの各フィールドの意味を次に示します。

表6.15 時刻フォーマットのフィールド

フィールド意味
MM
DD日(月内通算)
hh
mm
CC年の最初の2桁(省略可)
YY年の最後の2桁(省略可)
ss秒(省略可)

2013年1月23日4時56分00秒に設定する例を次に示します。

[armadillo ~]# date 1
Sat Jan  1 09:00:00 JST 2000
[armadillo ~]# date 012304562013.00 2
Wed Jan 23 04:56:00 JST 2013
[armadillo ~]# date 3
Wed Jan 23 04:56:00 JST 2013

1

現在のシステムクロックを表示します。

2

システムクロックを設定します。

3

システムクロックが正しく設定されていることを確認します。

図6.35 システムクロックを設定


システムクロックを設定後、ハードウェアクロックをhwclockコマンドを用いて設定します。

[armadillo ~]# hwclock 1
Sat Jan  1 00:00:00 2000  0.000000 seconds
[armadillo ~]# hwclock --utc --systohc 2
[armadillo ~]# hwclock --utc 3
Wed Jan 23 04:56:10 2013  0.000000 seconds

1

現在のハードウェアクロックを表示します。

2

ハードウェアクロックを協定世界時(UTC)で設定します。

3

ハードウェアクロックがUTCで正しく設定されていることを確認します。

図6.36 ハードウェアクロックを設定




[9] 複数のUSB機能を持ったデバイスのこと。

[10] 画面は、ハメコミ合成しています。

[11] /dev/を指定する必要はありません。

[12] IPv4LLによって割り当てられる特定のアドレス範囲(169.254.0.1~169.254.255.254)のIPアドレス。

[13] ArmadilloのIPアドレスが 192.168.10.10 の場合、http://192.168.10.10/ となります。

[14] /dev/を指定する必要はありません。

[15] ファイルシステムタイプの指定は省略可能です。省略した場合、mountコマンドはファイルシステムタイプを推測します。この推測は必ずしも適切なものとは限りませんので、事前にファイルシステムタイプが分かっている場合は明示的に指定してください。

[16] 通常、購入したばかりのSDカードはFAT32ファイルシステムでフォーマットされています。