動作確認方法

6.1. 動作確認を行う前に

Armadillo には、 OS として Debian がインストールされています。基本的には PC Linux と同じように動作します。ここではネットワークの設定やストレージのように一般的な動作に加え、GPIO や LED などについて説明します。

[注記]

工場出荷状態でフラッシュメモリに書き込まれているイメージファイルは、最新版でない可能性があります。最新版のイメージファイルはArmadilloサイトからダウンロード可能です。最新版のイメージファイルに書き換えてからのご使用を推奨します。

イメージファイルの書き換えについては、11章イメージファイルの書き換え方法を参照してください。

6.2. ネットワーク

ここでは、ネットワークの設定方法やネットワークを利用するアプリケーションについて説明します。

6.2.1. 接続可能なネットワーク

Armadillo-610は、 Ethernet に対応しています。Linuxからは、eth0 に見えます。

表6.1 ネットワークとネットワークデバイス

ネットワーク ネットワークデバイス 出荷時の設定

Ethernet

eth0

DHCP


6.2.2. ネットワークの設定方法

ここでは有線LANの使用方法について説明します。Armadillo-610では、通常のLinuxシステムと同様にネットワーク設定を行います。出荷状態では eth0 が DHCP [6] でネットワークの設定を行います。 DHCP が無い環境の場合は、 「固定IPアドレスに設定する」 を参照し設定してください。

6.2.3. 基本的な使い方

最近の GNU/Linux OSでは、古くから使われてきた ifconfig (net-tools) に代り iproute2 を使用します。 ifconfig は Deprecated されています。本書でも ifconfig ではなく、 iproute2 に含まれている ip コマンドなどを使用します。

6.2.3.1. IPアドレスの一覧

IPアドレスの一覧を確認するには、次のようにコマンドを実行します。

[armadillo ~]# ip address
ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defaul
t qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP gr
oup default qlen 1000
    link/ether 00:11:0c:00:07:a4 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.107/16 brd 172.16.255.255 scope global eth0
       valid_lft forever preferred_lft forever

図6.1 インターフェースの一覧確認


ネットワークデバイスの一覧を確認するには link を使います。

[armadillo ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
 group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mo
de DEFAULT group default qlen 1000
    link/ether 00:11:0c:00:07:a4 brd ff:ff:ff:ff:ff:ff

図6.2 ネットワークデバイスの一覧確認


他にも ip コマンドではルーティングテーブルの表示やトンネルの設定などもできます。詳しくは ip コマンドの man ページを参照してください。

6.2.3.2. インターフェースの有効化・無効化

インターフェースを有効化するには、次のようにコマンドを実行します。 ifup コマンドは Debian 特有のコマンドで ifupdown パッケージに含まれています。 ifconfig とは関係なく抽象的にネットワークを操作するためのコマンドです。設定は /etc/network/interfaces で行います。

[armadillo ~]# ifup eth0

図6.3 インターフェースの有効化


インターフェースを無効化するには、次のようにコマンドを実行します。

[armadillo ~]# ifdown eth0

図6.4 インターフェースの無効化


[注記]

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

[注記]

/etc/network/interfaces の変更は、インターフェースを無効化した状態で行ってください。 DHCP が動作している場合など、設定が反映されない場合があります。

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

表6.2「固定IPアドレス設定例」の内容に設定する例を、以下に示します。

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

項目設定

IPアドレス

192.0.2.10

ネットマスク

255.255.255.0

ネットワークアドレス

192.0.2.0

ブロードキャストアドレス

192.0.2.255

デフォルトゲートウェイ

192.0.2.1


[armadillo ~]# vi /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)

auto lo eth0
iface lo inet loopback
iface eth0 inet static
    address 192.0.2.10
    netmask 255.255.255.0
    network 192.0.2.0
    broadcast 192.0.2.255
    gateway 192.0.2.1

図6.5 固定IPアドレス設定


6.2.3.4. DHCPに設定する

DHCPに設定する例を以下にに示します。

[armadillo ~]# vi /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)

auto lo
iface lo inet loopback
iface eth0 inet dhcp

図6.6 DHCP設定


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

固定 IP時、または DHCP で DNS情報が取得できない場合は、DNSサーバーを指定する必要があります。DNSサーバーを指定する例を、以下に示します。

[armadillo ~]# vi /etc/resolv.conf
domain local-network
search local-network
nameserver 192.0.2.1

図6.7 DNSサーバーの指定


6.2.3.6. インターフェースの修正を反映する

有効化されているインターフェースは、修正しないでください。必ず無効化してから設定を変更してください。

[armadillo ~]# ifdown eth0
[armadillo ~]# vi /etc/network/interfaces
  :
[armadillo ~]# ifup eth0

6.2.3.7. 有線LANの接続を確認する

有線LANで正常に通信が可能か確認します。設定を変更した場合、必ず変更したインターフェースを再度有効化してください。

同じネットワーク内にある通信機器とPING通信を行います。以下の例では、通信機器が「192.0.2.20」というIPアドレスを持っていると想定しています。

[armadillo ~]# ping 192.0.2.20
ping -c 3 192.0.2.20
PING 192.0.2.20 (192.0.2.20) 56(84) bytes of data.
64 bytes from 192.0.2.20: icmp_seq=1 ttl=63 time=1.39 ms
64 bytes from 192.0.2.20: icmp_seq=2 ttl=63 time=1.35 ms
64 bytes from 192.0.2.20: icmp_seq=3 ttl=63 time=1.34 ms

--- 192.0.2.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.343/1.365/1.395/0.021 ms

図6.8 有線LANのPING確認


[注記]

有線LAN以外のインターフェースが有効化されている場合、ルーティングの設定などにより、ネットワーク通信に有線LANが使用されない場合があります。設定を必ず確認してください。確実に有線LANの接続確認をする場合は、有線LAN以外のインターフェースを無効化してください。

6.2.4. ファイアーウォール

Armadillo-610 では、ファイアーウォールの実現に iptables を使用しています。 工場出荷状態の Armadillo-610 では、開発時の利便性のために、すべての通信(送信・受信・転送)を許可する設定になっています。

Armadillo を製品として運用する際には、最低限、踏み台として利用されない程度のファイアーウォールを設定しておかなければいけません。

ここでは、iptables のポリシーの設定と、Armadillo がネットワークに接続される前に自動的に設定を適用する方法を紹介します。

6.2.4.1. iptables のポリシーの設定

送信はすべて許可、受信・転送はすべて破棄するように設定します。

[armadillo ~]# iptables --policy INPUT DROP
[armadillo ~]# iptables --policy FORWARD DROP
[armadillo ~]# iptables --policy OUTPUT ACCEPT
[ティップ]iptablesのポリシーの設定で受信と転送を許可する

iptables のポリシーの設定をもとに戻す(受信・転送を許可する)には次のコマンドを実行します。

[armadillo ~]# iptables --policy INPUT ACCEPT
[armadillo ~]# iptables --policy FORWARD ACCEPT

6.2.4.2. lo (ローカルループバックインターフェース)の許可

[armadillo ~]# iptables --append INPUT --in-interface lo --jump ACCEPT

6.2.4.3. iptables の設定確認

設定されている内容を参照するには、次のコマンドを実行します。

[armadillo ~]# iptables --list --verbose
Chain INPUT (policy DROP 1 packets, 72 bytes)
 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere


Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination


Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

図6.9 iptables設定確認


[ティップ]

図6.9「iptables設定確認」の設定では受信パケットが全て破棄されます。これが最も安全で最小の設定です。

この設定をベースに、SSHやHTTPSなどの通信プロトコルから利用するものだけを許可していくことをおすすめします。

6.2.4.4. iptables の設定を保存し自動的に適用する

ここまでの手順で行った iptables の設定は、Armadillo を再起動すると失われてしまいます。そこで、Armadillo-610 では iptables-persistent パッケージを利用して、あらかじめ保存しておいた設定を自動的に適用します。

iptables の設定を保存するには、次のコマンドを実行します。

[armadillo ~]# iptables-save > /etc/iptables/rules.v4

図6.10 iptables設定保存


[ティップ]

iptables-persistent がインストールされていなかった場合は、/etc/iptables/ ディレクトリが存在しないため、図6.10「iptables設定保存」 が失敗します。 次のコマンドを実行して iptables-persistent をインストールし、再度 図6.10「iptables設定保存」 を行ってください。

[armadillo ~]# iptables --policy INPUT ACCEPT
[armadillo ~]# apt-get update && apt-get install iptables-persistent

図6.11 iptablesのポリシー設定(受信許可)とiptables-persistentのインストール


次回起動時から、Armadillo がネットワークに接続される前のタイミングで、自動的にiptables の設定が適用されます。

6.3. ストレージ

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

表6.3 ストレージデバイス

デバイス種類 ディスクデバイス先頭パーティションインターフェース

オンボード eMMC

/dev/mmcblk0

/dev/mmcblk0p1

オンボード

オンボード eMMC (GPP)

/dev/mmcblk0gp2

なし

オンボード

オンボード eMMC (GPP)

/dev/mmcblk0gp3

なし

オンボード

SD/SDHC/SDXCカード

/dev/mmcblk1

/dev/mmcblk1p1

SDインターフェース(Armadillo-610: CON1) [a]

SDインターフェース(Armadillo-610 拡張ボード: CON1) [a]

USBメモリ

/dev/sd* [b]

/dev/sd*1

USB ホストインターフェース (Armadillo-610 拡張ボード: CON5)

[a] Armadillo-610: CON1 とArmadillo-610 拡張ボード: CON1 は排他利用となります。詳しくは「Armadillo-610 拡張ボードのSD インターフェースを利用する」を参照してください。

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


[ティップ]GPP(General Purpose Partition)について

GPP は、eMMC の通常の記憶領域を割譲して eMMC 内部に作られた記憶領域です。 eMMC の通常の記憶領域とはアドレス空間が異なるため、/dev/mmcblk0 および /dev/mmcblk0p* に対してどのような書き込みを行っても /dev/mmcblk0gp* のデータが書き換わることはありません。

Armadillo-610 では、8 MiB の GPP を4つ作成しています。各領域の用途を表6.4「eMMCのGPPの用途」に示します。

表6.4 eMMCのGPPの用途

ディスクデバイス 用途

/dev/mmcblk0gp0

ライセンス情報等の保存

/dev/mmcblk0gp1

予約領域

/dev/mmcblk0gp2

ユーザー領域

/dev/mmcblk0gp3

ユーザー領域


[ティップ]

GPPのユーザー領域を使用する例を「eMMC の GPP(General Purpose Partition) を利用する」に記載しています。

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

ここでは、SDHCカードを接続した場合を例にストレージの使用方法を説明します。以降の説明では、共通の操作が可能な場合に、SD/SDHC/SDXCカードをSDカードと表記します。

[ティップ]

SDXC/microSDXCカードを使用する場合は、事前に「ストレージのパーティション変更とフォーマット」を参照してフォーマットを行う必要があります。これは、LinuxカーネルがexFATファイルシステムを扱うことができないためです。通常、購入したばかりのSDXC/microSDXCカードはexFATファイルシステムでフォーマットされています。

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

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

mount [-t fstype] device dir

図6.12 mountコマンド書式


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

[注記]

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

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

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

microSDスロット (Armadillo-610: CON1) にSDHCカードを挿入し[7]、以下に示すコマンドを実行すると、 /media ディレクトリにSDHCカードのファイルシステムをマウントすることができます。microSDカード内のファイルは、/media ディレクトリ以下に見えるようになります。

[armadillo ~]# mount -t vfat /dev/mmcblk1p1 /media
[armadillo ~]# ls /media
  :
  :

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


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

[armadillo ~]# umount /media

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


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

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

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

[armadillo ~]# fdisk /dev/mmcblk1

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-7744511, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-7744511, default 7744511): +100M

Created a new partition 1 of type 'Linux' and of size 100 MiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (206848-7744511, default 206848):
Last sector, +sectors or +size{K,M,G,T,P} (206848-7744511, default 7744511):

Created a new partition 2 of type 'Linux' and of size 3.6 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
[  447.905671]  mmcblk1: p1 p2
Syncing disks.

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


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

[armadillo ~]# mkfs.ext4 /dev/mmcblk1p1

図6.16 EXT4ファイルシステムの構築


6.4. LED

Armadillo-610 の LED は GPIO で接続されているため、ソフトウェアで制御することができます。

利用しているデバイスドライバはLEDクラスとして実装されているため、LEDクラスディレクトリ以下のファイルによってLEDの制御を行うことができます。LEDクラスディレクトリと各LEDの対応を次に示します。

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

LEDクラスディレクトリインターフェースデフォルトトリガ

/sys/class/leds/green/

ユーザーLED緑

default-on

/sys/class/leds/yellow/

ユーザーLED黄

none


以降の説明では、任意のLEDを示すLEDクラスディレクトリを /sys/class/leds/[LED]/ のように表記します。 [LED] の部分を適宜読みかえてください。

6.4.1. LEDを点灯/消灯する

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

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

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

図6.17 LEDを点灯させる


[注記]

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

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

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

図6.18 LEDを消灯させる


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

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

図6.19 LEDの状態を表示する


6.4.2. トリガを使用する

Linux では、LED をある特定のタイミングで光らせることができます。これを「トリガー」と呼びます。LEDクラスディレクトリ以下の trigger ファイルへ値を書き込むことによってLEDの点灯/消灯にトリガを設定することができます。 trigger でサポートされている値は以下の通りです。

表6.6 LEDトリガーの種類

設定 説明

none

トリガを設定しません

mmc0

eMMCのアクセスランプにします

mmc1

microSDスロットのアクセスランプにします

timer

任意のタイミングで点灯/消灯を行います。この設定にすることにより、LEDクラスディレクトリ以下にdelay_on, delay_offファイルが出現し、それぞれ点灯時間, 消灯時間をミリ秒単位で指定します

heartbeat

心拍のように点灯/消灯を行います

default-on

主にLinuxカーネルから使用します。LEDが点灯します


trigger ファイルを読み出すとサポートしているトリガーと、現在有効のトリガーが表示されます。 [] が付いているものが現在のトリガです。

[armadillo ~]# cat /sys/class/leds/[LED]/trigger
[none] rc-feedback kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shif
tlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-c
trlllock kbd-ctrlrlock mmc0 mmc1 timer oneshot heartbeat default-on

図6.20 対応している LEDトリガーを表示


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

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

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


6.5. ユーザースイッチ

Armadillo-610 のユーザースイッチのデバイスドライバは、インプットデバイスとして実装されています。インプットデバイスのデバイスファイルからボタンプッシュ/リリースイベントを取得することができます。

ユーザースイッチのインプットデバイスファイルと、各スイッチに対応したイベントコードを次に示します。

表6.7 インプットデバイスファイルとイベントコード

ユーザースイッチインプットデバイスファイルイベントコード

SW1

/dev/input/event0

28 (KEY_ENTER)


[警告]

インプットデバイスは検出された順番にインデックスが割り振られます。USBデバイスなどを接続してインプットデバイスを追加している場合は、デバイスファイルのインデックスが異なる可能性があります。

6.5.1. イベントを確認する

ユーザースイッチのボタンプッシュ/リリースイベントを確認するために、ここでは evtest コマンドを利用します。 evtest を停止するには、Ctrl-c を入力してください。

[armadillo ~]# evtest /dev/input/event0
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio-keys"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 28 (KEY_ENTER)
Properties:
Testing ... (interrupt to exit)
Event: time 1523249446.289965, type 1 (EV_KEY), code 28 (KEY_ENTER), value 0  1
Event: time 1523249446.289965, -------------- SYN_REPORT ------------
Event: time 1523249446.349969, type 1 (EV_KEY), code 28 (KEY_ENTER), value 1  2
Event: time 1523249446.349969, -------------- SYN_REPORT ------------

図6.22 ユーザースイッチ: イベントの確認


1

SW1のボタン プッシュ イベントを検出したときの表示

2

SW1のボタン リリース イベントを検出したときの表示

6.6. RTC

Armadillo-610は、i.MX6ULLのRTC機能を利用しています。 また、Armadillo-610 拡張ボードには、日本電波工業(NDK)製 NR3225SAが搭載されており、こちらも利用することができます。

6.6.1. RTCに時刻を設定する

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

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

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

フィールド意味

MM

DD

日(月内通算)

hh

mm

CC

年の最初の2桁(省略可)

YY

年の最後の2桁(省略可

ss

秒(省略可)


2018年3月2日12時34分56秒に設定する例を次に示します。

[armadillo ~]# date
Sat Jan  1 09:00:00 JST 2000
[armadillo ~]# systemctl stop systemd-timesyncd.service
[armadillo ~]# date 030212342018.56
Fri Mar  2 12:34:56 JST 2018
[armadillo ~]# date
Fri Mar  2 12:34:57 JST 2018

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


[注記]

Armadillo-610では、標準でsystemd-timesyncd.serviceが動作しています。 systemd-timesyncd.serviceは、自身が正しいと考えている時刻となるように、自動でシステムクロックおよびハードウェアクロックを設定します。

そのため、dateコマンドで過去の時刻を設定しても、すぐにsystemd-timesyncd.serviceによって変更前の正しい時刻に再設定されてしまいます。 これを避けるため、システムクロックを設定する前にsystemd-timesyncd.serviceを停止する必要があります。

[armadillo ~]# systemctl stop systemd-timesyncd.service
[ティップ]

Armadillo-610 のタイムゾーンはデフォルトで JST に設定されています。timedatectl コマンドで、これを変更することができます。

タイムゾーンを UTC に変更するには次のようにコマンドを実行します。

root@armadillo:~# date
Tue Feb 12 10:32:07 JST 2019
root@armadillo:~# timedatectl set-timezone Etc/UTC
root@armadillo:~# date
Tue Feb 12 01:32:10 UTC 2019

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

[armadillo ~]# hwclock  1
2000-01-01 00:00:00.000000+0900
[armadillo ~]# hwclock --utc --systohc  2
[armadillo ~]# hwclock --utc  3
2018-03-02 12:35:08.213911+0900

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


1

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

2

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

3

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

[ティップ]

i.MX6ULLのRTCに時刻を設定する場合は、--rtc オプションで /dev/rtc1 を指定します。

[armadillo ~]# hwclock --rtc /dev/rtc1
[armadillo ~]# hwclock --rtc /dev/rtc1 --utc --systohc
[armadillo ~]# hwclock --rtc /dev/rtc1 --utc

6.6.2. RTCから時刻を取得する

hwclock コマンドでRTCから時刻を取得することができます。

[armadillo ~]# hwclock
2018-11-19 09:51:53.743739+0900
[ティップ]

NR3225SA に接続した電池残量が少ない状態 (厳密には電源電圧が 1.3V 以上 1.5V 未満の状態) で Armadillo を起動すると、NR3225SA から時刻を取得できなくなります。

[armadillo ~]# hwclock
[   44.986529] rtc-nr3225sa 5-0032: Voltage low, data is invalid.
hwclock: ioctl(RTC_RD_TIME) to /dev/rtc to read the time failed: Invalid argument

この状態になった場合は、以下のどちらかの方法を実施すると取得可能になります。

  • Armadilloの電源をOFFにして古い電池を取り外し、10 秒以上経過した後に新しい電池を取り付ける。
  • RTC に時刻を再設定する。

6.7. GPIO

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

Armadillo-610 開発セットの工場出荷状態では、DIDO インターフェース(Armadillo-610 拡張ボード: CON13B)の各ピンをGPIOとして利用することができます。ピン番号とGPIO番号の対応を次に示します。

表6.9 Armadillo-610 拡張ボード: CON13B ピン番号とGPIO番号の対応

ピン番号 ピン名 GPIO番号

4

UART2_TX_DATA

20

5

UART2_RX_DATA

21

6/7

UART5_TX_DATA

30

8/9

UART5_RX_DATA

31


at-dtweb を利用すると、表6.9「Armadillo-610 拡張ボード: CON13B ピン番号とGPIO番号の対応」以外のピンも GPIO として利用することができるようになります。at-dtweb の利用方法については「Device Treeをカスタマイズする」を参照してください。

拡張インターフェース(Armadillo-610: CON2)のピン番号とGPIO番号の対応を次に示します。

表6.10 Armadillo-610: CON2 ピン番号とGPIO番号の対応

ピン番号 ピン名 GPIO番号

11

UART1_RTS_B

19

12

CSI_MCLK

113

14

GPIO1_IO04

4

15

GPIO1_IO03

3

16

GPIO1_IO02

2

17

GPIO1_IO01

1

18

LCD_DATA00

69

19

LCD_DATA01

70

20

LCD_DATA02

71

21

LCD_DATA03

72

22

LCD_DATA04

73

23

LCD_DATA05

74

24

LCD_DATA06

75

25

LCD_DATA07

76

26

LCD_DATA08

77

27

LCD_DATA09

78

28

LCD_DATA10

79

29

LCD_DATA11

80

30

LCD_DATA12

81

31

LCD_DATA13

82

32

LCD_DATA14

83

33

LCD_DATA15

84

34

LCD_DATA16

85

35

LCD_DATA17

86

37

LCD_CLK

64

38

LCD_HSYNC

66

39

LCD_VSYNC

67

40

LCD_ENABLE

65

41

NAND_DQS

112

43

JTAG_MOD

10

55

CSI_VSYNC

115

56

CSI_HSYNC

116

57

CSI_DATA04

121

58

CSI_DATA05

122

59

CSI_DATA06

123

60

CSI_DATA07

124

61

CSI_DATA02

119

62

CSI_DATA01

118

63

CSI_DATA03

120

64

CSI_DATA00

117

65

CSI_PIXCLK

114

66

NAND_DATA07

105

67

NAND_DATA06

104

68

NAND_DATA05

103

69

NAND_DATA04

102

70

LCD_DATA23

92

71

LCD_DATA22

91

72

LCD_DATA21

90

73

LCD_DATA20

89

74

LCD_DATA19

88

76

LCD_DATA18

87

80

GPIO1_IO08

8

81

GPIO1_IO05

5

82

UART5_TX_DATA

30

83

UART1_TX_DATA

16

84

UART5_RX_DATA

31

85

UART1_RX_DATA

17

86

UART2_RTS_B

23

87

UART2_CTS_B

22

88

UART2_RX_DATA

21

89

UART2_TX_DATA

20

90

GPIO1_IO00

0

91

UART3_CTS_B

26

92

UART3_RTS_B

27

93

UART3_RX_DATA

25

94

UART3_TX_DATA

24


[ティップ]

GPIO番号は次の式より導くことができます。

GPIOx_IOy -> (x - 1) * 32 + y

例えば、GPIO4_IO8の場合は、以下のようになります。

  (4 - 1) * 32 + 8 = 104

6.7.1. GPIO クラスディレクトリを作成する

GPIOを利用するには、まずGPIOディレクトリを作成する必要があります。

GPIO クラスディレクトリは、 /sys/class/gpio/export に GPIO 番号を書き込むことによって、作成することができます。

[armadillo ~]# echo 20 > /sys/class/gpio/export
[armadillo ~]# ls /sys/class/gpio/gpio20/
active_low device direction edge subsystem uevent value

図6.25 GPIO クラスディレクトリを作成する


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

[ティップ]

作成済みの GPIO クラスディレクトリを削除するには、 /sys/class/gpio/unexport に GPIO 番号を書き込みます。

[armadillo ~]# echo 20 > /sys/class/gpio/unexport
[armadillo ~]# ls /sys/class/gpio/gpio20/
ls: cannot access '/sys/class/gpio/gpio20/': No such file or directory

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

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

表6.11 direction の設定

設定 説明

high

入出力方向を OUTPUT に設定します。出力レベルの取得/設定を行うことができます。出力レベルは HIGH レベルになります。

out

入出力方向を OUTPUT に設定します。出力レベルの取得/設定を行うことができます。出力レベルは LOW レベルになります。

low

out を設定した場合と同じです。

in

入出力方向を INPUT に設定します。入力レベルの取得を行うことができますが設定はできません。


[armadillo ~]# echo in > /sys/class/gpio/[GPIO]/direction

図6.26 GPIO の入出力方向を設定する(INPUT に設定)


[armadillo ~]# echo out > /sys/class/gpio/[GPIO]/direction

図6.27 GPIO の入出力方向を設定する(OUTPUT に設定)


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

GPIO ディレクトリ以下の value ファイルから値を読み出すことによって、入力レベルを取得することができます。"0"は LOW レベル、"1"は HIGH レベルを表わします。入力レベルの取得は入出力方向がINPUT, OUTPUT のどちらでも行うことができます。

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

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


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

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

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

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


6.8. RS485

Armadillo-610 拡張ボードは、電気的に絶縁された RS485 のシリアルポートが 1 ポート登載されています。シリアルポートのデバイスドライバは、TTYデバイスとして実装されているため TTY デバイスファイルから制御を行うことができます。

シリアルポートインターフェースと、TTY デバイスファイルの対応を次に示します。

表6.12 シリアルポートインターフェースとTTYデバイスファイルの対応

シリアルポートインターフェースTTYデバイスファイル

Armadillo-610 拡張ボード: CON13C

/dev/ttymxc1


6.8.1. RS485 の通信設定を変更する

RS485 設定は、アプリケーションプログラムまたは、Device Treeから変更することができます。

アプリケーションプログラムから変更が可能な RS485 設定とその初期値を表6.13「RS485 設定と初期値(アプリケーションプログラム)」に示します。flags は各ビットごとの論理和を示します。

表6.13 RS485 設定と初期値(アプリケーションプログラム)

設定説明初期値

flags

ENABLED(bit0)

0: RS485 無効

1: RS485 有効

1

RTS_ON_SEND(bit1)

0: データ送信時の RTS(Driver Enable)が Low

1: データ送信時の RTS(Driver Enable)が High

1

RTS_AFTER_SEND(bit2)

0: データ非送信時の RTS(Driver Enable)が Low

1: データ非送信時の RTS(Driver Enable)が High

0

RX_DURING_TX(bit4)

0: 半二重通信

1: 全二重通信

0

delay_rts_before_send

送信前遅延時間(ミリ秒)

0

delay_rts_after_send

送信後遅延時間(ミリ秒)

0


[警告]

flagsは初期値を変更しないでください。変更した場合はデータ送信を行うことができなくなります。

[注記]

RS485 をコンソールとして利用することはできません。

アプリケーションプログラムの作成方法については、Linux カーネルのソースコードに含まれているドキュメント(Documentation/serial/serial-rs485.txt)を参照してください。

Device Treeから変更が可能な RS485 設定とその初期値を表6.14「RS485 設定と初期値(Device Tree)」に示します。flags は各ビットごとの論理和を示します。

表6.14 RS485 設定と初期値(Device Tree)

プロパティ説明初期値

rs485-enabled-at-boot-time

未指定: RS485 無効

指定: RS485 有効

指定

rs485-rts-on-send

未指定: データ送信時の RTS(Driver Enable)が Low

指定: データ送信時の RTS(Driver Enable)が High

指定

rs485-rts-after-send

未指定: データ非送信時の RTS(Driver Enable)が Low

指定: データ非送信時の RTS(Driver Enable)が High

未指定

rs485-rx-during-tx

未指定: 半二重通信

指定: 全二重通信

未指定

rs485-delay-rts-before-send

送信前遅延時間(ミリ秒)

0

rs485-delay-rts-after-send

送信後遅延時間(ミリ秒)

0


[警告]

rs485-delay-rts-*-send以外のプロパティの指定を変更しないでください。変更した場合はデータ送信を行うことができなくなります。

[注記]

RS485 をコンソールとして利用することはできません。

6.9. オーディオ

Armadillo-610 では、オーディオ機能を ALSA デバイスとして利用できます。オーディオインターフェースとALSAデバイスの対応を次に示します。

表6.15 オーディオインターフェースとALSAデバイスの対応

オーディオインターフェースALSAデバイス

Armadillo-610 拡張ボード: CON13D

card 0: mqsaudio [mqs-audio]


サンプリング周波数などの対応機能については、「アナログオーディオ」を参照してください。

6.9.1. サウンドを再生する

例として aplay コマンドでサウンドを再生する方法を記載します。まず、次のコマンドを実行して aplay コマンドが含まれるalsa-utils をインストールします。

[armadillo ~]# apt-get update && apt-get install alsa-utils

図6.30 alsa-utilsのインストール


aplay コマンドでサウンドを再生します。例として sample.wav という名前のWAVファイルを再生します。

[armadillo ~]# aplay sample.wav

図6.31 サウンドの再生


[ティップ]

音声ファイルのサンプリング周波数などが非対応の場合でも、自動的にソフトウェアで変換されます。



[6] Dynamic Host Configuration Protocol

[7] Armadillo-600 シリーズのmicroSDスロットは活線挿抜非対応のため、Armadilloの電源をOFFしてからmicroSDカードを挿抜してください。