FAQ : Armadillo-500 FXでデフォルト以外のユーザランドを起動するとUSBが使えなくなる

対象製品: Armadillo-500 FX

Armadillo-500 FXでは、USBポートの初期化順番を固定するために、SSDで使用しているUSBポート以外はカーネル起動時に有効にならないようになっています。これらのポートは、SSDが有効になった後に、ユーザーランドで有効化しています。この有効化処理が入っていないユーザーランドイメージでは、USBポートが使えません。

以下のどちらかの方法で、USBポートを有効にすることができます。

  • /sys/devices/platform/fsl-ehci.[12]/delayed_probe に、「1」を書き込み、有効化する
  • カーネルの設定を変更して、全てのUSBポートが自動的に初期化されるように設定する

sysfs を使って USBポートを有効にする場合、起動スクリプトにその処理を追加すると便利です。カーネルの設定を変更する場合は、ポートの初期化順によって異なるデバイス番号が割り振られることがありますので、ご注意ください。

それぞれの方法について、以下で詳しく説明します。

初期化開始の処理を起動スクリプトに追加する

ユーザランドの起動スクリプトに以下の処理を追加するとSSD以外のUSBポートも初期化されるようになります。


if [ -f /sys/devices/platform/fsl-ehci.1/delayed_probe ]; then
  echo 1 > /sys/devices/platform/fsl-ehci.1/delayed_probe
fi
if [ -f /sys/devices/platform/fsl-ehci.2/delayed_probe ]; then
  echo 1 > /sys/devices/platform/fsl-ehci.2/delayed_probe
fi

カーネル設定変更する

Atmark Distのソースを一度ビルドした上で、make menuconfigを実行して設定画面を起動します。


[PC ~/atmark-dist]$ make menuconfig

カーネル設定画面、そしてその中のi.MX31のUSB設定画面に移動します。


Main Menu

Kernel/Library/Defaults Selection  --->
  [*] Customize Kernel Settings

Linux Kernel Configuration

Device Drivers  --->
  [*] USB support  --->
    <*>     EHCI HCD (USB 2.0) support
    [*]       Support for Freescale controller
    [*]         Support for Host1 port on Freescale controller
    [*]           Delay probe of Host1 port
    [*]         Support for Host2 port on Freescale controller
    [ ]           Delay probe of Host2 port
    [*]         Support for OTG host port on Freescale controller
    [*]           Delay probe of OTG port

"Delay probe of Host1 port" と "Delay probe of OTG port" を無効にします。


Device Drivers  --->
  [*] USB support  --->
    <*>     EHCI HCD (USB 2.0) support
    [*]       Support for Freescale controller
    [*]         Support for Host1 port on Freescale controller
    [ ]           Delay probe of Host1 port
    [*]         Support for Host2 port on Freescale controller
    [ ]           Delay probe of Host2 port
    [*]         Support for OTG host port on Freescale controller
    [ ]           Delay probe of OTG port

Armadillo-500 FX で、USBポートの初期化を遅らせている理由

USBデバイスは、個々のデバイスによって電源が投入されてからの初期化時間が異なります。このため、同時にUSBポートの初期化を行なうと、反応の早いデバイスから順にカーネルに通知が送られ、カーネルデバイスが登録されます。Armadillo-500 FX では、この登録順番によってデバイスの名前が決められるようになっています。

Armadillo-500 FX では、USB接続の SSD をルートファイルシステムとして使用するように設定されています。SSDをルートファイルシステムとして使用するには、

  • デバイスファイル名
  • パーティションに付けられている UUID
  • デバイスのメジャー/マイナー番号

のどれかを指定しなければいけません。メジャー/マイナー番号は、USBデバイスの登録順に決まっていきます。デバイスファイル名は、udevによって指定することができますが、使用している SSD と、外付することができるUSBメモリを完全に判別することができません。また、パーティションが持っている UUID も、フォーマットする度に異なる ID に変ってしまいます。そこで、Armadillo-500 FX では、SSDの初期化が必ず先になるように他のUSBポートの初期化をユーザランドまで遅らせるようにしています。

SSDをルートファイルシステムとして利用しない場合は、全てのUSBポートがカーネル起動時に初期化されるようにしても問題になることは少ないと思います。

カテゴリ: