第8章 Linuxカーネル仕様

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

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

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

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

表8.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

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

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

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

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

8.3. Linuxドライバ一覧

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

8.3.1. Armadillo-IoT ゲートウェイG3L

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

関連するソースコード

arch/arm/mach-imx/
arch/arm/boot/dts/armadillo_iotg_g3l.dts
arch/arm/boot/dts/armadillo_x1l.dts
arch/arm/boot/dts/armadillo_x1l-extboard01.dtsi
arch/arm/boot/dts/imx7d.dtsi

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

8.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>

8.3.3. UART

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

Armadillo-IoT で利用している シリアルインターフェースと、接続先を次に示します。

表8.3 UARTの接続先

シリアルインターフェース接続先
UART2メインユニット CON4
UART3サブユニット CON2
UART4サブユニット WL1837MODモジュール
UART5メインユニット CON5
UART7サブユニット ELS31-J

フォーマット

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

関連するソースコード

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

デバイスファイル
シリアルインターフェースデバイスファイル
UART2/dev/ttymxc1
UART3/dev/ttymxc2
UART4/dev/ttymxc3
UART5/dev/ttymxc4
UART7/dev/ttymxc6
カーネルコンフィギュレーション
  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>

8.3.4. Ethernet

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

機能

通信速度:100Mbps(100BASE-TX), 10Mbps(10BASE-T)
通信モード:Full-Duplex(全二重), Half-Duplex(半二重)
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/smsc.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 SMSC PHYs                                        <SMSC_PHY>

8.3.5. LTE

Armadillo-IoT には、Gemalto製 ELS31-J が搭載されています。

ELS31-J は、「USBホスト」に示すOTG2と、「UART」に示すUART7に接続されています。

機能

リンク検出サポート

ネットワークデバイス

usb1[14]

デバイスファイル

/dev/ttyACM0[15]
/dev/ttymxc6

関連するソースコード

drivers/net/usb/usbnet.c
drivers/net/usb/cdc_ether.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>
      [*] USB support  --->                                                   <USB_SUPPORT>
          <*>     USB Modem (CDC ACM) support                                     <USB_ACM>

8.3.6. WLAN

Armadillo-IoT には、TEXAS INSTRUMENTS社製WL1837MODが搭載されています。

WL1837MOD のWLAN機能は、「SDホスト」に示すuSDHC2に接続されています。

機能

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

ネットワークデバイス

wlan0

関連するソースコード

drivers/net/wireless/ti/wl18xx/
drivers/net/wireless/ti/wlcore/

カーネルコンフィギュレーション
  Device Drivers  --->
      [*] Network device support  --->                                         <NETDEVICES>
          [*]   Wireless LAN  --->                                                   <WLAN>
          [*]   TI Wireless LAN support  --->                                       <WL_TI>
              <*>   TI wl18xx support                                              <WL18XX>
              -*-   TI wlcore support                                              <WLCORE>
              <*>     TI wlcore SDIO support                                  <WLCORE_SDIO>
[ティップ]

WL1837MODのファームウェアは、ATDEにインストールされているfirmware-ti-connectivityパッケージに含まれています。ファームウェアはLinuxカーネルイメージ内に改変無く配置されます。

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

8.3.7. BT

Armadillo-IoT には、TEXAS INSTRUMENTS社製WL1837MODが搭載されています。

WL1837MOD のBT機能は、「UART」に示すUART4に接続されています。

WL1837MODは、Bluetooth(R) version 4.1に対応しており、BLE(Bluetooth Low Energy)、EDR(Enhanced Data Rate)が利用できます。

デバイス

hci0

関連するソースコード

drivers/misc/ti-st/
drivers/bluetooth/btwilink.c
drivers/bluetooth/hci_ldisc.c
drivers/bluetooth/hci_ll.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 UART driver                                        <BT_HCIUART>
                    [*]   HCILL protocol support                            <BT_HCIUART_LL>
                    <*> Texas Instruments WiLink7 driver                        <BT_WILINK>
      Device Drivers  --->
          Misc devices  --->
              Texas Instruments shared transport line discipline  --->
                  <*> Shared transport core driver                                  <TI_ST>
                  <*>   HCI TTY emulation driver for Bluetooth                     <ST_HCI>
[ティップ]

WL1837MODのファームウェアは、ATDEにインストールされているfirmware-ti-connectivityパッケージに含まれています。ファームウェアはLinuxカーネルイメージ内に改変無く配置されます。

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

8.3.8. SDホスト

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

Armadillo-IoT で利用している SDホストと、接続先を次に示します。

表8.4 SDホストの接続先

SDホスト接続先
uSDHC1メインユニットCON12
uSDHC2サブユニット WL1837MODモジュール

機能(メインユニットCON12)

カードタイプ: microSD/microSDHC/microSDXC/microSDIO
バス幅: 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_x1l.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;
    keep-power-in-suspend;
    use-sdio;
    status = "okay";
};

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

8.3.9. USBホスト

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

Armadillo-IoT で利用している USBインターフェースと、接続先を次に示します。

表8.5 USBインターフェースの接続先

USBインターフェース接続先
OTG1メインユニットCON3
OTG2サブユニット ELS31-J

機能(メインユニットCON3)

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>

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

Armadillo-IoT のリアルタイムクロックは、i.MX7DualのRTC機能を利用しています。

機能

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

デバイスファイル

/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-snvs.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>
          <*>   Freescale SNVS RTC support                                   <RTC_DRV_SNVS>

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

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

[armadillo ~]# cat /proc/interrupts | grep "rtc alarm" 1
51:          0          0       GIC  51  rtc alarm
[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 "rtc alarm" 5
51:          1          0       GIC  51  rtc alarm

1

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

2

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

3

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

4

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

5

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

[注記]

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

[注記]

/dev/rtc0にi.MX7DualのRTC機能が割り当てられるのは、linux-3.14-x1-at14 以降です。at13以前のバージョンでは、Board Management ICのRTC機能が割り当てられます。Board Management ICのRTC機能は、I2C4 (I2Cノード: 3-0011) に接続されています。

また、/dev/rtc/dev/rtc0のシンボリックリンクであるため、同様にバージョンによって割り当てられるデバイスが違います。

[ティップ]

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

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

8.3.11. 温度センサ

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

起動直後の設定では、i.MX7Dualの測定温度が 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>

8.3.12. ADコンバーター

Armadillo-IoTに搭載されたBoard Management ICのADコンバーター機能を利用することができます。

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

機能(Board Management IC)

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

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>

8.3.13. LED

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

sysfs LEDクラスディレクトリ

/sys/class/leds/led3
/sys/class/leds/led4
/sys/class/leds/led5

関連するソースコード

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>

8.3.14. ユーザースイッチ

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

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

表8.6 キーコード

ユーザースイッチキーコードイベントコード
SW2/dev/input/event1code 2 (KEY_1)

デバイスファイル

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

8.3.15. I2C

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

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

表8.7 I2Cデバイス

I2CバスI2Cデバイス
アドレスデバイス名
3(I2C4)0x09PF3000 パワーマネジメントIC
0x10〜0x17Board Management IC
0x50M24C01-W EEPROM

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

機能

最大転送レート: 400kbps

デバイスファイル

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

8.3.16. SPI

Armadillo-IoT のSPIインターフェースは、i.MX7Dual の 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_MXC>
                *** SPI Protocol Masters ***
          < >   User mode SPI device driver support                            <SPI_SPIDEV>

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

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

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

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

関連するソースコード

drivers/watchdog/imx2_wdt.c

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

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

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

8.3.18. 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)の電源電圧の対応を次に示します。

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

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

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

表8.9 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に設定されていることが確認できます。

8.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>
      [*] Run-time PM core functionality                                        <PM_RUNTIME>

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

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

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

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

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

デバイス起床要因の有効化起床要因
UART2(メインユニットCON4)
[armadillo ~]# echo enabled > /sys/bus/platform/drivers/imx-uart/30890000.serial/tty/ttymxc1/power/wakeup
データ受信
UART5(メインユニットCON5)
[armadillo ~]# echo enabled > /sys/bus/platform/drivers/imx-uart/30a70000.serial/tty/ttymxc4/power/wakeup
データ受信
Ethernet(メインユニットCON2)
[armadillo ~]# apt-get install ethtool
[armadillo ~]# ethtool -s eth0 wol g
Wake-on-LANのマジックパケットを受信
USBホスト(メインユニットCON11)
[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] USB Ethernetなどを接続している場合は、番号が異なる可能性があります。

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

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