動作確認方法

6.1. 動作確認を行う前に

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

[注記]

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

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

6.2. ネットワーク

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

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

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

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

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

Ethernet

eth0

DHCP


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

ここでは有線LANの使用方法について説明します。Armadillo-640では、通常のLinuxシステムと同様にネットワーク設定を行います。出荷状態では eth0 が DHCP [7] でネットワークの設定を行います。 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-640 では、ファイアーウォールの実現に iptables を使用しています。 工場出荷状態の Armadillo-640 では、開発時の利便性のために、すべての通信(送信・受信・転送)を許可する設定になっています。

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-640 では 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-640 でストレージとして使用可能なデバイスを次に示します。

表6.3 ストレージデバイス

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

オンボード eMMC

/dev/mmcblk0

/dev/mmcblk0p1

オンボード

オンボード eMMC (GPP)

/dev/mmcblk0gp2

なし

オンボード

オンボード eMMC (GPP)

/dev/mmcblk0gp3

なし

オンボード

SD/SDHC/SDXCカード

/dev/mmcblk1

/dev/mmcblk1p1

microSDスロット(CON1)

USBメモリ

/dev/sd* [a]

/dev/sd*1

USB ホストインターフェース (CON5)

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


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

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

Armadillo-640 では、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スロット (CON1) にSDHCカードを挿入し、以下に示すコマンドを実行すると、 /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-640 の LED は GPIO で接続されているため、ソフトウェアで制御することができます。

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

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

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

/sys/class/leds/red/

ユーザーLED赤

default-on

/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-640 の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

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

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

表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-640は、i.MX6ULLのRTC機能を利用しています。

電源が切断されても時刻を保持させたい場合は、電源入力インターフェース(CON13)に外付けバッテリーを接続することができます。

[ティップ]

「Armadillo-600シリーズ WLANオプションモジュール」「Armadillo-600シリーズ RTCオプションモジュール」をArmadillo-640に接続することで温度補償高精度リアルタイムクロック(RTC)を使用することができます。

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

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

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

Armadillo-640 のタイムゾーンはデフォルトで 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 で正しく設定されていることを確認します。

[ティップ]

「Armadillo-600シリーズ WLANオプションモジュール」または「Armadillo-600シリーズ RTCオプションモジュール」の接続時に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.7. GPIO

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

表6.9「CON9 ピンとGPIO番号の対応」の各ピンはGPIOとして利用することができます。

表6.9 CON9 ピンとGPIO番号の対応

ピン番号 ピン名 GPIO番号

1

GPIO1_IO22

22

2

GPIO1_IO23

23

3

GPIO1_IO17

17

4

GPIO1_IO31

31

5

GPIO1_IO16

16

6

GPIO1_IO30

30

13

GPIO3_IO23

87

14

GPIO3_IO24

88

15

GPIO3_IO25

89

16

GPIO3_IO26

90

17

GPIO3_IO27

91

18

GPIO3_IO28

92

25

GPIO4_IO06

102

26

GPIO4_IO07

103

27

GPIO4_IO08

104

28

GPIO4_IO09

105


[警告]

表6.9「CON9 ピンとGPIO番号の対応」のCON9 1, 3~6ピンは初期出荷状態では GPIO として利用することができません。 これらのピンを GPIO として利用する場合は、 at-dtweb を用います。

at-dtweb の利用方法については「Device Treeをカスタマイズする」を参照してください。

[ティップ]

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

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

例えば、GPIO4_IO8(CON9 27ピン)の場合は、以下のようになります。

  (4 - 1) * 32 + 8 = 104

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

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

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

[armadillo ~]# echo 22 > /sys/class/gpio/export
[armadillo ~]# ls /sys/class/gpio/gpio22/
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 22 > /sys/class/gpio/unexport
[armadillo ~]# ls /sys/class/gpio/gpio22/
ls: cannot access '/sys/class/gpio/gpio22/': No such file or directory

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

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

表6.10 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 の出力レベルを設定する




[7] Dynamic Host Configuration Protocol