第8章 Linuxカーネル仕様

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

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

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

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

表8.1 Linuxカーネル主要設定

コンフィグ説明
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=ttymxc1,115200起動ログなどが出力されるイニシャルコンソールにttymxc1(ベースボード:CON9)を、ボーレートに 115200bps を指定します。
root=/dev/ram0ルートファイルシステムにRAMディスクを指定します。

8.3. Linuxドライバ一覧

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

8.3.1. Armadillo-IoT ゲートウェイ スタンダードモデル

Armadillo-IoT ゲートウェイ スタンダードモデル の初期化手順やハードウェアの構成情報、ピンマルチプレクスの情報などが定義されています。ユーザーオリジナルのアドオンモジュールを利用する場合などに変更を加えます。

関連するソースコード

arch/arm/mach-imx/avic.c
arch/arm/mach-imx/clk-imx25.c
arch/arm/mach-imx/clk-pllv1.c
arch/arm/mach-imx/cpu-imx25.c
arch/arm/mach-imx/cpu.c
arch/arm/mach-imx/ehci-imx25.c
arch/arm/mach-imx/imx25-gpio.c
arch/arm/mach-imx/iomux-v3.c
arch/arm/mach-imx/irq-common.c
arch/arm/mach-imx/mach-armadillo_iotg_std.c
arch/arm/mach-imx/mm-imx25.c
arch/arm/mach-imx/system.c
arch/arm/mach-imx/time.c
arch/arm/mach-imx/armadillo_iotg_std_addon/
arch/arm/mach-imx/devices/

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                                  <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-IoTG Std Base board               <MACH_ARMADILLO_IOTG_STD>
                eSDHC2 select function  (SD)  --->                    <AIOTG_STD_ESDHC2_SD>
                USB Port Select (CON7 - Base Board)  --->              <AIOTG_STD_USB_CON7>
          [*]   Add-On Module Auto Detect                     <AIOTG_STD_ADDON_AUTO_DETECT>
          -*- Support i.MX25 platforms from gpio request                  <MACH_IMX25_GPIO>
                            :

ユーザーオリジナルのアドオンモジュールを利用する場合には、アットマークテクノ製アドオンモジュールの自動検出機能を示す「Add-on Module Auto Detect」の選択を外します。

「Add-On Module Auto Detect」の選択を外すと、アドオンインターフェースで実現することのできる機能を選択することができます。コンフィギュレーションで機能を明示的に割り当てない全てのピンにはGPIO機能が割り当てられます。

    [ ]   Add-On Module Auto Detect
            Extension I/F Options  --->
          [ ] Enable UART1 at CON1/CON2 (NEW)
          [ ] Enable UART3 at CON1/CON2 (NEW)
          [ ] Enable UART4 at CON1/CON2 KPP Pad (NEW)
          [ ]   Enable UART4 at CON1 LCD Pad (NEW)
          [ ] Enable UART5 at CON1/CON2 (NEW)
          [ ] Enable I2C2 at CON1/CON2 (NEW)
          [ ] Enable I2C3 at CON1_24/CON1_25 (NEW)
          [*]   Enable I2C3 at CON1_51/CON1_52
          [ ] Enable SPI2 at CON1 (NEW)
          [ ] Enable SPI3 at CON1/CON2 (NEW)
          [ ] Enable PWM1 at CON1_5/CON2_33 (NEW)
          [ ] Enable PWM2 at CON1_24 (NEW)
          [ ] Enable PWM3 at CON1_25 (NEW)
          [ ] Enable PWM4 at CON1_3/CON2_24 (NEW)

機能が割り当てられるピンを調べるには、各項目のヘルプを参照します。次に示す例では、「Enable UART1 at CON1/CON2」を選択した場合に、アドオンインターフェース(ベースボード:CON1) 7ピンと アドオンインターフェース(ベースボード:CON2) 41ピンに UART1のRXD信号が、アドオンインターフェース(ベースボード:CON1) 8ピンと アドオンインターフェース(ベースボード:CON2) 40ピンに UART1のTXD信号が割り当てられることが確認できます。

    ---------------------------- Enable UART1 at CON1/CON2 ----------------------------
     CONFIG_AIOTG_STD_UART1:

     Enable UART1 at CON1/CON2

     CON1_7/CON2_41: UART1_RXD
     CON1_8/CON2_40: UART1_TXD

     Symbol: AIOTG_STD_UART1 [=n]
     Type  : boolean
     Prompt: Enable UART1 at CON1/CON2
       Location:
         -> System Type
           -> Freescale i.MX family (ARCH_MXC [=y])
             -> Freescale i.MX support
               -> Support Armadillo-IoTG Std Base board (MACH_ARMADILLO_IOTG_STD [=y])
                 -> Extension I/F Options
       Defined at arch/arm/mach-imx/Kconfig.armadillo_iotg_std:12
       Depends on: ARCH_MXC [=y] && ARCH_MULTI_V5 [=y] && MACH_ARMADILLO_IOTG_STD [=y]\
      && AIOTG_STD_EXTIF_OPTIONS [=y]
       Selects: AIOTG_STD_CON1_7_CON2_41_UART1_RXD [=n] && \
     AIOTG_STD_CON1_8_CON2_40_UART1_TXD [=n]
    -------------------------------------------------------------------------------------
                                          < Exit >

8.3.2. フラッシュメモリ

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

関連するソースコード

drivers/mtd/cmdlinepart.c
drivers/mtd/maps/physmap.c
drivers/mtd/mtd_blkdevs.c
drivers/mtd/mtdblock.c
drivers/mtd/mtdchar.c
drivers/mtd/mtdconcat.c
drivers/mtd/mtdcore.c
drivers/mtd/mtdpart.c
drivers/mtd/mtdsuper.c
drivers/mtd/chips/cfi_cmdset_0001.c
drivers/mtd/chips/cfi_probe.c
drivers/mtd/chips/cfi_util.c
drivers/mtd/chips/chipreg.c
drivers/mtd/chips/gen_probe.c

デバイスファイル
デバイスファイルデバイスタイプ対応するパーティション名
/dev/mtd0キャラクタbootloader
/dev/mtd0ro
/dev/flash/bootloader
/dev/flash/nor.bootloader
/dev/mtdblock0ブロック
/dev/mtd1キャラクタkernel
/dev/mtd1ro
/dev/flash/kernel
/dev/flash/nor.kernel
/dev/mtdblock1ブロック
/dev/mtd2キャラクタuserland
/dev/mtd2ro
/dev/flash/userland
/dev/flash/nor.userland
/dev/mtdblock2ブロック
/dev/mtd3キャラクタconfig
/dev/mtd3ro
/dev/flash/config
/dev/flash/nor.config
/dev/mtdblock3ブロック
カーネルコンフィギュレーション
  Device Drivers  --->
      <*> Memory Technology Device (MTD) support  --->                         <CONFIG_MTD>
          <*> Command line partition table parsing               <CONFIG_MTD_CMDLINE_PARTS>
          <*> Caching block device access to MTD devices                 <CONFIG_MTD_BLOCK>
              RAM/ROM/Flash chip drivers  --->
              <*> Detect flash chips by Common Flash Interface (CFI) probe <CONFIG_MTD_CFI>
              <*> Support for Intel/Sharp flash chips             <CONFIG_MTD_CFI_INTELEXT>
              Mapping drivers for chip access  --->
              <*> Flash device in physical memory map                  <CONFIG_MTD_PHYSMAP>

8.3.3. UART

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

Armadillo-IoT のシリアルは、最大5ポートを利用することができます。標準状態では、UART2(ベースボード:CON9)をコンソールとして利用しています。

フォーマット

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

[警告]

高速なボーレート(1Mbps以上など)を設定して大量のデータを受信した場合、TTYバッファ(サイズ: 64kByte)が枯渇してユーザーランドからデータが取得できない場合があります。この場合、ユーザーランドでZMODEMのように確認応答と再送制御に対応したプロトコルを利用するなどの対策を行う必要があります。

関連するソースコード

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
UART3/dev/ttymxc2
UART4/dev/ttymxc3
UART5/dev/ttymxc4
カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                              <ARCH_MXC>
            Freescale i.MX support  --->
              [*] Support Armadillo-IoTG Std Base board       <MACH_ARMADILLO_IOTG_STD>
              [ ]   Add-On Module Auto Detect             <AIOTG_STD_ADDON_AUTO_DETECT> 1
                    Extension I/F Options  --->
                        [*] Enable UART1 at CON1/CON2                 <AIOTG_STD_UART1> 2
                        [*]   Enable UART1 HW flow control at CON1/CON2
                                                              <AIOTG_STD_UART1_HW_FLOW> 2
                        [*] Enable UART3 at CON1/CON2                 <AIOTG_STD_UART3> 2
                        [*]   Enable UART3 HW flow control at CON1/CON2
                                                              <AIOTG_STD_UART3_HW_FLOW> 2
                        [*] Enable UART4 at CON1/CON2 KPP Pad     <AIOTG_STD_UART4_KPP> 2
                        [*]   Enable UART4 HW flow control at CON1/CON2 KPP Pad
                                                          <AIOTG_STD_UART4_HW_FLOW_KPP> 2
                        [*] Enable UART5 at CON1/CON2                 <AIOTG_STD_UART5> 2
                        [*]   Enable UART5 HW flow control at CON1/CON2
                                                              <AIOTG_STD_UART5_HW_FLOW> 2
  Device Drivers  --->
      Character devices  --->
          [*] Enable TTY                                                          <TTY>
              Serial drivers  --->
                  <*> IMX serial port support                              <SERIAL_IMX>
                  [*]   Console on IMX serial port                  <SERIAL_IMX_CONSOL>

1

標準状態では有効化されています。

2

標準状態では無効化されています。

8.3.4. Ethernet

Armadillo-IoT のEthernet(LAN)は、i.MX257 の FEC(Fast Ethernet Controller)を利用しています。

機能

通信速度: 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

ネットワークデバイス

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>

8.3.5. 3G

Armadillo-IoT には、Sierra Wireless製 HL8548 が搭載されています。HL8548 は、USB Hostポートに接続されています。

機能

リンク検出サポート

ネットワークデバイス

eth1[16]
eth2[16]
eth3[16]

工場出荷状態の Armadillo-IoT のユーザーランドでは、udev によって次のようにネットワークデバイス名を変更します。

変更前変更後
eth1umts0
eth2umts1
eth3umts2
デバイスファイル

/dev/ttyACM0[17]
/dev/ttyACM1[17]
/dev/ttyACM2[17]

工場出荷状態の Armadillo-IoT のユーザーランドでは、udev によって次のようにシンボリックリンクを作成します。

デバイスファイル名シンボリックリンク名
/dev/ttyACM0/dev/ttyATCMD
/dev/ttyACM1/dev/tty3GLOG0
/dev/ttyACM2/dev/tty3GLOG1
関連するソースコード

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>

8.3.6. SDホスト

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

Armadillo-IoT では、最大2ポートを利用することができます。SDインターフェース(Armadillo-410:CON1)がeSDHC1を、SDインターフェース(ベースボード:CON4)がeSDHC2を利用しています。

機能

カードタイプ(Armadillo-410:CON1): microSD/microSDHC/microSDXC
カードタイプ(ベースボード:CON4): SD/SDHC/SDXC
バス幅: 4bit
スピードモード: Default Speed(24MHz), High Speed(48MHz)
カードディテクトサポート(ベースボード:CON4のみ)
ライトプロテクトサポート(ベースボード:CON4のみ)

デバイスファイル

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

関連するソースコード

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

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                                  <ARCH_MXC>
            Freescale i.MX support  --->
          [*] Support Armadillo-IoTG Std Base board               <MACH_ARMADILLO_IOTG_STD>
                eSDHC2 select function  (SD)  --->
                (X) SD                                                <AIOTG_STD_ESDHC2_SD>
                ( ) AWLAN                                       <AIOTG_STD_ESDHC2_SD_AWLAN>
  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>
          [*]       Enforce to use multi-block transfer
                                            <MMC_SDHCI_ESDHC_IMX_FORCE_MULTIBLOCK_TRANSFER>

SD インターフェース(ベースボード:CON4)とWLAN インターフェース(ベースボード:CON5)は、共通の信号が接続されています。「eSDHC2 select function」では、デフォルトでどちらの信号に接続するかを選択します。

8.3.7. USBホスト

Armadillo-IoT のUSBホストは、i.MX257 の UTMI-USB-PHY および USBOH(Universal Serial Bus OTG and Host) を利用しています。

Armadillo-IoT では、USB ホストインターフェース(ベースボード:CON7)の OTGポートのみを利用することができます。Hostポートは「3G」に示す HL8548 に接続されています。

機能

Universal Serial Bus Specification Revision 2.0 準拠
Enhanced Host Controller Interface (EHCI)準拠
転送レート(OTG): USB2.0 High-Speed (480Mbps), Full-Speed (12Mbps), Low-Speed (1.5Mbps)
転送レート(Host): USB2.0 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.8. リアルタイムクロック

Armadillo-IoT には、セイコーインスツル(SII)製 S-35390Aが搭載されています。 S-35390Aは、I2C-GPIO3 (I2Cノード: 3-0030) に接続されています。

機能

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

デバイスファイル

/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-s35390a.c
drivers/rtc/rtc-sysfs.c
drivers/rtc/systohc.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 ***
          <*>   Seiko Instruments S-35390A                                <RTC_DRV_S35390A>

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

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

[armadillo ~]# cat /proc/interrupts | grep rtc-s35390a 1
 95:          0  gpio-mxc  15  rtc-s35390a
[armadillo ~]# echo +60 > /sys/class/rtc/rtc0/wakealarm 2
[armadillo ~]# cat /sys/class/rtc/rtc0/wakealarm 3
1434522480
[armadillo ~]# cat /sys/class/rtc/rtc0/since_epoch 4
1434522481
[armadillo ~]# cat /proc/interrupts | grep rtc-s35390a 5
 95:          1  gpio-mxc  15  rtc-s35390a

1

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

2

アラーム割り込みの発生時刻を60秒後に設定します。秒単位は切り捨てられるため、アラーム発生時刻は厳密に60秒後とならない点に注意してください。

3

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

4

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

5

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

[注記]

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

[ティップ]

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

[armadillo ~]# date --date=@`cat /sys/class/rtc/rtc0/since_epoch`
Wed Jun 17 15:29:30 JST 2015

8.3.9. 温度センサ

Armadillo-IoT には、NXP セミコンダクターズ製 LM75B が搭載されています。

LM75B は、I2C-GPIO3 (I2C ノード: 3-0048) に接続されています。LM75B の OS(Overtemperature Shutdown output)信号は、GPIO(GPIOディレクトリ:/sys/class/gpio/TEMP_ALERT_N/)に接続されているため、事前に指定した温度を超えたかどうか確認することができます。

機能

分解能: 0.125℃
測定範囲: -55℃ 〜 +125℃

sysfsディレクトリ

/sys/class/i2c-adapter/i2c-3/3-0048/

関連するソースコード

drivers/hwmon/hwmon.c
drivers/hwmon/lm75.c

カーネルコンフィギュレーション
  Device Drivers  --->
      <*> Hardware Monitoring support  --->                                         <HWMON>
          <*>   National Semiconductor LM75 and compatibles                  <SENSORS_LM75>

8.3.10. ADコンバーター

Armadillo-IoT には Texas Instruments製 ADC081C021 が、Armadillo-IoT 絶縁デジタル入出力/アナログ入力アドオン モジュール DA00(以降、絶縁 IO アドオンモジュールと記載します) には、Microchip製 MCP3202 が搭載されています。

ADC081C021 は、I2C-GPIO3 (I2C ノード: 3-0054) に接続されています。ADC081C021 の ALERT 信号は、GPIOに接続されており、事前に指定した電圧を超えた場合、デバイスファイル /dev/iio:deviceN(Nは'0'からの連番)からイベントを受け取ることができます。 イベントの受け取り方法は、Atmark Distに含まれるvintriggerのソースコード vendors/AtmarkTechno/Armadillo-IoTG-Std/vintrigger/vintrigger.c を参照してください。

MCP3202 は、絶縁 IO アドオンモジュールをアドオンインターフェース(ベースボード:CON1)に接続した場合は SPI2 に、アドオンインターフェース(ベースボード:CON2)に接続した場合は SPI3 に接続されています。

機能(ADC081C021)

分解能: 8bit
測定範囲: 0V 〜 3.3V(ADC081C021の電源電圧)

機能(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/mcp320x.o
drivers/iio/adc/ti-adc081c.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  --->
                    <*> Microchip Technology MCP3x01/02/04/08                     <MCP320X>
                    <*> Texas Instruments ADC081C021/027                       <TI_ADC081C>
                Triggers - standalone  --->
                    <*> SYSFS trigger                                   <IIO_SYSFS_TRIGGER>

8.3.11. LED

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

Armadillo-410には、LED5が実装されています。 ベースボードには、LED2〜LED5が実装されています。 Linuxカーネルでは、Armadillo-410 に実装されたLEDを色の名前(yellow)と命名して区別しています。

sysfs LEDクラスディレクトリ

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

関連するソースコード

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-default-on.c
drivers/leds/trigger/ledtrig-heartbeat.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 Heartbeat Trigger                          <LEDS_TRIGGER_HEARTBEAT>
              <*>   LED Default ON Trigger                        <LEDS_TRIGGER_DEFAULT_ON>

8.3.12. ユーザースイッチ

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

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

表8.3 キーコード

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

ユーザースイッチを制御する GPIO接続用キーボードドライバは次の通りです。

表8.4 GPIO接続用キーボードドライバ

ユーザースイッチGPIO接続用キーボードドライバ
ベースボード:SW1gpio-keys
ベースボード:SW2gpio-keys-polled
ベースボード:SW3

[注記]

SW2 と SW3は、GPIO エクスパンダに接続されています。Armadillo-IoT では、GPIO エクスパンダの割り込み信号を利用していないため、イベント割り込みの対応が必須である gpio-keys を利用することができません。そのため、イベントをポーリングする gpio-keys-polled を利用しています。

デバイスファイル
ユーザースイッチデバイスファイル
ベースボード:SW1/dev/input/event0[a]
ベースボード:SW2/dev/input/event1[a]
ベースボード:SW3

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

関連するソースコード

drivers/input/evdev.c
drivers/input/ff-core.c
drivers/input/input-compat.c
drivers/input/input-core.c
drivers/input/input-mt.c
drivers/input/input-polldev.c
drivers/input/input.c
drivers/input/keyboard/gpio_keys.c
drivers/input/keyboard/gpio_keys_polled.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>
              <*>   Polled GPIO buttons                              <KEYBOARD_GPIO_POLLED>

8.3.13. I2C

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

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

表8.5 I2Cデバイス

I2CバスI2Cデバイス
アドレスデバイス名
0(I2C1)0x54MC34704マルチチャンネルパワーマネジメントIC
3(I2C-GPIO3)0x30 (0x31〜0x37も予約済み)S-35390Aリアルタイムクロック
0x48LM75B温度センサ
0x54ADC081C021コンバーター
0x71[a]PCA9538 GPIO エクスパンダ
4(I2C-GPIO4)0x50M24C01-W EEPROM[b]
0x51M24C01-W EEPROM[c]

[a] Armadillo-IoT ゲートウェイ スタンダードモデル(型番: AG40x-)を利用している場合は 0x70。

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

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


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

機能

最大転送レート: 400kbps (I2C1, I2C2, I2C3)

デバイスファイル

/dev/i2c-0 (I2C1)
/dev/i2c-3 (I2C-GPIO3)
/dev/i2c-4 (I2C-GPIO4)

関連するソースコード

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

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                              <ARCH_MXC>
            Freescale i.MX support  --->
          [*] Support Armadillo-IoTG Std Base board           <MACH_ARMADILLO_IOTG_STD>
          [ ]   Add-On Module Auto Detect                 <AIOTG_STD_ADDON_AUTO_DETECT> 1
                Extension I/F Options  --->
              [*] Enable I2C2 at CON1/CON2                             <AIOTG_STD_I2C2> 2
              [ ] Enable I2C3 at CON1_24/CON1_25            <AIOTG_STD_I2C3_CON1_24_25>
              [*]   Enable I2C3 at CON1_51/CON1_52          <AIOTG_STD_I2C3_CON1_51_52> 2
  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>

1

標準状態では有効化されています。

2

標準状態では無効化されています。

8.3.14. SPI

Armadillo-IoT のSPIインターフェースは、i.MX257 の CSPI(Configurable Serial Peripheral Interface)を利用します。

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

関連するソースコード

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

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                              <ARCH_MXC>
            Freescale i.MX support  --->
          [*] Support Armadillo-IoTG Std Base board           <MACH_ARMADILLO_IOTG_STD>
          [ ]   Add-On Module Auto Detect                 <AIOTG_STD_ADDON_AUTO_DETECT> 1
                Extension I/F Options  --->
              [*] Enable SPI2 at CON1                                  <AIOTG_STD_SPI2> 2
              [*]   Enable GPIO SPI2_SS0 at CON1                   <AIOTG_STD_SPI2_SS0> 2
              [ ]   Enable GPIO SPI2_SS1 at CON1                   <AIOTG_STD_SPI2_SS1>
              [*] Enable SPI3 at CON1/CON2                             <AIOTG_STD_SPI3> 2
              [*]   Enable GPIO SPI3_SS0 at CON1/CON2              <AIOTG_STD_SPI3_SS0> 2
              [ ]   Enable GPIO SPI3_SS1 at CON1/CON2              <AIOTG_STD_SPI3_SS1>
  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>

1

標準状態では有効化されています。

2

標準状態では無効化されています。

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

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

ウォッチドッグタイマーは、Hermit-Atブートローダーによって有効化されます。標準状態でタイムアウト時間は10秒に設定されます。Linuxカーネルでは、ウォッチドッグタイマードライバの初期化時に、このタイムアウト時間を上書きします。標準状態のタイムアウト時間は60秒です。カーネルタイマーを利用して定期的にウォッチドッグタイマーをキックします。

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

関連するソースコード

drivers/watchdog/imx2_wdt.c

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

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

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

8.3.16. PWM

Armadillo-IoT の PWM は、i.MX257 の PWM(Pulse-Width Modulator) を利用します。

Armadillo-IoT の標準状態では、PWM を利用することができません。PWM を利用するには、カーネルコンフィギュレーションしカーネルイメージを変更する必要があります。

関連するソースコード

drivers/pwm/core.c
drivers/pwm/pwm-imx.c
drivers/pwm/sysfs.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                              <ARCH_MXC>
            Freescale i.MX support  --->
                [*] Support Armadillo-IoTG Std Base board     <MACH_ARMADILLO_IOTG_STD>
                [ ]   Add-On Module Auto Detect           <AIOTG_STD_ADDON_AUTO_DETECT> 1
                    Extension I/F Options  --->
                    [*] Enable PWM1 at CON1_5/CON2_33                  <AIOTG_STD_PWM1> 2
                    [*] Enable PWM2 at CON1_24                         <AIOTG_STD_PWM2> 2
                    [*] Enable PWM3 at CON1_25                         <AIOTG_STD_PWM3> 2
                    [*] Enable PWM4 at CON1_3/CON2_24                  <AIOTG_STD_PWM4> 2
  Device Drivers  --->
      [*] Pulse-Width Modulation (PWM) Support  --->                              <PWM> 1
          <*>   i.MX PWM support                                              <PWM_IMX> 1

1

標準状態では有効化されています。

2

標準状態では無効化されています。



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

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