第7章 Linuxカーネル仕様

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

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

工場出荷状態のフラッシュメモリに書き込まれているLinuxカーネルイメージには、デフォルトコンフィギュレーションが適用されています。 Armadillo-X1用のデフォルトコンフィギュレーションが記載されているファイルは、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
COMPACTIONAllow for memory compaction
BOUNCEEnable bounce buffers
CMAContiguous Memory Allocator

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

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

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

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

7.3. Linuxドライバ一覧

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

7.3.1. Armadillo-X1

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

関連するソースコード

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

Device Treeドキュメント

Documentation/devicetree/bindings/arm/arch_timer.txt
Documentation/devicetree/bindings/arm/cpus.txt
Documentation/devicetree/bindings/interrupt-controller/arm,gic.txt
Documentation/devicetree/bindings/clock/fixed-clock.txt
Documentation/devicetree/bindings/sram/sram.txt
Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt

カーネルコンフィギュレーション
  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. SPIフラッシュメモリ

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

関連するソースコード

drivers/mtd/*
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-X1 のシリアルは、i.MX 7Dual の UART(Universal Asynchronous Receiver/Transmitter) を利用しています。

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

フォーマット

データビット長: 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/earlycon.c
drivers/tty/serial/serial_mctrl_gpio.c
drivers/tty/serial/imx.c

Device Treeドキュメント

Documentation/devicetree/bindings/serial/fsl-imx-uart.txt

デバイスファイル
シリアルインターフェースデバイスファイル
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>

7.3.4. Ethernet

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

機能

通信速度: 1000Mbps(1000BASE-T), 100Mbps(100BASE-TX), 10Mbps(10BASE-T)
通信モード: Full-Duplex(全二重), Half-Duplex(半二重)[18]
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

Device Treeドキュメント

Documentation/devicetree/bindings/net/fsl-fec.txt

ネットワークデバイス

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.5. WLAN

Armadillo-X1 には、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/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>

7.3.6. BT

Armadillo-X1 には、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>
          [*]   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>
[ティップ]

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

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

7.3.7. SDホスト

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

Armadillo-X1 では、SDスロット拡張ボードのSDインターフェース(CON2)が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 Treeドキュメント

Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
Documentation/devicetree/bindings/mmc/mmc-pwrseq-emmc.txt

カーネルコンフィギュレーション
  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/mach-imx/armadillo_iotg_addon/addon_atmark_techno_sd_x1_intf1.dtsの"usdhc1"ターゲットに"use-sdio"プロパティを追加してください。

	fragment@2 {
		target = <&usdhc1>;
		__overlay__ {
			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 1>;
			wp-gpios = <&gpio5 1 0>;
			pinctrl-assert-gpios = <&gpio5 4 1>,	/* SD1_CMD */
					       <&gpio5 5 1>,	/* SD1_DATA0 */
					       <&gpio5 6 1>,	/* SD1_DATA1 */
					       <&gpio5 7 1>,	/* SD1_DATA2 */
					       <&gpio5 8 1>;	/* SD1_DATA3 */
			tuning-step = <2>;
			vmmc-supply = <&reg_sd1_vmmc_intf1>;
			enable-sdio-wakeup;
			keep-power-in-suspend;
			max-frequency = <100000000>;
			use-sdio;
			status = "okay";
		};
	};

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

7.3.8. USBホスト

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

Armadillo-X1 では、USB ホストインターフェース(CON2)が 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 Treeドキュメント

Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt
Documentation/devicetree/bindings/usb/usbmisc-imx.txt
Documentation/devicetree/bindings/usb/usb-nop-xceiv.txt
Documentation/devicetree/bindings/regulator/fixed-regulator.txt

カーネルコンフィギュレーション
  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-X1 には、Microchip製 USB3503 が搭載されています。USB3503 には、AR9462が接続されています。

関連するソースコード

drivers/usb/misc/usb3503.c

Device Treeドキュメント

Documentation/devicetree/bindings/usb/usb3503.txt

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

7.3.10. PCI Express

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

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

機能

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を有効化すると、AR9462が利用できなくなります。

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

Armadillo-X1 のリアルタイムクロックは、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
 74:          0          0  gpio-mxc  13 Edge      bmic_rtc_irq, bmic_adc_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
 74:          1          0  gpio-mxc  13 Edge      bmic_rtc_irq, bmic_adc_irq

1

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

2

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

3

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

4

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

5

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

[注記]

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

[ティップ]

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

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

7.3.12. 温度センサ

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

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

絶縁IOアドオンモジュールには、Microchip製 MCP3202 が搭載されています。MCP3202は、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-X1 に搭載されているソフトウェア制御可能なLEDには、GPIOが接続されています。Linuxでは、GPIO接続用LEDドライバ(leds-gpio)で制御することができます。

sysfs LEDクラスディレクトリ

/sys/class/leds/led1
/sys/class/leds/led2

関連するソースコード

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 Treeドキュメント

Documentation/devicetree/bindings/leds/leds-gpio.txt

カーネルコンフィギュレーション
  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-X1 に搭載されているユーザースイッチには、GPIOが接続されています。GPIOが接続されユーザー空間でイベント(Press/Release)を検出することができます。Linuxでは、GPIO接続用キーボードドライバ(gpio-keys)で制御することができます。

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

表7.3 キーコード

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

デバイスファイル

/dev/input/event1[19]

関連するソースコード

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 Treeドキュメント

Documentation/devicetree/bindings/input/gpio-keys.txt

カーネルコンフィギュレーション
  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-X1 のI2Cインターフェースは、i.MX 7Dual の I2C(I2C Controller) を利用します。また、GPIOを利用したI2Cバスドライバ(i2c-gpio)を利用することで、I2Cバスを追加することができます。

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

表7.4 I2Cデバイス

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

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


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

機能

最大転送レート: 400kbps

デバイスファイル

/dev/i2c-2 (I2C3)
/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 Treeドキュメント

Documentation/devicetree/bindings/i2c/i2c-imx.txt

カーネルコンフィギュレーション
  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-X1 の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 Treeドキュメント

Documentation/devicetree/bindings/spi/fsl-imx-cspi.txt

カーネルコンフィギュレーション
  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-X1 のウォッチドッグタイマーは、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 Treeドキュメント

Documentation/devicetree/bindings/watchdog/fsl-imx-wdt.txt

カーネルコンフィギュレーション
  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-X1のパワーマネジメント機能は、LinuxのSPM(System Power Management)およびDPM(Device Power Management)を利用しています。パワーマネジメント状態を省電力モードに遷移させることにより、Armadillo-X1の消費電力を抑えることができます。

[警告]

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

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

sysfsファイル

/sys/power/state

関連するソースコード

kernel/power/

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

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

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

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

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

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

デバイス起床要因の有効化起床要因
UART5(CON4)
[armadillo ~]# echo enabled > /sys/bus/platform/drivers/imx-uart/30a70000.serial/tty/ttymxc4/power/wakeup
データ受信
UART7(CON7)
[armadillo ~]# echo enabled > /sys/bus/platform/drivers/imx-uart/30a90000.serial/tty/ttymxc6/power/wakeup
データ受信
Ethernet(CON1)
[armadillo ~]# apt-get install ethtool
[armadillo ~]# ethtool -s eth0 wol g
Wake-on-LANのマジックパケットを受信
USBホスト(CON2)
[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-X1の有線LANのMACアドレスを指定します。



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

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