| | 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アドレスの一覧を確認するには、次のようにコマンドを実行します。 ネットワークデバイスの一覧を確認するには link を使います。 他にも ip コマンドではルーティングテーブルの表示やトンネルの設定などもできます。詳しくは ip コマンドの man ページを参照してください。 6.2.3.2. インターフェースの有効化・無効化インターフェースを有効化するには、次のようにコマンドを実行します。 ifup コマンドは Debian 特有のコマンドで ifupdown パッケージに含まれています。 ifconfig とは関係なく抽象的にネットワークを操作するためのコマンドです。設定は /etc/network/interfaces で行います。 インターフェースを無効化するには、次のようにコマンドを実行します。 | |
---|
ネットワーク接続に関する不明な点については、ネットワークの管理者へ相談してください。 |
| |
---|
/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時、または DHCP で DNS情報が取得できない場合は、DNSサーバーを指定する必要があります。DNSサーバーを指定する例を、以下に示します。 6.2.3.6. インターフェースの修正を反映する有効化されているインターフェースは、修正しないでください。必ず無効化してから設定を変更してください。 [armadillo ~]# ifdown eth0
[armadillo ~]# vi /etc/network/interfaces
:
[armadillo ~]# ifup eth0 有線LANで正常に通信が可能か確認します。設定を変更した場合、必ず変更したインターフェースを再度有効化してください。 同じネットワーク内にある通信機器とPING通信を行います。以下の例では、通信機器が「192.0.2.20」というIPアドレスを持っていると想定しています。 | |
---|
有線LAN以外のインターフェースが有効化されている場合、ルーティングの設定などにより、ネットワーク通信に有線LANが使用されない場合があります。設定を必ず確認してください。確実に有線LANの接続確認をする場合は、有線LAN以外のインターフェースを無効化してください。 |
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.9「iptables設定確認」の設定では受信パケットが全て破棄されます。これが最も安全で最小の設定です。 この設定をベースに、SSHやHTTPSなどの通信プロトコルから利用するものだけを許可していくことをおすすめします。 |
6.2.4.4. iptables の設定を保存し自動的に適用するここまでの手順で行った iptables の設定は、Armadillo を再起動すると失われてしまいます。そこで、Armadillo-640 では iptables-persistent パッケージを利用して、あらかじめ保存しておいた設定を自動的に適用します。 iptables の設定を保存するには、次のコマンドを実行します。 次回起動時から、Armadillo がネットワークに接続される前のタイミングで、自動的にiptables の設定が適用されます。 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* []
| /dev/sd*1
| USB ホストインターフェース (CON5) |
| 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
| ユーザー領域 |
|
ここでは、SDHCカードを接続した場合を例にストレージの使用方法を説明します。以降の説明では、共通の操作が可能な場合に、SD/SDHC/SDXCカードをSDカードと表記します。 | |
---|
SDXC/microSDXCカードを使用する場合は、事前に「ストレージのパーティション変更とフォーマット」を参照してフォーマットを行う必要があります。これは、LinuxカーネルがexFATファイルシステムを扱うことができないためです。通常、購入したばかりのSDXC/microSDXCカードはexFATファイルシステムでフォーマットされています。 |
Linuxでは、アクセス可能なファイルやディレクトリは、一つの木構造にまとめられています。あるストレージデバイスのファイルシステムを、この木構造に追加することを、マウントするといいます。マウントを行うコマンドは、 mount です。 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 ディレクトリ以下に見えるようになります。 ストレージを安全に取り外すには、アンマウントという作業が必要です。アンマウントを行うコマンドは、 umount です。オプションとして、アンマウントしたいデバイスがマウントされているディレクトリを指定します。 6.3.2. ストレージのパーティション変更とフォーマット通常、購入したばかりのSDHCカードやUSBメモリは、一つのパーティションを持ち、FAT32ファイルシステムでフォーマットされています。 パーティション構成を変更したい場合、 fdisk コマンドを使用します。 fdisk コマンドの使用例として、一つのパーティションで構成されている microSDカードのパーティションを、2つに分割する例を図6.15「fdiskコマンドによるパーティション変更」に示します。一度、既存のパーティションを削除してから、新たにプライマリパーティションを二つ作成しています。先頭のパーティションには100MByte、二つめのパーティションに残りの容量を割り当てています。先頭のパーティションは /dev/mmcblk1p1 、二つめは /dev/mmcblk1p2 となります。 fdisk コマンドの詳細な使い方は、manページ等を参照してください。 FAT32ファイルシステムでストレージデバイスをフォーマットするには、 mkfs.vfat コマンドを使用します。また、EXT2やEXT3、 EXT4ファイルシステムでフォーマットするには、mkfs.ext2 や mkfs.ext3 、 mkfs.ext4 コマンドを使用します。microSDカードのパーティション1をEXT4ファイルシステムでフォーマットするコマンド例を、次に示します 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] の部分を適宜読みかえてください。 LEDクラスディレクトリ以下の brightness ファイルへ値を書き込むことによって、LEDの点灯/消灯を行うことができます。 brightness に書き込む有効な値は 0〜255です。 brightness に 0 以外の値を書き込むとLEDが点灯します。
| |
---|
Armadillo-640 のLEDには輝度制御の機能がないため、0(消灯)、1〜255(点灯)の2つの状態のみ指定することができます。 |
brightness に0を書き込むとLEDが消灯します。
brightness を読み出すとLEDの状態が取得できます。
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 ファイルを読み出すとサポートしているトリガーと、現在有効のトリガーが表示されます。 [] が付いているものが現在のトリガです。
以下のコマンドを実行すると、LEDが2秒点灯、1秒消灯を繰り返します。 Armadillo-640 のユーザースイッチのデバイスドライバは、インプットデバイスとして実装されています。インプットデバイスのデバイスファイルからボタンプッシュ/リリースイベントを取得することができます。 ユーザースイッチのインプットデバイスファイルと、各スイッチに対応したイベントコードを次に示します。 表6.7 インプットデバイスファイルとイベントコード ユーザースイッチ | インプットデバイスファイル | イベントコード |
---|
SW1 | /dev/input/event0
| 28 (KEY_ENTER) |
| |
---|
インプットデバイスは検出された順番にインデックスが割り振られます。USBデバイスなどを接続してインプットデバイスを追加している場合は、デバイスファイルのインデックスが異なる可能性があります。 |
ユーザースイッチのボタンプッシュ/リリースイベントを確認するために、ここでは evtest コマンドを利用します。 evtest を停止するには、Ctrl-c を入力してください。 |
SW1のボタン プッシュ イベントを検出したときの表示
| |
SW1のボタン リリース イベントを検出したときの表示
|
Armadillo-640は、i.MX6ULLのRTC機能を利用しています。 電源が切断されても時刻を保持させたい場合は、電源入力インターフェース(CON13)に外付けバッテリーを接続することができます。 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-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 コマンドを用いて設定します。 |
現在のハードウェアクロックを表示します。
| |
ハードウェアクロックを協定世界時(UTC)で設定します。
| |
ハードウェアクロックが UTC で正しく設定されていることを確認します。
|
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 |
| |
---|
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 番号を書き込むことによって、作成することができます。 以降の説明では、任意の 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.10 direction の設定 設定 | 説明 |
---|
high | 入出力方向を OUTPUT に設定します。出力レベルの取得/設定を行うことができます。出力レベルは HIGH レベルになります。 | out | 入出力方向を OUTPUT に設定します。出力レベルの取得/設定を行うことができます。出力レベルは LOW レベルになります。 | low | out を設定した場合と同じです。 | in | 入出力方向を INPUT に設定します。入力レベルの取得を行うことができますが設定はできません。 |
GPIO ディレクトリ以下の value ファイルから値を読み出すことによって、入力レベルを取得することができます。"0"は LOW レベル、"1"は HIGH レベルを表わします。入力レベルの取得は入出力方向がINPUT, OUTPUT のどちらでも行うことができます。 GPIO ディレクトリ以下の value ファイルへ値を書き込むことによって、出力レベルを設定することができます。"0"は LOW レベル、"0"以外は HIGH レベルを表わします。出力レベルの設定は入出力方向がOUTPUT でなければ行うことはできません。 | |
| | | |
| |