第8章 Linuxカーネル仕様

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

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

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

armadillo-box-ws1_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-Box WS1 のLinuxカーネルの起動オプションについて説明します。デフォルト状態では、次のように設定されています。

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

起動オプション説明
console=ttymxc1,115200起動ログなどが出力されるイニシャルコンソールにttymxc1を、ボーレートに 115200bps を指定します。
root=/dev/ram0ルートファイルシステムにRAMディスクを指定します。

8.3. Linuxドライバ一覧

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

8.3.1. Armadillo-Box WS1

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

関連するソースコード

arch/arm/mach-imx/mach-armadillo-box-ws1.c

カーネルコンフィギュレーション
  System Type  --->
      [*] Freescale i.MX family                                                  <ARCH_MXC>
            Freescale i.MX support  --->
              *** MX25 platforms: ***
          [*] Support Armadillo-Box WS1 Base board                    <MACH_ARMADILLO_BOX_WS1>
                            :

8.3.2. フラッシュメモリ

Armadillo-Box WS1 では、フラッシュメモリを制御するソフトウェアとして 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-Box WS1 のシリアルは、i.MX257 の UART(Universal Asynchronous Receiver/Transmitter) を利用しています。

i.MX25 プロセッサは UART1 から UART5 までの 5 つの UART モジュールを内蔵しています。Armadillo-Box WS1 では、UART2をコンソールとして利用しています。

フォーマット

データビット長: 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

デバイスファイル
シリアルインターフェースデバイスファイル
UART2/dev/ttymxc1
UART3/dev/ttymxc2
カーネルコンフィギュレーション
  Device Drivers  --->
      Character devices  --->
          [*] Enable TTY                                                          <TTY>
              Serial drivers  --->
                  <*> IMX serial port support                              <SERIAL_IMX>
                  [*]   Console on IMX serial port                  <SERIAL_IMX_CONSOL>

8.3.4. Ethernet

Armadillo-Box WS1 の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. SDホスト

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

Armadillo-Box WS1 では、eSDHC1のみを利用することができます。

機能

カードタイプ: microSD/microSDHC/microSDXC
バス幅: 4bit
スピードモード: Default Speed(24MHz), High Speed(48MHz)
カードディテクトサポートなし
ライトプロテクトサポートなし

デバイスファイル

メモリカードの場合は、カードを認識した順番で/dev/mmcblkN (Nは'0'からの連番)となります。
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

カーネルコンフィギュレーション
  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>

8.3.6. USBホスト

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

Armadillo-Box WS1 では、USB ホストインターフェース下段のOTGポートおよびUSB ホストインターフェース上段のHOSTポートを利用することができます。

機能

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'からの連番)となります。

関連するソースコード

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

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

[警告]

RTCには、linux-3.14-at4以降のカーネルで対応しています。

デバイスファイル

/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>
[警告]

Armadillo-Box WS1のハードウェアは、S-35390Aが持つアラーム割り込み機能をサポートしていません。

[ティップ]

Armadillo-Box WS1にRTCが搭載されていない場合、起動ログに以下のようなエラーが出ます。

rtc-s35390a 1-0030: error resetting chip
rtc-s35390a: probe of 1-0030 failed with error -5

このエラーはカーネルコンフィギュレーションでS-35390Aのドライバを無効化する事で抑制できます。

  Device Drivers  --->
      <*> Real Time Clock  --->
                *** I2C RTC drivers ***
          < >   Seiko Instruments S-35390A           無効化

8.3.8. LED

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

Linuxカーネルでは、実装されたLEDを色の名前を命名して区別しています。

LEDクラスディレクトリとLEDの対応については、表6.5「LEDクラスディレクトリとLEDの対応」を参照してください。

sysfs LEDクラスディレクトリ

/sys/class/leds/red
/sys/class/leds/green
/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.9. ユーザースイッチ

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

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

表8.3 キーコード

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

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

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

ユーザースイッチGPIO接続用キーボードドライバ
SW1gpio-keys

デバイスファイル
ユーザースイッチデバイスファイル
SW1/dev/input/event0[a]

[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>
          -*-   Matrix keymap support library                            <INPUT_MATRIXKMAP>
                *** Userland interfaces ***
          <*>   Event interface                                               <INPUT_EVDEV>
                *** Input Device Drivers ***
          [*]   Keyboards  --->                                            <INPUT_KEYBOARD>
              <*>   GPIO Buttons                                            <KEYBOARD_GPIO>
              <*>   IMX keypad support                                       <KEYBOARD_IMX>

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

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

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

カーネルが上書きするウォッチドックタイマーのタイムアウト時間は、カーネルバージョンによって異なります。標準のタイムアウト時間は次の通りです。

表8.5 ウォッチドッグタイマーのタイムアウト時間

カーネルバージョンタイムアウト時間
linux-3.14-at3以前60秒
linux-3.14-at4以降10秒

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

関連するソースコード

drivers/watchdog/imx2_wdt.c

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

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

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