Armadillo には、 OS として Debian がインストールされています。基本的には PC Linux と同じように動作します。ここではネットワークの設定やストレージのように一般的な動作に加え、GPIO や LED などについて説明します。 | |
---|
工場出荷状態でフラッシュメモリに書き込まれているイメージファイルは、最新版でない可能性があります。最新版のイメージファイルはArmadilloサイトからダウンロード可能です。最新版のイメージファイルに書き換えてからのご使用を推奨します。 イメージファイルの書き換えについては、11章イメージファイルの書き換え方法を参照してください。 |
ここでは、ネットワークの設定方法やネットワークを利用するアプリケーションについて説明します。 Armadillo-640は、 Ethernet に対応しています。Linuxからは、eth0 に見えます。 表6.1 ネットワークとネットワークデバイス ネットワーク | ネットワークデバイス | 出荷時の設定 |
---|
Ethernet | eth0
| DHCP |
ここでは有線LANの使用方法について説明します。Armadillo-640では、通常のLinuxシステムと同様にネットワーク設定を行います。出荷状態では eth0 が DHCP [] でネットワークの設定を行います。 DHCP が無い環境の場合は、 「固定IPアドレスに設定する」 を参照し設定してください。 最近の GNU/Linux OSでは、古くから使われてきた ifconfig (net-tools) に代り iproute2 を使用します。 ifconfig は Deprecated されています。本書でも ifconfig ではなく、 iproute2 に含まれている 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
ネットワークデバイスの一覧を確認するには 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
他にも ip コマンドではルーティングテーブルの表示やトンネルの設定などもできます。詳しくは ip コマンドの man ページを参照してください。 6.2.3.2. インターフェースの有効化・無効化インターフェースを有効化するには、次のようにコマンドを実行します。 ifup コマンドは Debian 特有のコマンドで ifupdown パッケージに含まれています。 ifconfig とは関係なく抽象的にネットワークを操作するためのコマンドです。設定は /etc/network/interfaces で行います。 インターフェースの有効化.
[armadillo ~]# ifup eth0
インターフェースを無効化するには、次のようにコマンドを実行します。 インターフェースの無効化.
[armadillo ~]# ifdown eth0
| |
---|
ネットワーク接続に関する不明な点については、ネットワークの管理者へ相談してください。 |
| |
---|
/etc/network/interfaces の変更は、インターフェースを無効化した状態で行ってください。 DHCP が動作している場合など、設定が反映されない場合があります。
|
表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 |
固定IPアドレス設定.
[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
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
固定 IP時、または DHCP で DNS情報が取得できない場合は、DNSサーバーを指定する必要があります。DNSサーバーを指定する例を、以下に示します。 DNSサーバーの指定.
[armadillo ~]# vi /etc/resolv.conf
domain local-network
search local-network
nameserver 192.0.2.1
6.2.3.6. インターフェースの修正を反映する有効化されているインターフェースは、修正しないでください。必ず無効化してから設定を変更してください。 [armadillo ~]# ifdown eth0
[armadillo ~]# vi /etc/network/interfaces
:
[armadillo ~]# ifup eth0 有線LANで正常に通信が可能か確認します。設定を変更した場合、必ず変更したインターフェースを再度有効化してください。 同じネットワーク内にある通信機器とPING通信を行います。以下の例では、通信機器が「192.0.2.20」というIPアドレスを持っていると想定しています。 有線LANのPING確認.
[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
| |
---|
有線LAN以外のインターフェースが有効化されている場合、ルーティングの設定などにより、ネットワーク通信に有線LANが使用されない場合があります。設定を必ず確認してください。確実に有線LANの接続確認をする場合は、有線LAN以外のインターフェースを無効化してください。 |
Armadillo-640 でストレージとして使用可能なデバイスを次に示します。 表6.3 ストレージデバイス デバイス種類 | ディスクデバイス | 先頭パーティション | インターフェース |
---|
オンボード eMMC | /dev/mmcblk0
| /dev/mmcblk0p1
| オンボード | SD/SDHC/SDXCカード | /dev/mmcblk1
| /dev/mmcblk1p1
| SDスロット拡張ボード (CON1) | USBメモリ | /dev/sd* []
| /dev/sd*1
| USB ホストインターフェース (CON5) |
ここでは、SDHCカードを接続した場合を例にストレージの使用方法を説明します。以降の説明では、共通の操作が可能な場合に、SD/SDHC/SDXCカードをSDカードと表記します。 | |
---|
SDXC/microSDXCカードを使用する場合は、事前に「ストレージのパーティション変更とフォーマット」を参照してフォーマットを行う必要があります。これは、LinuxカーネルがexFATファイルシステムを扱うことができないためです。通常、購入したばかりのSDXC/microSDXCカードはexFATファイルシステムでフォーマットされています。 |
Linuxでは、アクセス可能なファイルやディレクトリは、一つの木構造にまとめられています。あるストレージデバイスのファイルシステムを、この木構造に追加することを、マウントするといいます。マウントを行うコマンドは、 mount です。 mount コマンドの典型的なフォーマットは、次の通りです。
mountコマンド書式.
mount [-t fstype] device dir
-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
:
:
ストレージを安全に取り外すには、アンマウントという作業が必要です。アンマウントを行うコマンドは、 umount です。オプションとして、アンマウントしたいデバイスがマウントされているディレクトリを指定します。 ストレージのアンマウント.
[armadillo ~]# umount /media
6.3.2. ストレージのパーティション変更とフォーマット通常、購入したばかりのSDHCカードやUSBメモリは、一つのパーティションを持ち、FAT32ファイルシステムでフォーマットされています。 パーティション構成を変更したい場合、 fdisk コマンドを使用します。 fdisk コマンドの使用例として、一つのパーティションで構成されている microSDカードのパーティションを、2つに分割する例をfdiskコマンドによるパーティション変更に示します。一度、既存のパーティションを削除してから、新たにプライマリパーティションを二つ作成しています。先頭のパーティションには100MByte、二つめのパーティションに残りの容量を割り当てています。先頭のパーティションは /dev/mmcblk1p1 、二つめは /dev/mmcblk1p2 となります。 fdisk コマンドの詳細な使い方は、manページ等を参照してください。 fdiskコマンドによるパーティション変更.
[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.
FAT32ファイルシステムでストレージデバイスをフォーマットするには、 mkfs.vfat コマンドを使用します。また、EXT2やEXT3、 EXT4ファイルシステムでフォーマットするには、mkfs.ext2 や mkfs.ext3 、 mkfs.ext4 コマンドを使用します。microSDカードのパーティション1をEXT4ファイルシステムでフォーマットするコマンド例を、次に示します EXT3ファイルシステムの構築.
[armadillo ~]# mkfs.ext4 /dev/mmcblk1p1
Armadillo-640 の LED は GPIO で接続されているため、ソフトウェアで制御することができます。 利用しているデバイスドライバはLEDクラスとして実装されているため、LEDクラスディレクトリ以下のファイルによってLEDの制御を行うことができます。LEDクラスディレクトリと各LEDの対応を次に示します。 表6.4 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] の部分を適宜読みかえてください。 LEDクラスディレクトリ以下の brightness ファイルへ値を書き込むことによって、LEDの点灯/消灯を行うことができます。 brightness に書き込む有効な値は 0〜255です。 brightness に 0 以外の値を書き込むとLEDが点灯します。
LEDを点灯させる.
[armadillo ~]# echo 1 > /sys/class/leds/[LED]/brightness
| |
---|
Armadillo-640 のLEDには輝度制御の機能がないため、0(消灯)、1〜255(点灯)の2つの状態のみ指定することができます。 |
brightness に0を書き込むとLEDが消灯します。
LEDを消灯させる.
[armadillo ~]# echo 0 > /sys/class/leds/[LED]/brightness
brightness を読み出すとLEDの状態が取得できます。
LEDの状態を表示する.
[armadillo ~]# cat /sys/class/leds/[LED]/brightness
Linux では、LED をある特定のタイミングで光らせることができます。これを「トリガー」と呼びます。LEDクラスディレクトリ以下の trigger ファイルへ値を書き込むことによってLEDの点灯/消灯にトリガを設定することができます。 trigger でサポートされている値は以下の通りです。 表6.5 LEDトリガーの種類 設定 | 説明 |
---|
none
| トリガを設定しません | mmc0
| eMMCのアクセスランプにします | mmc1
| microSDスロットのアクセスランプにします | timer
| 任意のタイミングで点灯/消灯を行います。この設定にすることにより、LEDクラスディレクトリ以下にdelay_on, delay_offファイルが出現し、それぞれ点灯時間, 消灯時間をミリ秒単位で指定します | heartbeat
| 心拍のように点灯/消灯を行います | default-on
| 主にLinuxカーネルから使用します。LEDが点灯します |
trigger ファイルを読み出すとサポートしているトリガーと、現在有効のトリガーが表示されます。 [] が付いているものが現在のトリガです。
対応している LEDトリガーを表示.
[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
以下のコマンドを実行すると、LEDが2秒点灯、1秒消灯を繰り返します。 LEDのトリガにtimerを指定する.
[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
Armadillo-640 のユーザースイッチのデバイスドライバは、インプットデバイスとして実装されています。インプットデバイスのデバイスファイルからボタンプッシュ/リリースイベントを取得することができます。 ユーザースイッチのインプットデバイスファイルと、各スイッチに対応したイベントコードを次に示します。 表6.6 インプットデバイスファイルとイベントコード ユーザースイッチ | インプットデバイスファイル | イベントコード |
---|
SW1 | /dev/input/event0
| 28 (KEY_ENTER) |
| |
---|
インプットデバイスは検出された順番にインデックスが割り振られます。USBデバイスなどを接続してインプットデバイスを追加している場合は、デバイスファイルのインデックスが異なる可能性があります。 |
ユーザースイッチのボタンプッシュ/リリースイベントを確認するために、ここでは 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
Event: time 1523249446.289965, -------------- SYN_REPORT ------------
Event: time 1523249446.349969, type 1 (EV_KEY), code 28 (KEY_ENTER), value 1
Event: time 1523249446.349969, -------------- SYN_REPORT ------------
|
SW1のボタン プッシュ イベントを検出したときの表示
| |
SW1のボタン リリース イベントを検出したときの表示
|
Armadillo-640は、i.MX6ULLのRTC機能を利用しています。 電源が切断されても時刻を保持させたい場合は、電源入力インターフェース(CON13)に外付けバッテリーを接続することができます。 Linuxの時刻には、Linuxカーネルが管理するシステムクロックと、RTCが管理するハードウェアクロックの2種類があります。RTCに時刻を設定するためには、まずシステムクロックを設定します。その後に、ハードウェアクロックをシステムクロックと一致させる手順となります。 | |
---|
2018/04/12 時点で、Armadillo-640 のソフトウェアは hwclock コマンドに対応していません。
順次ソフトウェアアップデートにて対応予定です。 |
システムクロックは、dateコマンドを用いて設定します。dateコマンドの引数には、設定する時刻を [MMDDhhmmCCYY.ss] というフォーマットで指定します。時刻フォーマットの各フィールドの意味を次に示します。 表6.7 時刻フォーマットのフィールド フィールド | 意味 |
---|
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 ~]# date 030212342018.56
Fri Mar 2 12:34:56 JST 2018
[armadillo ~]# date
Fri Mar 2 12:34:57 JST 2018
Armadillo-640 の GPIO は、generic GPIO として実装されています。GPIO クラスディレクトリ以下のファイルによって GPIO の制御を行うことができます。 表6.8「CON9 ピンとGPIO番号の対応」の各ピンはGPIOとして利用することができます。 表6.8 CON9 ピンとGPIO番号の対応 ピン番号 | ピン名 | GPIO番号 |
---|
2 | GPIO1_IO23 | 23 | 4 | GPIO1_IO31 | 31 | 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 |
| |
---|
GPIO番号は次の式より導くことができます。 GPIOx_IOy -> (x - 1) * 32 + y 例えば、GPIO4_IO8(CON9 27ピン)の場合は、以下のようになります。 (4 - 1) * 32 + 8 = 104 |
| |
---|
対応するピンが GPIO 以外のデバイスドライバに割り当てられている場合は同時に GPIO として利用することはできません。 |
6.7.1. GPIO クラスディレクトリを作成するGPIOを利用するには、まずGPIOディレクトリを作成する必要があります。 GPIO クラスディレクトリは、 /sys/class/gpio/export に GPIO 番号を書き込むことによって、作成することができます。 GPIO クラスディレクトリを作成する.
[armadillo ~]# echo 22 > /sys/class/gpio/export
[armadillo ~]# ls /sys/class/gpio/gpio22/
active_low device direction edge subsystem uevent value
以降の説明では、任意の 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 |
GPIO ディレクトリ以下の direction ファイルへ値を書き込むことによって、入出力方向を変更することができます。 direction に書き込む有効な値を次に示します。 表6.9 direction の設定 設定 | 説明 |
---|
high | 入出力方向を OUTPUT に設定します。出力レベルの取得/設定を行うことができます。出力レベルは HIGH レベルになります。 | out | 入出力方向を OUTPUT に設定します。出力レベルの取得/設定を行うことができます。出力レベルは LOW レベルになります。 | low | out を設定した場合と同じです。 | in | 入出力方向を INPUT に設定します。入力レベルの取得を行うことができますが設定はできません。 |
GPIO の入出力方向を設定する(INPUT に設定).
[armadillo ~]# echo in > /sys/class/gpio/[GPIO]/direction
GPIO の入出力方向を設定する(OUTPUT に設定).
[armadillo ~]# echo out > /sys/class/gpio/[GPIO]/direction
GPIO ディレクトリ以下の value ファイルから値を読み出すことによって、入力レベルを取得することができます。"0"は LOW レベル、"1"は HIGH レベルを表わします。入力レベルの取得は入出力方向がINPUT, OUTPUT のどちらでも行うことができます。 GPIO の入力レベルを取得する.
[armadillo ~]# cat /sys/class/gpio/[GPIO]/value
0
GPIO ディレクトリ以下の value ファイルへ値を書き込むことによって、出力レベルを設定することができます。"0"は LOW レベル、"0"以外は HIGH レベルを表わします。出力レベルの設定は入出力方向がOUTPUT でなければ行うことはできません。 GPIO の出力レベルを設定する.
[armadillo ~]# echo 1 > /sys/class/gpio/[GPIO]/value
| |
|