第7章 Linuxカーネル仕様

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

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

工場出荷状態のフラッシュメモリに書き込まれているLinuxカーネルイメージには、デフォルトコンフィギュレーションが適用されています。 Armadillo-IoT ゲートウェイ用のデフォルトコンフィギュレーションが記載されているファイルは、Linux カーネルソースファイル(linux-3.14-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)
HIGH_RES_TIMERSHigh Resolution Timer Support
PREEMPTPreemptible Kernel
AEABIUse the ARM EABI to compile the kernel
COMPACTIONAllow for memory compaction
BINFMT_ELFKernel support for ELF binaries

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/imx7d.dtsi
arch/arm/boot/dts/armadillo_iotg_addon.dtsi

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

7.3.2. SPIフラッシュメモリ

Armadillo-IoT では、フラッシュメモリを制御するソフトウェアとして MTD(Memory Technology Device) を利用しています。MTDのキャラクタデバイスまたはブロックデバイスを経由して、ユーザーランドからアクセスすることができます。

関連するソースコード

drivers/mtd/mtdcore.c
drivers/mtd/mtdsuper.c
drivers/mtd/mtdconcat.c
drivers/mtd/mtdpart.c
drivers/mtd/mtdchar.c
drivers/mtd/cmdlinepart.c
drivers/mtd/ofpart.c
drivers/mtd/mtdblock.c
drivers/mtd/spi-nor/spi-nor.c
drivers/mtd/spi-nor/fsl-quadspi.c

デバイスファイル
デバイスファイルデバイスタイプ対応するパーティション名
/dev/mtd0キャラクタbootloader
/dev/mtd0ro
/dev/mtdblock0ブロック
/dev/mtd1キャラクタlicense
/dev/mtd1ro
/dev/mtdblock1ブロック
/dev/mtd2キャラクタreserved
/dev/mtd2ro
/dev/mtdblock2ブロック
カーネルコンフィギュレーション
  Device Drivers  --->
      <*> Memory Technology Device (MTD) support  --->                         <CONFIG_MTD>
          <*>   Command line partition table parsing             <CONFIG_MTD_CMDLINE_PARTS>
          <*>   OpenFirmware partitioning information support         <CONFIG_MTD_OF_PARTS>
          <*>   Caching block device access to MTD devices               <CONFIG_MTD_BLOCK>
          <*>   SPI-NOR device support  --->                           <CONFIG_MTD_SPI_NOR>
               <*>   Freescale Quad SPI controller                 <CONFIG_SPI_FSL_QUADSPI>

7.3.3. 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 なし
最大ボーレート: 1.5Mbps

関連するソースコード

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/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_CONSOL>
                  <*> Freescale lpuart serial port support              <SERIAL_FSL_LPUART>
                  [*]   Console on Freescale lpuart serial port <SERIAL_FSL_LPUART_CONSOLE>

7.3.4. Ethernet

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

機能

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

関連するソースコード

drivers/net/Space.c
drivers/net/loopback.c
drivers/net/mii.c
drivers/net/ethernet/freescale/fec_main.c
drivers/net/ethernet/freescale/fec_ptp.c
drivers/net/phy/mdio_bus.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>
              <*>   Drivers for the Vitesse PHYs                              <VITESSE_PHY>

7.3.5. 3G

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

機能

リンク検出サポート

デバイスファイル

/dev/ttyACM0[15]
/dev/ttyACM1[15]
/dev/ttyACM2[15]
/dev/ttyACM3[15]
/dev/ttyACM4[15]
/dev/ttyACM5[15]

関連するソースコード

drivers/net/usb/usbnet.c
drivers/usb/class/cdc-acm.c

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] Network device support  --->                                         <NETDEVICES>
          USB Network Adapters  --->
              <*> Multi-purpose USB Networking Framework                       <USB_USBNET>
              <*>   CDC Ethernet support (smart devices such as cable modems)
                                                                         <USB_NET_CDCETHER>
  Device Drivers  --->
      [*] USB support  --->                                                   <USB_SUPPORT>
          <*>     USB Modem (CDC ACM) support                                     <USB_ACM>

7.3.6. WLAN

Armadillo-IoT には、Qualcomm Atheros製 AR9462 が搭載されています。AR9462 のWLAN機能は、「PCI Express」に示す PCI Express に接続されています。

機能

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

ネットワークデバイス

wlan0

関連するソースコード

drivers/net/wireless/ath/ath9k/

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] Network device support  --->                                         <NETDEVICES>
          [*]   Wireless LAN  --->                                                   <WLAN>
          <*>   Atheros Wireless Cards  --->                                    <ATH_CARDS>
              <*>   Atheros 802.11n wireless cards support                               <ATH9>
              [*]     Atheros ath9k PCI/PCIe bus support                            <ATH9K_PCI>
              [*]   Atheros ath9k rfkill support                                 <ATH9K_RFKILL>

7.3.7. BT

Armadillo-IoT には、Qualcomm Atheros製 AR9462 が搭載されています。AR9462 のBT機能は、「USBハブ」に示す USB3503 に接続されています。

AR9462は、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>
          <*>   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 device drivers  --->
                    <*> HCI USB driver                                      <BT_HCIUART_H4>
                    [*]   Atheros AR300x serial support                     <BT_HCIUART_LL>
      Device Drivers  --->
      [*] Network device support  --->                                         <NETDEVICES>
          [*]   Wireless LAN  --->                                                   <WLAN>
              <*>   Atheros Wireless Cards  --->                                <ATH_CARDS>
                  [*]   Atheros bluetooth coexistence support        <ATH9K_BTCOEX_SUPPORT>
[ティップ]

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

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

7.3.8. 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>
          [*]   Additional delay after SDIO reset              <MMC_DELAY_AFTER_SDIO_RESET>
                *** 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_OF_ESDHC>
[警告]

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

&usdhc1 {
	pinctrl-names = "default", "state_100mhz", "state_200mhz";
	pinctrl-0 = <&pinctrl_usdhc1>;
	pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
	pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
	cd-gpios = <&gpio5 0 0>;
	wp-gpios = <&gpio5 1 0>;
	tuning-step = <2>;
	vmmc-supply = <&reg_sd1_vmmc>;
	enable-sdio-wakeup;
	keep-power-in-suspend;
	use-sdio;
	status = "okay";
};

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

7.3.9. 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/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

カーネルコンフィギュレーション
  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 host controller                              <USB_CHIPIDEA_HOST>
                USB Physical Layer drivers  --->
              <*>     NOP USB Transceiver Driver                            <NOP_USB_XCEIV>

7.3.10. USBハブ

Armadillo-IoT には、Microchip製 USB3503 が搭載されています。USB3503 には、PDS6-JとAR9462が接続されています。

関連するソースコード

drivers/usb/misc/usb3503.c

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

7.3.11. PCI Express

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

Armadillo-IoT では、AR9462が接続されています。

機能

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

関連するソースコード

drivers/pci/host/pci-imx6.c
drivers/pci/access.c
drivers/pci/bus.c
drivers/pci/probe.c
drivers/pci/host-bridge.c
drivers/pci/remove.c
drivers/pci/pci.c
drivers/pci/pci-driver.c
drivers/pci/search.c
drivers/pci/pci-sysfs.c
drivers/pci/rom.c
drivers/pci/setup-res.c
drivers/pci/irq.c
drivers/pci/vpd.c
drivers/pci/setup-bus.c
drivers/pci/vc.c
drivers/pci/iov.c

カーネルコンフィギュレーション
  Bus support  --->
      [*] PCI support                                                                 <PCI>
      [ ] 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を有効化すると、AR9462が利用できなくなります。

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

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-dev.c
drivers/rtc/rtc-lib.c
drivers/rtc/rtc-proc.c
drivers/rtc/rtc-sysfs.c
drivers/rtc/systohc.c
drivers/rtc/rtc-bmic.c

カーネルコンフィギュレーション
  Device Drivers  --->
      <*> Real Time Clock  --->
          [*]   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.13. 温度センサ

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/thermal_core.c
drivers/thermal/cpu_cooling.c
drivers/thermal/device_cooling.c
drivers/thermal/of-thermal.c
drivers/thermal/step_wise.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>
          -*-   Step_wise thermal governor                          <THERMAL_GOV_STEP_WISE>
          [*]   generic cpu cooling support                                   <CPU_THERMAL>
          <*>   Temperature sensor driver for Freescale i.MX SoCs             <IMX_THERMAL>

7.3.14. 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-core.c
drivers/iio/industrialio-buffer.c
drivers/iio/industrialio-event.c
drivers/iio/industrialio-trigger.c
drivers/iio/industrialio-triggered-buffer.c
drivers/iio/inkern.c
drivers/iio/kfifo_buf.c
drivers/iio/trigger/iio-trig-sysfs.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.15. 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-register.c
drivers/leds/leds-gpio.c
drivers/leds/trigger/ledtrig-timer.c
drivers/leds/trigger/ledtrig-oneshot.c
drivers/leds/trigger/ledtrig-heartbeat.c
drivers/leds/trigger/ledtrig-backlight.c
drivers/leds/trigger/ledtrig-gpio.c
drivers/leds/trigger/ledtrig-default-on.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.16. ユーザースイッチ

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

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

表7.3 キーコード

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

デバイスファイル

/dev/input/event1[16]

関連するソースコード

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.17. 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>
          [*]   Autoselect pertinent helper modules                       <I2C_HELPER_AUTO>
                I2C Hardware Bus support  --->
              <*> GPIO-based bitbanging I2C                                      <I2C_GPIO>
              <*> IMX I2C interface                                               <I2C_MXC>

7.3.18. 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.19. ウォッチドッグタイマー

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

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

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

関連するソースコード

drivers/watchdog/imx2_wdt.c

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

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

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

7.3.20. CPU周波数スケーリング

Armadillo-IoTのCPU周波数スケーリング機能は、LinuxのCPUFreqを利用しています。適切にCPU周波数を調整することにより、CPUの消費電力を抑えることができます。

sysfsディレクトリ

/sys/devices/system/cpu/cpu0/cpufreq/
/sys/devices/system/cpu/cpu1/cpufreq/

関連するソースコード

drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq_conservative.c
drivers/cpufreq/cpufreq_governor.c
drivers/cpufreq/cpufreq_interactive.c
drivers/cpufreq/cpufreq_ondemand.c
drivers/cpufreq/cpufreq_performance.c
drivers/cpufreq/cpufreq_stats.c
drivers/cpufreq/cpufreq_userspace.c
drivers/cpufreq/freq_table.c
drivers/cpufreq/imx7-cpufreq.c

カーネルコンフィギュレーション
  CPU Power Management  --->
      CPU Frequency scaling  --->
          [*] CPU Frequency scaling                                              <CPU_FREQ>
          <*>   CPU frequency translation statistics                        <CPU_FREQ_STAT>
                Default CPUFreq governor (interactive)  --->
                    (X) interactive                      <CPU_FREQ_DEFAULT_GOV_INTERACTIVE>
                <*>   'performance' governor                     <CPU_FREQ_GOV_PERFORMANCE>
                <*>   'powersave' governor                         <CPU_FREQ_GOV_POWERSAVE>
                <*>   'userspace' governor for userspace frequency scaling
                                                                   <CPU_FREQ_GOV_USERSPACE>
                <*>   'ondemand' cpufreq policy governor            <CPU_FREQ_GOV_ONDEMAND>
                -*-   'interactive' cpufreq policy governor      <CPU_FREQ_GOV_INTERACTIVE>
                <*>   'conservative' cpufreq governor           <CPU_FREQ_GOV_CONSERVATIVE>
                      ARM CPU frequency scaling drivers  --->
                          <*> Freescale i.MX7 cpufreq support           <ARM_IMX7D_CPUFREQ>

Armadillo-IoTが対応するCPU周波数と、CPU(ARM Cortex-A7)の電源電圧の対応を次に示します。

表7.5 対応するCPU周波数と電源電圧

CPU周波数電源電圧
996MHz1.075V
792MHz0.975V

CPU周波数を決定する機構を、"Governor"と呼びます。工場出荷状態のArmadillo-IoTのLinuxカーネルで利用可能なGovernorを次に示します。

表7.6 Governorの種類

Governor説明
performance負荷に関わらず、常に最大クロックで動作する。
powersave負荷に関わらず、常に最小クロックで動作する。
userspaceSYSFSファイルからユーザーがクロックを指定する。
ondemand負荷がかかるとクロックを上げ、負荷が下がるとクロックも下げる。負荷がかかるとクロックが急激に上がる。
conservative負荷がかかるとクロックを上げ、負荷が下がるとクロックも下げる。ondemandよりも、負荷に対するクロックの変化が段階的に行われる。
interactive負荷がかかるとクロックを上げ、負荷が下がるとクロックも下げる。ondemandよりも、負荷に対するクロックの変化が速やかに行われる。

Governorの変更はsysfsディレクトリ以下のscaling_governorから行うことができます。CPU0のGovernor変更例を次に示します。

[armadillo ~]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 1
conservative ondemand userspace powersave interactive performance
[armadillo ~]# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2
[armadillo ~]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 3
performance

1

利用可能なGovernorを表示します。

2

Governorをperformanceに設定します。

3

Governorを確認します。performanceに設定されていることが確認できます。

7.3.21. パワーマネジメント

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

[警告]

パワーマネジメント機能を利用する場合は、Linuxカーネル linux-3.14-x1-at7 以降(カーネルイメージ uImage-x1-v7.00 以降)をご利用ください。

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

sysfsファイル

/sys/power/state

関連するソースコード

kernel/power/

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

Armadillo-IoTが対応するパワーマネジメント状態と、/sys/power/stateに書き込む文字列の対応を次に示します。

表7.7 対応するパワーマネジメント状態

パワーマネジメント状態文字列説明
Power-On SuspendstandbySuspend-to-RAMよりも短時間で復帰することができる。
Suspend-to-RAMmemPower-On Suspendよりも消費電力を抑えることができる。

[警告]

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

CPU:   Freescale i.MX7D rev1.1 996 MHz (running at 792 MHz)

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

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

デバイス起床要因の有効化起床要因
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アドレスを指定します。



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

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

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