第7章 Linuxカーネル仕様

本章では、工場出荷状態のArmadillo-IoT のLinuxカーネル仕様について説明します。

7.1. デフォルトコンフィギュレーション

工場出荷状態のフラッシュメモリに書き込まれているLinuxカーネルイメージには、デフォルトコンフィギュレーションが適用されています。 Armadillo-IoT ゲートウェイ用のデフォルトコンフィギュレーションが記載されているファイルは、Linux カーネルソースファイル(linux-4.9-x1-at[version].tar.gz)に含まれるarch/arm/configs/x1_defconfigです。

x1_defconfigで有効になっている主要な設定を表7.1「Linuxカーネル主要設定」に示します。

表7.1 Linuxカーネル主要設定

コンフィグ説明
SMPSymmetric Multi-Processing
SMP_ON_UPAllow booting SMP kernel on uniprocessor systems
ARM_CPU_TOPOLOGYSupport cpu topology definition
HAVE_ARM_ARCH_TIMERArchitected timer support
VMSPLIT_2GMemory split (2G/2G user/kernel split)
NO_HZTickless System (Dynamic Ticks)
PREEMPTPreemptible Kernel
ARM_PATCH_IDIVRuntime patch udiv/sdiv instructions into __aeabi_{u}idiv()
AEABIUse the ARM EABI to compile the kernel
HIGHMEMHigh Memory Support
CPU_SW_DOMAIN_PANEnable use of CPU domains to implement privileged no-access
BOUNCEEnable bounce buffers
CMAContiguous Memory Allocator

7.2. デフォルト起動オプション

工場出荷状態のArmadillo-IoT のLinuxカーネルの起動オプションについて説明します。デフォルト状態では、次のように設定されています。

表7.2 Linuxカーネルのデフォルト起動オプション

起動オプション説明
console=ttymxc4,115200起動ログなどが出力されるイニシャルコンソールにttymxc4(CON9)を、ボーレートに 115200bps を指定します。
root=/dev/mmcblk2p2ルートファイルシステムにeMMCを指定します。
rootwait"root="で指定したデバイスが利用可能になるまでルートファイルシステムのマウントを遅らせます。
rwルートファイルシステムを読み書き可能としてマウントします。

7.3. Linuxドライバ一覧

Armadillo-IoT で利用することができるデバイスドライバについて説明します。 各ドライバで利用しているソースコードの内主要なファイルのパスや、コンフィギュレーションに必要な情報、及びデバイスファイルなどについて記載します。

7.3.1. Armadillo-IoT ゲートウェイ G3

Armadillo-IoT ゲートウェイ G3のハードウェアの構成情報やピンマルチプレクスの情報、i.MX 7Dualの初期化手順などが定義されています。

関連するソースコード

arch/arm/mach-imx/
arch/arm/mach-imx/armadillo_iotg_addon/
arch/arm/boot/dts/armadillo_iotg_g3.dts
arch/arm/boot/dts/armadillo_iotg_g3_m1.dts
arch/arm/boot/dts/imx7s.dtsi
arch/arm/boot/dts/imx7d.dtsi
arch/arm/boot/dts/armadillo_iotg_addon.dtsi

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                                  <ARCH_MXC>
          --- Freescale i.MX family
          [*]   i.MX7 Dual support                                              <SOC_IMX7D>
          [*]     Add-On Module Auto Detect                       <AIOTG_ADDON_AUTO_DETECT>

7.3.2. UART

Armadillo-IoT のシリアルは、i.MX 7Dual の UART(Universal Asynchronous Receiver/Transmitter) を利用しています。

Armadillo-IoT の標準状態では、UART5(CON9)をコンソールとして利用しています。

フォーマット

データビット長: 7 or 8ビット
ストップビット長: 1 or 2ビット
パリティ: 偶数 or 奇数 or なし
フロー制御: CTS/RTS or XON/XOFF or なし
最大ボーレート: 4Mbps

関連するソースコード

drivers/tty/n_tty.c
drivers/tty/tty_buffer.c
drivers/tty/tty_io.c
drivers/tty/tty_ioctl.c
drivers/tty/tty_ldisc.c
drivers/tty/tty_ldsem.c
drivers/tty/tty_mutex.c
drivers/tty/tty_port.c
drivers/tty/serial/serial_core.c
drivers/tty/serial/earlycon.c
drivers/tty/serial/serial_mctrl_gpio.c
drivers/tty/serial/imx.c

デバイスファイル
シリアルインターフェースデバイスファイル
UART1/dev/ttymxc0
UART2/dev/ttymxc1
UART5/dev/ttymxc4
カーネルコンフィギュレーション
  Device Drivers  --->
      Character devices  --->
          [*] Enable TTY                                                              <TTY>
              Serial drivers  --->
                  <*> IMX serial port support                                  <SERIAL_IMX>
                  [*]   Console on IMX serial port                      <SERIAL_IMX_CONSOLE>

7.3.3. Ethernet

Armadillo-IoT のEthernet(LAN)は、i.MX 7Dual の ENET(Ethernet MAC)を利用しています。

機能

通信速度: 1000Mbps(1000BASE-T), 100Mbps(100BASE-TX), 10Mbps(10BASE-T)
通信モード: Full-Duplex(全二重), Half-Duplex(半二重)[19]
Auto Negotiationサポート
キャリア検知サポート
リンク検出サポート

関連するソースコード

drivers/net/Space.c
drivers/net/loopback.c
drivers/net/mii.c
drivers/net/ethernet/freescale/fec_fixup.c
drivers/net/ethernet/freescale/fec_main.c
drivers/net/ethernet/freescale/fec_ptp.c
drivers/net/phy/mdio_bus.c
drivers/net/phy/mdio_device.c
drivers/net/phy/phy.c
drivers/net/phy/phy_device.c
drivers/net/phy/vitesse.c

ネットワークデバイス

eth0

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] Network device support  --->                                         <NETDEVICES>
          [*]   Ethernet driver support  --->                                    <ETHERNET>
              [*]   Freescale devices                                <NET_VENDOR_FREESCALE>
              <*>     FEC ethernet controller (of ColdFire and some i.MX CPUs)        <FEC>
          -*-   PHY Device support and infrastructure  --->                        <PHYLIB>
              <*>   Vitesse PHYs                                              <VITESSE_PHY>

7.3.4. LTE

Armadillo-IoT G3 M1 には、Quectel製 EC25-J が搭載されています。EC25-J は、「USBハブ」に示す USB3503 に接続されています。

機能

リンク検出サポート

デバイスファイル

/dev/ttyUSB0[20]
/dev/ttyUSB1[20]
/dev/ttyUSB2[20]
/dev/ttyUSB3[20]

関連するソースコード

drivers/usb/serial/option.c

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] USB support  --->                                                   <USB_SUPPORT>
          <*>   USB Serial Converter support  --->                             <USB_SERIAL>
              <*>   USB driver for GSM and CDMA modems                  <USB_SERIAL_OPTION>

7.3.5. WLAN

Armadillo-IoT には、Qualcomm Atheros製 AEH-AR9462 または SparkLAN 製 WPEB-265AXI(BT) [B33] が搭載されています。AEH-AR9462 および WPEB-265AXI(BT) [B33] のWLAN機能は、「PCI Express」に示す PCI Express に接続されています。

[警告]

WPEB-265AXI(BT) [B33]では、BTのスキャン動作中に2.4GHz帯のWLAN通信が途切れる場合があります。これは、BTと2.4GHz帯のWLANでアンテナリソースが共有されており、BTのスキャン中はWLAN通信を行うことができない為です。スキャン以外のBT通信時にはこのような現象は発生しません。

BTのスキャン動作中にWLAN通信を行う場合は、次のような対策をとることをお勧めします。

  • WLANを5GHz帯で利用する。

  • 2.4GHz帯のWLANを利用する場合は、APとSTAの接続が切断された際に再接続する。

AEH-AR9462 機能

IEEE 802.11 a/b/g/n 準拠
最大通信速度: 300Mbps(論理値)
動作モード: インフラストラクチャモード(STA/AP), アドホックモード
チャンネル(2.4GHz): 1-13
チャンネル(5GHz): 36-48, 52-64, 100-140

WPEB-265AXI(BT) [B33] 機能

IEEE 802.11 a/b/g/n/ac/ax 準拠
最大通信速度: 1200Mbps(論理値)
動作モード: インフラストラクチャモード(STA/AP), アドホックモード
チャンネル(2.4GHz)(STA/AP): 1-13
チャンネル(5GHz)(STA): 36-64, 100-140 (W52/W53/W56)
チャンネル(5GHz)(AP): 36-48 (W52)

ネットワークデバイス

wlan0

関連するソースコード

drivers/net/wireless/ath/ath9k/
drivers/net/wireless/bcmdhd/

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] Network device support  --->                                         <NETDEVICES>
          [*]   Wireless LAN  --->                                                   <WLAN>
              [*]   Atheros/Qualcomm devices                              <WLAN_VENDOR_ATH>
              [*]     Atheros dynamic user regulatory hints
                                                           <ATH_REG_DYNAMIC_USER_REG_HINTS>
              <*>     Atheros 802.11n wireless cards support                        <ATH9K>
              [*]       Atheros ath9k PCI/PCIe bus support                      <ATH9K_PCI>
              [*]       Atheros DFS support for certified platforms   <ATH9K_DFS_CERTIFIED>
              [*]       Atheros ath9k rfkill support                         <ATH9K_RFKILL>
              [*]       Atheros ath9k support for PC OEM cards                <ATH9K_PCOEM>
              <*>   Broadcom FullMAC wireless cards support                        <BCMDHD>
              (bcmdhd/fw_bcm43752a2_pcie_ag_apsta.bin) Firmware path       <BCMDHD_FW_PATH>
              (bcmdhd/nvram_ap6275p_mp.txt) NVRAM path                  <BCMDHD_NVRAM_PATH>
                      Enable Chip Interface (PCIe bus interface support)  --->
                                                                              <BCMDHD_PCIE>

7.3.6. BT

Armadillo-IoT には、Qualcomm Atheros製 AEH-AR9462 または SparkLAN 製 WPEB-265AXI(BT) [B33] が搭載されています。AEH-AR9462 および WPEB-265AXI(BT) [B33] のBT機能は、「USBハブ」に示す USB3503 に接続されています。

AEH-AR9462 および WPEB-265AXI(BT) [B33] は、Bluetooth(R) version 4.0に対応しており、BLE(Bluetooth Low Energy)、HS(High Speed)およびEDR(Enhanced Data Rate)が利用できます。

デバイス

hci0

関連するソースコード

drivers/bluetooth/ath3k.c
drivers/bluetooth/btusb.c

カーネルコンフィギュレーション
  [*] Networking support  --->                                                        <NET>
      <*>   Bluetooth subsystem support  --->                                          <BT>
          [*]   Bluetooth Classic (BR/EDR) features                              <BT_BREDR>
          <*>   RFCOMM protocol support                                         <BT_RFCOMM>
          [*]     RFCOMM TTY support                                        <BT_RFCOMM_TTY>
          <*>   BNEP protocol support                                             <BT_BNEP>
          [*]     Multicast filter support                              <BT_BNEP_MC_FILTER>
          [*]     Protocol filter support                            <BT_BNEP_PROTO_FILTER>
          <*>   HIDP protocol support                                             <BT_HIDP>
          [*]     Bluetooth High Speed (HS) features                                <BT_HS>
          [*]   Bluetooth Low Energy (LE) features                                  <BT_LE>
                Bluetooth device drivers  --->
                    <*> HCI USB driver                                        <BT_HCIBTUSB>
                    [*]   Atheros AR300x serial support                     <HCIUART_ATH3K>
      Device Drivers  --->
      [*] Network device support  --->                                         <NETDEVICES>
          [*]   Wireless LAN  --->                                                   <WLAN>
              [*]   Atheros/Qualcomm devices                              <WLAN_VENDOR_ATH>
              [*]     Atheros bluetooth coexistence support          <ATH9K_BTCOEX_SUPPORT>
      [*] USB support  --->                                                   <USB_SUPPORT>
              <*>   USB Serial Converter support  --->                         <USB_SERIAL>
                  <*>   USB CP210x family of UART Bridge Controllers    <USB_SERIAL_CP210X>
[ティップ]

AEH-AR9462のファームウェアは、ATDEにインストールされているfirmware-atherosパッケージに含まれています。ファームウェアはLinuxカーネルイメージに組み込まれます。

firmware-atherosの著作権およびライセンス情報については、ATDE上で/usr/share/doc/firmware-atheros/copyrightを参照してください。

[ティップ]

WPEB-265AXI(BT) [B33]のファームウェアは、ATDEにインストールされているfirmware-bcmdhdパッケージに含まれています。ファームウェアはLinuxカーネルイメージに組み込まれます。

7.3.7. SDホスト

Armadillo-IoT のSDホストは、i.MX 7Dual の uSDHC(Ultra Secured Digital Host Controller)を利用しています。

Armadillo-IoT では、SDインターフェース(CON4)がuSDHC1を利用しています。

機能

カードタイプ: SD/SDHC/SDXC/SDIO
バス幅: 1bit or 4bit
スピードモード: Default Speed(24MHz), High Speed(48MHz), UHS-I(196.36MHz)
カードディテクトサポート
ライトプロテクトサポート

デバイスファイル

メモリカードの場合は、カードを認識した順番で/dev/mmcblkN (Nは'0'または'1')となります。
I/Oカードの場合は、ファンクションに応じたデバイスファイルとなります。

関連するソースコード

drivers/mmc/card/block.c
drivers/mmc/card/queue.c
drivers/mmc/core/
drivers/mmc/host/sdhci-esdhc-imx.c
drivers/mmc/host/sdhci-pltfm.c
drivers/mmc/host/sdhci.c

カーネルコンフィギュレーション
  Device Drivers  --->
      <*> MMC/SD/SDIO card support  --->                                              <MMC>
                *** MMC/SD/SDIO Card Drivers ***
          <*>   MMC block device driver                                         <MMC_BLOCK>
          (8)     Number of minors per block device                      <MMC_BLOCK_MINORS>
          [*]     Use bounce buffer for simple hosts                     <MMC_BLOCK_BOUNCE>
                *** MMC/SD/SDIO Host Controller Drivers ***
          <*>   Secure Digital Host Controller Interface support                <MMC_SDHCI>
          <*>   SDHCI platform and OF driver helper                       <MMC_SDHCI_PLTFM>
          <*>       SDHCI support for the Freescale eSDHC/uSDHC i.MX controller
                                                                      <MMC_SDHCI_ESDHC_IMX>
[警告]

SDIOカードを利用する場合は、arch/arm/boot/dts/armadillo_iotg_g3_m1.dtsの"usdhc1"ノードに"use-sdio"プロパティを追加してください。

&usdhc1 {
	pinctrl-names = "default", "state_100mhz", "state_200mhz",
			"state_power_off";
	pinctrl-0 = <&pinctrl_usdhc1>;
	pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
	pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
	pinctrl-3 = <&pinctrl_usdhc1_power_off>;
	cd-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>;
	wp-gpios = <&gpio5 1 GPIO_ACTIVE_HIGH>;
	pinctrl-assert-gpios = <&gpio5 4 GPIO_ACTIVE_LOW>,	/* SD1_CMD */
			       <&gpio5 5 GPIO_ACTIVE_LOW>,	/* SD1_DATA0 */
			       <&gpio5 6 GPIO_ACTIVE_LOW>,	/* SD1_DATA1 */
			       <&gpio5 7 GPIO_ACTIVE_LOW>,	/* SD1_DATA2 */
			       <&gpio5 8 GPIO_ACTIVE_LOW>;	/* SD1_DATA3 */
	tuning-step = <2>;
	vmmc-supply = <&reg_sd1_vmmc>;
	enable-sdio-wakeup;
	bus-width = <4>;
	keep-power-in-suspend;
	support-clk-limit;
	fsl,no-ddr50-support;
	use-sdio;
	status = "okay";
};

"use-sdio"プロパティを追加しない場合、Advanced DMAエラーが発生する場合があります。

7.3.8. USBホスト

Armadillo-IoT のUSBホストは、i.MX 7Dual の USB-PHY(Universal Serial Bus 2.0 Integrated PHY) および USB(Universal Serial Bus Controller) を利用しています。

Armadillo-IoT では、USB ホストインターフェース(CON7)が OTG1 を利用しています。HSIC HOSTには「USBハブ」に示す USB3503 が接続されています。

機能

Universal Serial Bus Specification Revision 2.0 準拠
Enhanced Host Controller Interface (EHCI)準拠
転送レート: USB2.0 High-Speed (480Mbps), Full-Speed (12Mbps), Low-Speed (1.5Mbps)

デバイスファイル

メモリデバイスの場合は、デバイスを認識した順番で/dev/sdN (Nは'a'からの連番)となります。
I/Oデバイスの場合は、ファンクションに応じたデバイスファイルとなります。

関連するソースコード

drivers/usb/chipidea/ci_hdrc_imx.c
drivers/usb/chipidea/ci_hdrc_msm.c
drivers/usb/chipidea/ci_hdrc_zevio.c
drivers/usb/chipidea/core.c
drivers/usb/chipidea/debug.c
drivers/usb/chipidea/host.c
drivers/usb/chipidea/otg.c
drivers/usb/chipidea/usbmisc_imx.c
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-hub.c
drivers/usb/phy/phy-generic.c
drivers/usb/phy/phy.c

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] USB support  --->                                                   <USB_SUPPORT>
          <*>   Support for Host-side USB                                             <USB>
                  *** USB Host Controller Drivers ***
          <*>     EHCI HCD (USB 2.0) support                                 <USB_EHCI_HCD>
          <*>   ChipIdea Highspeed Dual Role Controller                      <USB_CHIPIDEA>
          [*]     ChipIdea device controller                             <USB_CHIPIDEA_UDC>
          [*]     ChipIdea host controller                              <USB_CHIPIDEA_HOST>
                  USB Physical Layer drivers  --->
              <*>     NOP USB Transceiver Driver                            <NOP_USB_XCEIV>

7.3.9. USBハブ

Armadillo-IoT には、Microchip製 USB3503 が搭載されています。USB3503 には、3G/LTEモジュール(EC25-J)とAEH-AR9462 または WPEB-265AXI(BT) [B33]が接続されています。

関連するソースコード

drivers/usb/misc/usb3503.c

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] USB support  --->                                                   <USB_SUPPORT>
          <*>   USB3503 HSIC to USB20 Driver                             <USB_HSIC_USB3503>

7.3.10. PCI Express

Armadillo-IoT のPCI Express、i.MX 7Dual の PCIe_PHY(PCI Express PHY) を利用しています。

Armadillo-IoT では、AEH-AR9462 または WPEB-265AXI(BT) [B33] が接続されています。

機能

PCI Express Base Specification 2.1 準拠
PIPE Specification 2.0 準拠
リンク幅: x1
転送レート: 5.0GT/s
割り込み通知方式: INTx, MSI-X

関連するソースコード

drivers/pci/host/pcie-designware.c
drivers/pci/host/pci-imx6.c
drivers/pci/*
drivers/pci/pcie/*

カーネルコンフィギュレーション
  Bus support  --->
      [*] PCI support                                                                 <PCI>
      -*- PCI Express Port Bus support                                        <PCIEPORTBUS>
      [ ] Message Signaled Interrupts (MSI and MSI-X)                             <PCI_MSI>
      [*] PCI IOV support                                                         <PCI_IOV>
      [*] PCI PRI support                                                         <PCI_PRI>
      [*] PCI PASID support                                                     <PCI_PASID>
          PCI host controller drivers  --->
              [*] Freescale i.MX6 PCIe controller                                <PCI_IMX6>
[警告]

PCI_MSIを有効化すると、AEH-AR9462 および WPEB-265AXI(BT) [B33] が利用できなくなります。

7.3.11. リアルタイムクロック

Armadillo-IoT のリアルタイムクロックは、Board Management ICのRTC機能を利用しています。 Board Management ICのRTC機能は、I2C4 (I2Cノード: 3-0011) に接続されています。

機能

アラーム割り込みサポート

デバイスファイル

/dev/rtc
/dev/rtc0

関連するソースコード

drivers/rtc/class.c
drivers/rtc/hctosys.c
drivers/rtc/interface.c
drivers/rtc/rtc-bmic.c
drivers/rtc/rtc-dev.c
drivers/rtc/rtc-lib.c
drivers/rtc/rtc-proc.c
drivers/rtc/rtc-sysfs.c
drivers/rtc/systohc.c

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] Real Time Clock  --->                                                 <RTC_CLASS>
          [*]   Set system time from RTC on startup and resume                <RTC_HCTOSYS>
          [*]   Set the RTC time based on NTP synchronization                 <RTC_SYSTOHC>
          (rtc0)  RTC used to set the system time                      <RTC_HCTOSYS_DEVICE>
                *** RTC interfaces ***
          [*]   /sys/class/rtc/rtcN (sysfs)                                <RTC_INTF_SYSFS>
          [*]   /proc/driver/rtc (procfs for rtcN)                          <RTC_INTF_PROC>
          [*]   /dev/rtcN (character devices)                                <RTC_INTF_DEV>
          [*]     RTC UIE emulation on dev interface                <RTC_INTF_DEV_UIE_EMUL>
                *** I2C RTC drivers ***
          <*>   Atmark Techno BMIC RTC                                       <RTC_DRV_BMIC>

アラーム割り込みは、sysfs RTCクラスディレクトリ以下のファイルから利用できます。

wakealarmファイルにUNIXエポックからの経過秒数、または先頭に+を付けて現在時刻からの経過秒数を書き込むと、アラーム割り込み発生時刻を指定できます。アラーム割り込み発生時刻を変更するにはwakealarmファイルに"+0"を書き込み、アラーム割り込みのキャンセル後に再設定する必要があります。アラーム割り込みの利用例を次に示します。

[armadillo ~]# cat /proc/interrupts | grep bmic_rtc_irq 1
173:          0          0  gpio-mxc  13  bmic_rtc_irq
[armadillo ~]# echo +10 > /sys/class/rtc/rtc0/wakealarm 2
[armadillo ~]# cat /sys/class/rtc/rtc0/wakealarm 3
1458781144
[armadillo ~]# cat /sys/class/rtc/rtc0/since_epoch 4
1458781145
[armadillo ~]# cat /proc/interrupts | grep bmic_rtc_irq 5
173:          1          0  gpio-mxc  13  bmic_rtc_irq

1

アラーム割り込みの発生回数を確認します。この例では0回です。

2

アラーム割り込みの発生時刻を10秒後に設定します。

3

アラーム割り込みの発生時刻(UNIXエポックからの経過秒数)を確認します。この例では1458781144秒です。

4

現在時刻(UNIXエポックからの経過秒数)を確認します。アラーム割り込みの発生時刻を超えるまで待ちます。

5

再度アラーム割り込みの発生回数を確認します。1増えているのでアラーム割り込みが発生したことを確認できます。

[注記]

デバイスファイル(/dev/rtc0)経由でもアラーム割り込みを利用することができます。サンプルプログラムなどのより詳細な情報については、Linuxカーネルのソースコードに含まれているドキュメント(Documentation/rtc.txt)を参照してください。

[ティップ]

dateコマンドを利用して、UNIXエポックからの経過秒数を日時に変換することができます。

[armadillo ~]# date --date=@`cat /sys/class/rtc/rtc0/since_epoch`
Thu Mar 24 10:02:56 JST 2016

7.3.12. 温度センサー

Armadillo-IoT の温度センサーは、i.MX 7Dualの TEMPMON(Temperature Monitor)を利用しています。

起動直後の設定では、i.MX 7Dualの測定温度が 105℃以上になった場合、Linuxカーネルが/sbin/poweroffコマンドを実行し、システムを停止します。 システム停止後、温度が低下しても自動的には復旧はせずシステムが停止した状態となります。

sysfsディレクトリ

/sys/class/thermal/thermal_zone1/

関連するソースコード

drivers/thermal/imx_thermal.c
drivers/thermal/of-thermal.c
drivers/thermal/step_wise.c
drivers/thermal/thermal_core.c
drivers/thermal/thermal_hwmon.c

カーネルコンフィギュレーション
  Device Drivers  --->
      <*> Generic Thermal sysfs driver  --->                                      <THERMAL>
          [*]   Expose thermal sensors as hwmon device                      <THERMAL_HWMON>
          [*]   APIs to parse thermal data out of device tree                  <THERMAL_OF>
          [*]   Enable writable trip points                        <THERMAL_WRITABLE_TRIPS>
                Default Thermal governor (step_wise)  --->  <THERMAL_DEFAULT_GOV_STEP_WISE>
          -*-   Step_wise thermal governor                          <THERMAL_GOV_STEP_WISE>
          <*>   Temperature sensor driver for Freescale i.MX SoCs             <IMX_THERMAL>

7.3.13. ADコンバーター

Armadillo-IoTに搭載されたBoard Management ICのADコンバーター機能およびArmadillo-IoT 絶縁デジタル入出力/アナログ入力アドオン モジュール DA00(以降、絶縁IOアドオンモジュールと記載します)を利用することができます。

Board Management ICのADコンバーター機能は、I2C4(I2Cノード: 3-0012)に接続されています。Armadillo-IoTの電源電圧およびBoard Management ICの外部バッテリーの電圧を測定することができます。

絶縁IOアドオンモジュールには、Microchip製 MCP3202 が搭載されています。MCP3202は、絶縁IOアドオンモジュールをアドオンインターフェース(CON1)に接続した場合はECSPI2に、アドオンインターフェース(CON2)に接続した場合はECSPI1に接続されます。

機能(Board Management IC)

分解能: 12bit
測定範囲: 0V 〜 3.3V(Board Management ICの電源電圧)

機能(MCP3202)

分解能: 12bit
測定範囲: 0V 〜 5.0V(MCP3202の電源電圧)

sysfsディレクトリ

デバイスを認識した順番で /sys/bus/iio/devices/iio:deviceN (Nは'0'からの連番)となります。

デバイスファイル

デバイスを認識した順番で /dev/iio:deviceN (Nは'0'からの連番)となります。

関連するソースコード

drivers/iio/industrialio-buffer.c
drivers/iio/industrialio-core.c
drivers/iio/industrialio-event.c
drivers/iio/industrialio-trigger.c
drivers/iio/inkern.c
drivers/iio/adc/bmic_adc.c
drivers/iio/adc/mcp320x.c

カーネルコンフィギュレーション
  Device Drivers  --->
      <*> Industrial I/O support  --->                                                <IIO>
          [*]   Enable buffer support within IIO                               <IIO_BUFFER>
          -*-     Industrial I/O buffering based on kfifo                   <IIO_KFIFO_BUF>
          -*-   Enable triggered sampling support                             <IIO_TRIGGER>
          (2)     Maximum number of consumers per trigger       <IIO_CONSUMERS_PER_TRIGGER>
                Analog to digital converters  --->
                    <*> Atmark Techno BMIC ADC                                   <BMIC_ADC>
                    <*> Microchip Technology MCP3x01/02/04/08                     <MCP320X>

7.3.14. LED

Armadillo-IoT に搭載されているソフトウェア制御可能なLEDには、GPIOが接続されています。Linuxでは、GPIO接続用LEDドライバ(leds-gpio)で制御することができます。

sysfs LEDクラスディレクトリ

/sys/class/leds/led1
/sys/class/leds/led2
/sys/class/leds/led3
/sys/class/leds/led4

関連するソースコード

drivers/leds/led-class.c
drivers/leds/led-core.c
drivers/leds/led-triggers.c
drivers/leds/leds-gpio.c
drivers/leds/trigger/ledtrig-backlight.c
drivers/leds/trigger/ledtrig-default-on.c
drivers/leds/trigger/ledtrig-gpio.c
drivers/leds/trigger/ledtrig-heartbeat.c
drivers/leds/trigger/ledtrig-oneshot.c
drivers/leds/trigger/ledtrig-timer.c

カーネルコンフィギュレーション
  Device Drivers  --->
      -*- LED Support  --->                                                      <NEW_LEDS>
          <*>   LED Class Support                                              <LEDS_CLASS>
                *** LED drivers ***
          <*>   LED Support for GPIO connected LEDs                             <LEDS_GPIO>
                *** LED Triggers ***
          -*-   LED Trigger support  --->                                   <LEDS_TRIGGERS>
              <*>   LED Timer Trigger                                  <LEDS_TRIGGER_TIMER>
              <*>   LED One-shot Trigger                             <LEDS_TRIGGER_ONESHOT>
              <*>   LED Heartbeat Trigger                          <LEDS_TRIGGER_HEARTBEAT>
              <*>   LED backlight Trigger                          <LEDS_TRIGGER_BACKLIGHT>
              <*>   LED GPIO Trigger                                    <LEDS_TRIGGER_GPIO>
              <*>   LED Default ON Trigger                        <LEDS_TRIGGER_DEFAULT_ON>

7.3.15. ユーザースイッチ

Armadillo-IoT に搭載されているユーザースイッチには、GPIOが接続されています。GPIOが接続されユーザー空間でイベント(Press/Release)を検出することができます。Linuxでは、GPIO接続用キーボードドライバ(gpio-keys)で制御することができます。

ユーザースイッチには、次に示すキーコードが割り当てられています。

表7.3 キーコード

ユーザースイッチキーコードイベントコード
SW1KEY_12
SW2KEY_23
SW3KEY_34

デバイスファイル

/dev/input/event1[21]

関連するソースコード

drivers/input/evdev.c
drivers/input/ff-core.c
drivers/input/input-compat.c
drivers/input/input-mt.c
drivers/input/input-polldev.c
drivers/input/input.c
drivers/input/keyboard/gpio_keys.c

カーネルコンフィギュレーション
  Device Drivers  --->
      Input device support  --->
          -*- Generic input layer (needed for keyboard, mouse, ...)                 <INPUT>
          -*-   Polled input device skeleton                                <INPUT_POLLDEV>
                *** Userland interfaces ***
          <*>   Event interface                                               <INPUT_EVDEV>
                *** Input Device Drivers ***
          [*]   Keyboards  --->                                            <INPUT_KEYBOARD>
              <*>   GPIO Buttons                                            <KEYBOARD_GPIO>

7.3.16. I2C

Armadillo-IoT のI2Cインターフェースは、i.MX 7Dual の I2C(I2C Controller) を利用します。また、GPIOを利用したI2Cバスドライバ(i2c-gpio)を利用することで、I2Cバスを追加することができます。

Armadillo-IoT で利用しているI2Cバスと、接続されるI2Cデバイスを次に示します。

表7.4 I2Cデバイス

I2CバスI2Cデバイス
アドレスデバイス名
0(I2C1)0x50M24C01-W EEPROM[a]
0x51M24C01-W EEPROM[b]
3(I2C4)0x08USB3503 USBハブ
0x09PF3000 パワーマネジメントIC
0x10〜0x17Board Management IC

[a] アドオンインターフェース(CON1)にアドオンモジュールを接続した場合。

[b] アドオンインターフェース(CON2)にアドオンモジュールを接続した場合。


Armadillo-IoT の標準状態では、CONFIG_I2C_CHARDEVが有効となっているためユーザードライバでI2Cデバイスを制御することができます。ユーザードライバを利用する場合は、LinuxカーネルでI2Cデバイスに対応するデバイスドライバを無効にする必要があります。

機能

最大転送レート: 400kbps

デバイスファイル

/dev/i2c-0 (I2C1)
/dev/i2c-3 (I2C4)

関連するソースコード

drivers/i2c/i2c-boardinfo.c
drivers/i2c/i2c-core.c
drivers/i2c/i2c-dev.c
drivers/i2c/algos/i2c-algo-bit.c
drivers/i2c/busses/i2c-gpio.c
drivers/i2c/busses/i2c-imx.c

カーネルコンフィギュレーション
  Device Drivers  --->
      <*> I2C support  --->                                                           <I2C>
          <*>   I2C device interface                                          <I2C_CHARDEV>
                I2C Algorithms  --->
                    -*- I2C bit-banging interfaces                                  <I2C_ALGOBIT>
                I2C Hardware Bus support  --->
              <*> GPIO-based bitbanging I2C                                      <I2C_GPIO>
              <*> IMX I2C interface                                               <I2C_MXC>

7.3.17. SPI

Armadillo-IoT のSPIインターフェースは、i.MX 7Dual の ECSPI(Enhanced Configurable SPI)を利用します。

標準状態では無効になっている CONFIG_SPI_SPIDEV を有効化すると、ユーザードライバでSPIデバイスを制御することができます。

関連するソースコード

drivers/spi/spi-bitbang.c
drivers/spi/spi-imx.c
drivers/spi/spi.c
drivers/spi/spidev.c

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] SPI support  --->                                                           <SPI>
                *** SPI Master Controller Drivers ***
          -*-   Utilities for Bitbanging SPI masters                          <SPI_BITBANG>
          <*>   Freescale i.MX SPI controllers                                    <SPI_IMX>
                *** SPI Protocol Masters ***
          < >   User mode SPI device driver support                            <SPI_SPIDEV>

7.3.18. ウォッチドッグタイマー

Armadillo-IoT のウォッチドッグタイマーは、i.MX 7Dual の WDOG(Watchdog Timer) を利用しています。

ウォッチドッグタイマーは、U-Bootによって有効化されます。標準状態でタイムアウト時間は10秒に設定されます。Linuxカーネルは、ウォッチドッグタイマードライバの初期化時にタイムアウト時間を10秒に再設定します。

何らかの要因でウォッチドッグタイマーのキックができなくなりタイムアウトすると、システムリセットが発生します。

関連するソースコード

drivers/watchdog/imx2_wdt.c
drivers/watchdog/watchdog_core.c
drivers/watchdog/watchdog_dev.c

カーネルコンフィギュレーション
  Device Drivers  --->
      -*-   WatchDog Timer Driver Core                                      <WATCHDOG_CORE>
      [*] Watchdog Timer Support  --->                                           <WATCHDOG>
          <*>   IMX2+ Watchdog                                                   <IMX2_WDT>
[警告]

i.MX 7Dual の WDOG は、一度有効化すると無効化することができません。そのため、haltコマンドなどを実行してLinux カーネルを停止した場合は、ウォッチドッグタイマーのキックができなくなるためシステムリセットが発生します。

WDOGドライバーの終了処理では、タイムアウト時間をWDOGの最大値である128秒に設定します。

7.3.19. パワーマネジメント

Armadillo-IoTのパワーマネジメント機能は、LinuxのSPM(System Power Management)およびDPM(Device Power Management)を利用しています。パワーマネジメント状態を省電力モードに遷移させることにより、Armadillo-IoTの消費電力を抑えることができます。

パワーマネジメント状態を省電力モードに遷移させると、アプリケーションの実行は一時停止し、Linuxカーネルはサスペンド状態となります。起床要因が発生すると、Linuxカーネルのリジューム処理が行われた後、アプリケーションの実行を再開します。

sysfsファイル

/sys/power/state

関連するソースコード

kernel/power/

カーネルコンフィギュレーション
  Power management options  --->
      [*] Suspend to RAM and standby                                              <SUSPEND>
      -*- Device power management core functionality                                   <PM>

7.3.19.1. パワーマネジメント機能の実行方法

以下のコマンドを実行することで、Armadilloを省電力モードに遷移させることができます。

[armadillo ~]# systemctl suspend

/lib/systemd/system-sleep/に以下のようなスクリプトを配置することで、省電力モードの遷移・起床時に独自の処理を追加することも可能です。

#!/bin/sh
case $1/$2 in
    pre/*)
        # 省電力モードへの遷移時に実行する処理
    ;;
    post/*)
        # 省電力モードからの起床時に実行する処理
    ;;
esac

また、/etc/systemd/sleep.confを編集することで、省電力モードの状態を変更することが可能です。(デフォルトではSuspend-to-RAMに遷移します)

表7.5 対応する省電力モードの状態

省電力モードの状態設定名説明
Power-On SuspendstandbySuspend-to-RAMよりも短時間で復帰することができる。
Suspend-to-RAMmemPower-On Suspendよりも消費電力を抑えることができる。

以下は設定例です。

[Sleep]
SuspendState=mem

図7.1 /etc/systemd/sleep.conf の設定例


[警告]

i.MX 7Dualのリビジョン1.1は、Suspend-to-RAM状態に遷移させることができません。i.MX 7Dualのリビジョンは、起動ログに次のように表示されます。

CPU:   Freescale i.MX7D rev1.1 at 996MHz

起床要因として利用可能なデバイスは次の通りです。

表7.6 起床要因として利用可能なデバイス

デバイス起床要因の有効化起床要因
UART1(CON1)
[armadillo ~]# echo enabled > /sys/bus/platform/drivers/imx-uart/30860000.serial/tty/ttymxc0/power/wakeup
データ受信
UART2(CON2)
[armadillo ~]# echo enabled > /sys/bus/platform/drivers/imx-uart/30890000.serial/tty/ttymxc1/power/wakeup
データ受信
UART5(CON9)
[armadillo ~]# echo enabled > /sys/bus/platform/drivers/imx-uart/30a70000.serial/tty/ttymxc4/power/wakeup
データ受信
Ethernet(CON6)
[armadillo ~]# apt-get install ethtool
[armadillo ~]# ethtool -s eth0 wol g
Wake-on-LANのマジックパケットを受信
USBホスト(CON7)
[armadillo ~]# echo enabled > /sys/bus/platform/devices/30b10000.usb/power/wakeup
[armadillo ~]# echo enabled > /sys/bus/platform/drivers/ci_hdrc/ci_hdrc.0/power/wakeup
[armadillo ~]# echo enabled > /sys/bus/platform/drivers/ci_hdrc/ci_hdrc.0/usb1/power/wakeup
USBデバイスの挿抜

[ティップ]

Ethernetから起床要因であるWake-on-LANのマジックパケットを、ATDEから送信する例を次に示します。

[PC ~]$ sudo apt-get install wakeonlan
[PC ~]$ wakeonlan [MAC Address]  1

1

Armadillo-IoTの有線LANのMACアドレスを指定します。



[19] 1000BASE-Tは半二重通信非サポート

[20] USBシリアルなどを接続している場合は、番号が異なる可能性があります。

[21] USBデバイスなどを接続してインプットデバイスを追加している場合は、番号が異なる可能性があります