ブートパラメータは、Linux カーネルに与えるパラメータのことです。ブートパラメータを指定することでLinux カーネルのいくつかの動作を変更することができます。
工場出荷状態の Armadillo-IoT ゲートウェイ A6E の主要なブートパラメータを次に示します。
表12.1 Linuxカーネルの主要デフォルトブートパラメータ
ブートパラメータ | 値 | 説明 |
---|
コンソール | UART3 | 起動ログなどが出力されるイニシャルコンソールです。Device Treeで指定されます。 |
ルートファイルシステム | eMMCまたはmicroSDカード | 起動デバイスに応じて適切に設定されます。U-Bootで指定されます。 |
同一のブートパラメータ(例えばルートファイルシステム)が複数の場所から与えられた場合は、次の優先順位で上書きされます。
-
U-Boot環境変数の bootargs および optargs
-
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
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>
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
-
デバイスファイル
-
カーネルコンフィギュレーション
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>
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>
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に制限されます。 |
-
ネットワークデバイス
-
関連するソースコード
-
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を参照してください。 |
Armadillo-IoT ゲートウェイ A6E には、Laird Connectivity製 LWB5+ が搭載されています。LWB5+ のBTは「UART」に示す UART2に接続されています。
-
機能
,
デバイス
-
関連するソースコード
-
drivers/bluetooth/hci_bcm.c
-
カーネルコンフィギュレーション
[*] Networking support ---> <NET>
[*] Bluetooth subsystem support ---> <BT>
Bluetooth device drivers --->
[*] Broadcom protocol support <BT_HCIUART_BCM>
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
-
ネットワークデバイス
-
カーネルコンフィギュレーション
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>
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>
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>
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)を参照してください。
Armadillo-IoT ゲートウェイ A6E に搭載されているソフトウェア制御可能なLEDには、GPIOが接続されています。
Linuxでは、GPIO接続用LEDドライバ (leds-gpio) で制御することができます。
-
sysfs LEDクラスディレクトリ
-
/sys/class/leds/led1
-
/sys/class/leds/led2
-
/sys/class/leds/led3
-
関連するソースコード
-
Device Treeドキュメント
-
Documentation/devicetree/bindings/leds/leds-gpio.yaml
-
カーネルコンフィギュレーション
Device Drivers --->
[*] LED Support ---> <NEW_LEDS>
<*> LED Support for GPIO connected LEDs <LEDS_GPIO>
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>
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デバイスに対応するデバイスドライバを無効にする必要があります。
-
機能
-
デバイスファイル
-
/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>
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
-
デバイスファイル
-
sysfs 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>
Armadillo-IoT ゲートウェイ A6E のパワーマネジメント機能は、LinuxのSPM(System Power Management)およびDPM(Device Power Management)を利用しています。パワーマネジメント状態を省電力モードに遷移させることにより、Armadillo-IoT ゲートウェイ A6E の消費電力を抑えることができます。
パワーマネジメント状態を省電力モードに遷移させると、アプリケーションの実行は一時停止し、Linuxカーネルはサスペンド状態となります。起床要因が発生すると、Linuxカーネルのリジューム処理が行われた後、アプリケーションの実行を再開します。
-
sysfsファイル
-
関連するソースコード
-
カーネルコンフィギュレーション
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 受信
-
有効化
デフォルトで有効化されています