Linuxカーネル仕様

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

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

工場出荷時の Armadillo-IoT ゲートウェイ A6E に書き込まれている Linuxカーネルは、デフォルトコンフィギュレーションが適用されています。 デフォルトコンフィギュレーションが記載されているファイルは、Linuxカーネルソースファイル (linux-v5.10-at[VERSION].tar.gz)に含まれる +arch/arm/configs/armadillo-iotg-a6e_defconfig です。

12.2. ブートパラメータ

ブートパラメータは、Linux カーネルに与えるパラメータのことです。ブートパラメータを指定することでLinux カーネルのいくつかの動作を変更することができます。 工場出荷状態の Armadillo-IoT ゲートウェイ A6E の主要なブートパラメータを次に示します。

表12.1 Linuxカーネルの主要デフォルトブートパラメータ

ブートパラメータ説明

コンソール

UART3

起動ログなどが出力されるイニシャルコンソールです。Device Treeで指定されます。

ルートファイルシステム

eMMCまたはmicroSDカード

起動デバイスに応じて適切に設定されます。U-Bootで指定されます。


同一のブートパラメータ(例えばルートファイルシステム)が複数の場所から与えられた場合は、次の優先順位で上書きされます。

  1. U-Boot環境変数の bootargs および optargs
  2. Device Tree の chosen ノード内の bootargs および stdout-path

異なるブートパラメータが複数の場所から与えられた場合はマージされます。 また、U-BootおよびDevice Treeから一切のブートパラメータが与えられない場合は、次がブートパラメータとして利用されます。

  • Linuxカーネルコンフィギュレーションの CONFIG_CMDLINE

現在起動中のLinuxカーネルのブートパラメータを確認するには、以下コマンドを実行します。

[armadillo]# cat /proc/cmdline
root=/dev/mmcblk0p2 rootwait
[armadillo]# cat /proc/device-tree/chosen/stdout-path
/soc/bus@2000000/spba-bus@2000000/serial@2020000

12.3. Linuxドライバ一覧

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

12.3.1. Armadillo-IoT ゲートウェイ A6E

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

関連するソースコード
  • arch/arm/mach-imx/
  • arch/arm/boot/dts/armadillo-iotg-a6e.dts
  • arch/arm/boot/dts/armadillo-610.dtsi
  • arch/arm/boot/dts/imx6ull.dtsi
  • arch/arm/boot/dts/imx6ul.dtsi
カーネルコンフィギュレーション
System Type --->
  [*] Freescale i.MX family  --->                                 <ARCH_MXC>
    [*]   i.MX6 UltraLite support                               <SOC_IMX6UL>

12.3.2. UART

Armadillo-IoT ゲートウェイ A6E のシリアルは、i.MX6ULLのUART (Universal Asynchronous Receiver/Transmitter) を利用しています。Armadillo-IoT ゲートウェイ A6E の標準状態では、UART3 (CON7) を利用しています。

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

UART3(CON7)は4Mbpsで利用することができません。USBシリアル変換IC(CP2102N/Silicon Labs)の最大ボーレートが3Mbpsである為です。

関連するソースコード
  • drivers/tty/serial/imx.c
  • drivers/tty/serial/imx_earlycon.c
Device Treeドキュメント
  • Documentation/devicetree/bindings/serial/fsl-imx-uart.yaml
デバイスファイル
シリアルインターフェース デバイスファイル

UART2

/dev/ttymxc1 (LWB5+)

UART3

/dev/ttymxc2 (UART3)

UART4

/dev/ttymxc3 (EMS31-J)

UART5

/dev/ttymxc4 (RS485)

カーネルコンフィギュレーション
Device Drivers  --->
  Character devices  --->
    [*] Enable TTY                                            <TTY>
        Serial drivers  --->
          <*> IMX serial port support                  <SERIAL_IMX>
          <*>   Console on IMX serial port     <SERIAL_IMX_CONSOLE>
          [*] Earlycon on IMX serial port     <SERIAL_IMX_EARLYCON>

12.3.3. LTE

Armadillo-IoT ゲートウェイ A6E には、Quectel製 EMS31-J が搭載されています。EMS31-J は、「USBホスト」に示す OTG2 に接続されています。

デバイス
  • /dev/ttyUSB0
  • /dev/ttyUSB1
  • /dev/ttyUSB2

    • ModemManager が /dev/ttyCommModem のシンボリックリンクを作成し AT コマンド用ポートとして使用します。
  • /dev/ttyUSB3
  • /dev/ttymxc3
関連するソースコード
  • drivers/reset/reset-ec25.c
  • drivers/net/ppp/ppp_generic.c
  • drivers/net/ppp/ppp_async.c
カーネルコンフィギュレーション
Device Drivers  --->
  [*] Network device support  --->                     <NETDEVICES>
     [*]   PPP (point-to-point protocol) support       <PPP>
     [*]     PPP support for async serial ports        <PPP_ASYNC>
  -*- Reset Controller Support  --->                   <RESET_CONTROLLER>
     [*]   GPIO-based Reset Driver for Tales EMS31     <RESET_EMS31>

12.3.4. WLAN

Armadillo-IoT ゲートウェイ A6E には、Laird Connectivity製 LWB5+ が搭載されています。LWB5+ のWLANは「SDホスト」に示す uSDHC2 に接続されています。

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

LWB5+の最大通信速度は 433.3Mbps(802.11ac, 1x1 SISO, HT80, MCS9, SGI) ですが、「SDホスト」に接続される為、49.5Mbpsに制限されます。

ネットワークデバイス
  • wlan0
関連するソースコード
  • drivers/net/wireless/broadcom/brcm80211/brcmfmac/*
カーネルコンフィギュレーション
Device Drivers  --->
  [*] Network device support  --->                     <NETDEVICES>
    [*]   Wireless LAN  --->                                 <WLAN>
      [*]   Broadcom devices                 <WLAN_VENDOR_BROADCOM>
      [*]     Broadcom FullMAC WLAN driver               <BRCMFMAC>
      [*]     SDIO bus interface support for FullMAC driver
                                                    <BRCMFMAC_SDIO>
[ティップ]

LWB5+ のファームウェアは、ATDEにインストールされているfirmware-brcm80211パッケージに含まれています。ファームウェアはLinuxカーネルイメージ内に改変無く配置されます。 firmware-ti-connectivityの著作権およびライセンス情報については、ATDE上で/usr/share/doc/firmware-brcm80211/copyrightを参照してください。

12.3.5. BT

Armadillo-IoT ゲートウェイ A6E には、Laird Connectivity製 LWB5+ が搭載されています。LWB5+ のBTは「UART」に示す UART2に接続されています。

機能 , デバイス
  • hci0
関連するソースコード
  • drivers/bluetooth/hci_bcm.c
カーネルコンフィギュレーション
[*] Networking support  --->                                  <NET>
  [*]   Bluetooth subsystem support  --->                      <BT>
    Bluetooth device drivers  --->
      [*] Broadcom protocol support                <BT_HCIUART_BCM>

12.3.6. Ethernet

Armadillo-IoT ゲートウェイ A6E の Ethernet (LAN) は、i.MX6ULLのENET(10/100-Mbps Ethernet MAC)を利用しています。

機能
  • 通信速度: 100Mbps (100BASE-TX), 10Mbps (10BASE-T)
  • 通信モード: Full-Duplex (全二重), Half-Duplex (半二重)
  • Auto Negotiationサポート
  • キャリア検知サポート
  • リンク検出サポート
関連するソースコード
  • drivers/net/ethernet/freescale/fec_main.c
  • drivers/net/phy/smsc.c
  • drivers/net/mdio/of_mdio.c
Device Treeドキュメント
  • Documentation/devicetree/bindings/net/fsl-fec.txt
  • Documentation/devicetree/bindings/net/smsc-lan87xx.txt
  • Documentation/devicetree/bindings/net/net/ethernet-phy.yaml
ネットワークデバイス
  • 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>
      [*]   SMSC PHYs                                    <SMSC_PHY>

12.3.7. SDホスト

Armadillo-IoT ゲートウェイ A6E のSDホストは、i.MX6ULL の uSDHC (Ultra Secured Digital Host Controller) を利用しています。 Armadillo-IoT ゲートウェイ A6E では、LWB5+と SDインターフェース(Armadillo-610: CON1) がuSDHC2を共用しています。そのため、どちらか一方しか利用することができません。 Armadillo-IoT ゲートウェイ A6E の標準状態では、LWB5+が有効になっています。

機能
  • カードタイプ: SD/SDHC/SDXC/SDIO
  • バス幅: 1bit or 4bit
  • スピードモード: Default Speed (24.75MHz), High Speed (49.5MHz)
  • カードディテクトサポート
デバイスファイル
  • /dev/mmcblk1 (SDインターフェース)
関連するソースコード
  • drivers/mmc/host/sdhci-esdhc-imx.c
  • drivers/mmc/host/sdhci-of-esdhc.c
Device Treeドキュメント
  • Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.yaml
  • Documentation/devicetree/bindings/mmc/mmc-controller.yaml
カーネルコンフィギュレーション
Device Drivers  --->
  <*> MMC/SD/SDIO card support  --->                          <MMC>
    <*>   MMC block device driver                       <MMC_BLOCK>
    (32)    Number of minors per block device    <MMC_BLOCK_MINORS>
          *** MMC/SD/SDIO Host Controller Drivers ***
    <*>   Secure Digital Host Controller Interface support
                                                        <MMC_SDHCI>
    <*>     SDHCI platform and OF driver helper   <MMC_SDHCI_PLTFM>
    <*>       SDHCI OF support for the Freescale eSDHC controller
                                               <MMC_SDHCI_OF_ESDHC>
    <*>       SDHCI support for the Freescale eSDHC/uSDHC i.MX controller support
                                              <MMC_SDHCI_ESDHC_IMX>

12.3.8. USBホスト

Armadillo-IoT ゲートウェイ A6E のUSBホストは、i.MX6ULLのUSB-PHY (Universal Serial Bus 2.0 Integrated PHY) および USB (Universal Serial Bus Controller) を利用しています。Armadillo-IoT ゲートウェイ A6E では、USB ホストインターフェース(CON9) が OTG1を利用しています。OTG2はEMS31-Jに接続されています。

機能
  • 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/
  • drivers/usb/phy/phy-mxs-usb.c
Device Treeドキュメント
  • Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt
  • Documentation/devicetree/bindings/phy/mxs-usb-phy.txt
カーネルコンフィギュレーション
Device Drivers  --->
  [*] USB support  --->                               <USB_SUPPORT>
          *** USB Host Controller Drivers ***
    [*]   EHCI HCD (USB 2.0) support                 <USB_EHCI_HCD>
    [*]     Support for Freescale i.MX on-chip EHCI USB controller
                                                     <USB_EHCI_MXC>
    [*]   ChipIdea Highspeed Dual Role Controller    <USB_CHIPIDEA>
    [*]     ChipIdea host controller            <USB_CHIPIDEA_HOST>
          USB Physical Layer drivers  --->
      [*] Freescale MXS USB PHY support               <USB_MXS_PHY>

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

Armadillo-IoT ゲートウェイ A6E のリアルタイムクロックは、Micro Crystal製 RV-8803-C7 が搭載されておりこれを利用しています。 RV-8803-C7 は、「I2C」に示す I2C2 に接続されています。 i.MX6ULL の RTC 機能も存在します。

機能
  • アラーム割り込みサポート
デバイスファイル
  • /dev/rtc ( /dev/rtc0 へのシンボリックリンク)
  • /dev/rtc0 (RV-8803-C7)
  • /dev/rtc1 (i.MX6ULL SNVS_HP Real Time Counter)
[ティップ]

RTCが /dev/rtc0 となるよう、Device Treeでエイリアスを設定しています。そのため、i.MX6ULLのRTC機能は /dev/rtc1 となります。 エイリアスの設定は、 arch/arm/boot/dts/armadillo-iotg-a6e.dts で行っています。

関連するソースコード
  • drivers/rtc/rtc-rv8803.c
  • drivers/rtc/rtc-snvs.c
カーネルコンフィギュレーション
Device Drivers --->
  [*] Real Time Clock  --->                             <RTC_CLASS>
    (rtc0)  RTC used to synchronize NTP adjustment
                                               <RTC_SYSTOHC_DEVICE>
    <*>   Micro Crystal RV8803, Epson RX8900       <RTC_DRV_RV8803>
    <*>   Freescale SNVS RTC support                 <RTC_DRV_SNVS>

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

12.3.10. LED

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

sysfs LEDクラスディレクトリ
  • /sys/class/leds/led1
  • /sys/class/leds/led2
  • /sys/class/leds/led3
関連するソースコード
  • drivers/leds/leds-gpio.c
Device Treeドキュメント
  • Documentation/devicetree/bindings/leds/leds-gpio.yaml
カーネルコンフィギュレーション
Device Drivers  --->
  [*] LED Support  --->                                  <NEW_LEDS>
    <*>   LED Support for GPIO connected LEDs           <LEDS_GPIO>

12.3.11. ユーザースイッチとイベント信号

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

表12.2 キーコード

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

SW1

KEY_ENTER

28

EMS31-J RING0

KEY_WAKEUP

143


デバイスファイル
  • /dev/input/by-path/platform-gpio-keys-event
関連するソースコード
  • drivers/input/keyboard/gpio_keys.c
Device Treeドキュメント
  • Documentation/devicetree/bindings/input/gpio-keys.yaml
カーネルコンフィギュレーション
Device Drivers  --->
  Input device support  --->
    -*- Generic input layer (needed for keyboard, mouse, ...)
                                                            <INPUT>
      [*]   Keyboards  --->                        <INPUT_KEYBOARD>
      <*>   GPIO Buttons                            <KEYBOARD_GPIO>

12.3.12. I2C

Armadillo-IoT ゲートウェイ A6E の I2C インターフェースは、i.MX6ULL の I2C(I2C Controller) を利用します。また、i2c-gpioを利用することで、I2C バスを追加することができます。 Armadillo-IoT ゲートウェイ A6E で利用している I2C バスと、接続される I2C デバイスを次に示します。

表12.3 I2C デバイス

I2C バス

I2C デバイス

アドレス

デバイス名

0(I2C1)

0x08

PF3000 (PMIC)

1(I2C2)

0x20

TCA9534 (GPIOエキスパンダー)

0x32

RV8803 (RTC)

0x48

SE050(セキュアエレメント)


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

機能
  • 最大転送レート: 400kbps
デバイスファイル
  • /dev/i2c-0 (I2C1)
  • /dev/i2c-1 (I2C2)
  • /dev/i2c-2 (I2C3)
関連するソースコード
  • drivers/i2c/busses/i2c-imx.c
Device Tree ドキュメント
  • Documentation/devicetree/bindings/i2c/i2c-imx.yaml
カーネルコンフィギュレーション
Device Drivers  --->
  I2C support  --->
    -*- I2C support                                            <I2C>
      <*>   I2C device interface                       <I2C_CHARDEV>
      I2C Hardware Bus support  --->
        <*> IMX I2C interface                              <I2C_IMX>

12.3.13. GPIO

Armadillo-IoT ゲートウェイ A6E のGPIOは、i.MX6ULL の GPIO(General Purpose Input/Output)および、Texas Instruments製TCA9534(GPIOエキスパンダー)を利用しています。

関連するソースコード
  • drivers/gpio/gpio-mxc.c
  • drivers/gpio/gpio-pca953x.c
Device Tree ドキュメント
  • Documentation/devicetree/bindings/gpio/fsl-imx-gpio.yaml
  • Documentation/devicetree/bindings/gpio/gpio-pca95xx.yaml
デバイスファイル
デバイスファイル GPIO番号

/dev/gpiochip0

0〜31(GPIO1_IO00〜GPIO1_IO31)

/dev/gpiochip1

32〜53(GPIO2_IO00〜GPIO2_IO21)

/dev/gpiochip2

64〜92(GPIO3_IO00〜GPIO3_IO28)

/dev/gpiochip3

96〜124(GPIO4_IO00〜GPIO4_IO28)

/dev/gpiochip4

128〜139(GPIO5_IO00〜GPIO5_IO11)

/dev/gpiochip5

504〜511 [a] (TCA9534)

[a] GPIOエキスパンダーを追加した場合は、番号が異なる可能性があります。

sysfs GPIOクラスディレクトリ
  • /sys/class/gpio/
[ティップ]

sysfs GPIOクラスは旧バージョンのLinuxカーネルとの互換性維持の為に残っています。新しくアプリケーションを開発する際の利用はおすすめしません。 新しくアプリケーションを開発する場合は、libgpiodパッケージに含まれるアプリケーションまたはLinux カーネルのソースコードに含まれているサンプル(tools/gpio/)を参考にしてください。

カーネルコンフィギュレーション
Device Drivers  --->
  [*] GPIO Support  --->                                   <GPIOLIB>
    (512) Maximum number of GPIOs for fast path
                                            <GPIOLIB_FASTPATH_LIMIT>
    I2C GPIO expanders  --->
       [*] PCA95[357]x, PCA9698, TCA64xx, and MAX7310 I/O ports
                                                      <GPIO_PCA953X>
       [*]   Interrupt controller support for PCA953x
                                                  <GPIO_PCA953X_IRQ>
    Memory mapped GPIO drivers  --->
      -*- i.MX GPIO support                               <GPIO_MXC>

12.3.14. パワーマネジメント

Armadillo-IoT ゲートウェイ A6E のパワーマネジメント機能は、LinuxのSPM(System Power Management)およびDPM(Device Power Management)を利用しています。パワーマネジメント状態を省電力モードに遷移させることにより、Armadillo-IoT ゲートウェイ A6E の消費電力を抑えることができます。 パワーマネジメント状態を省電力モードに遷移させると、アプリケーションの実行は一時停止し、Linuxカーネルはサスペンド状態となります。起床要因が発生すると、Linuxカーネルのリジューム処理が行われた後、アプリケーションの実行を再開します。

sysfsファイル
  • /sys/power/state
関連するソースコード
  • kernel/power/
カーネルコンフィギュレーション
Power management options  --->
  [*] Suspend to RAM and standby                          <SUSPEND>
  -*- Device power management core functionality               <PM>

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

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

パワーマネジメント状態 文字列 説明

Suspend-to-RAM

mem

Suspend-to-Idleよりも消費電力を抑えることができる

Suspend-to-Idle

freeze

suspend-to-ramよりも短時間で復帰することができる


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

UART3(CON7)
起床要因
データ受信
有効化
[armadillo ~]# echo enabled > /sys/class/tty/ttymxc2/power/wakeup
RS485(UART5)
起床要因
データ受信
有効化
[armadillo ~]# echo enabled > /sys/class/tty/ttymxc4/power/wakeup
USB ホストインターフェース(CON9)
起床要因
USBデバイスの挿抜
有効化
[armadillo ~]# echo enabled > /sys/devices/platform/soc@0/2184000.usb/power/wakeup
[armadillo ~]# echo enabled > /sys/bus/usb/devices/usb1/power/wakeup
RTC(i.MX6ULL)
起床要因
アラーム割り込み
有効化
[armadillo ~]# echo enabled > /sys/bus/platform/devices/20cc000.snvs\:snvs-rtc-lp/power/wakeup
RTC(RV8803)
起床要因
アラーム割り込み
有効化
[armadillo ~]# echo enabled > /sys/bus/i2c/devices/1-0032/power/wakeup
EMS31-J RING0 (Ring Indicator)
起床要因
SMS 受信
有効化
デフォルトで有効化されています