インテル Galileo 開発ボードでWi-Fi/BTを適法に使用する方法の実践

2014年5月25日追記

このメモで紹介している方法は、日本国の電波法に抵触する可能性があることがわかりました。詳しくは“Ralinkチップ搭載無線LANアダプターはLinuxで使用すべきでない”を参照ください。

1. はじめに

以前に“インテル Galileo 開発ボードでWi-Fi/BTを適法に使用する方法の考察”というメモにおいて、インテル Galileo 開発ボードにおいて、適法にWi-FiおよびBluetoothを使用する方法を検討しました。そのまとめの最後に、

(ドライバーを別途導入するなども考慮するとして)あるいは汎用のUSB接続で使える一般製品を検討するというのも手なのかもしれません。

と書いた部分を実践してみよう、というのが今回のメモの趣旨です。

なお、このメモは“Intel Quark BSPをインテル Galileo 開発ボードで使う方法”をベースとしていますので、不明な点は同メモを参照ください。

2. 目次

  • 1. はじめに
  • 2. 目次
  • 3. 用語について
  • 4. 必要なもの
  • 5. 無線LAN(Wi-Fi)の使用
  • 6. Bluetoothの使用
  • 7. 無線LAN(Wi-Fi)とBluetoothを両方同時に使用する
  • 8. まとめ
  • 3. 用語について

    • 「Intel Quark SoC X1000シリーズ」を「Quark」と省略します。
    • 「Intel Quark Board Support Package(BSP) Release 1.0.0」を「BSP」と省略します。
    • 「Intel Quark SoC X1000 Board Support Package (BSP) Build and Software User Guide」および私が日本語に意訳した“Intel Quark SoC X1000 BSP Rel 1.0.0 ビルド&ソフトウェア ユーザーガイド”を「BSPガイド」と省略します。
    • 「インテル Galileo 開発ボード」を「Galileo」あるいは「Galileoボード」と省略します。

    4. 必要なもの

    以下のものが必要です:

    • BSPを適用済みのインテル Galileo 開発ボードと同ボード用ACアダプター
    • パソコン(RAM多め、CPU多め、ストレージ速めで100GB以上の空き容量を推奨)※1
    • 高速なInternet接続環境※2
    • 64ビット版のDebian Linux 7.4を動作させる環境(仮想マシン可)※3
    • 32GBまでのmicroSDメモリーカード※4
    • microSDメモリーカードに書き込むことができるアダプター※5
    • インテル Galileo 開発ボードの3.5ミリメートル・ミニジャックに接続するためのシリアル変換ケーブルあるいは専用USBケーブル※6
    • シリアルでのアクセスに対応したTera Termのような端末エミュレーター
    • 拡張子.7zを展開できる、7-Zipのようなファイル・アーカイバー
    • WinSCPなどのSCPでファイルを転送するソフトウェア

    5. 無線LAN(Wi-Fi)の使用

    実際にUSB接続の無線LAN(Wi-Fi)アダプターをGalileoボードで使用してみます。

    5-1. 対象としたUSB接続のWi-Fiデバイス

    どれを対象にしようかと思ったのですが、とりあえずLinuxで接続実績があって安価な現行製品ということで今回選定したのが、株式会社バッファローWLI-UC-GNM4981254668078)です:

    無線LAN(Wi-Fi)アダプター(WLI-UC-GNM)

    ちなみに価格は800円くらいでした。

    また、これをGalileoボードに接続するために、Micro USB Type-B Plug⇔Standard USB Type-A Receptacleの接続を行うためのケーブルとして株式会社アイネックスUSB-1134937925917815)を使用します:

    Micro USB Type-B Plug⇔Standard USB Type-A Receptacle変換ケーブル(USB-113)

    こちらの価格は400円くらいでした。

    5-2. WLI-UC-GNMの素性

    チップとしてはRalink Technology Corp(現・MediaTek Inc※7)のRT2800あるいはRT8070/RT8070Vを使用しているそうです。いずれもRT2800のドライバーで動作するとの情報があります。

    USBデバイスのベンダーIDは0411、プロダクトIDは01a2固定で、Galileoボード用のLinuxディストリビューションが採用しているLinux Kernel 3.8.7のソースコードを検索してみたところ、これらのデバイスに対応する登録が行われており、カーネル・コンフィギュレーションを変更してビルドすれば認識しそうだということがわかります。

    参考ページカーネルとユーザランドの設定 (無線LANドライバ編)OpenRTM-aist

    5-3. ビルドの方針

    以下のようにビルドの設定を変更してビルドを試みることにします:

    • Galileoボードの標準LinuxディストリビューションにWLI-UC-GNMの搭載チップであるRT2800などの関連チップのソースコードを有効化し、モジュール(Kernel Object)にできるものはモジュールに、カーネル組み込みのみが可能なものはカーネル組み込みとします。
    • これらのモジュールがGalileoボードの起動時に読み込まれるようにします。
    • これらとは別に各チップ用のファームウェアをディストリビューションに加える必要があるので、これも組み込まれるように設定します。

    5-4. 設定変更とビルド

    ここでの作業はDebian Linux 7.4上で行います。ローカルにログインしての作業でも、sshでのリモートでの作業でも問題なく実施することができます。これらの作業を行うごとに必ず新しいターミナル・セッションを開いて作業を行う必要があります。

    関連情報インテル Galileo 開発ボードの外部メモリー用のビルドから起動まで

    5-4-1. 準備

    まず、基本となるディストリビューションの元となるパッケージを展開します:

    tar -zxvf meta-clanton_v1.0.0.tar.gz

    このパッケージは小さなLinuxディストリビューションを作る際に使用するものと同一のため、ここでRalink Techonologyのチップ用ドライバーを含む標準Linuxディストリビューション用であることがわかりやすいようにディレクトリー名を変更します※8

    mv meta-clanton_v1.0.0 meta-clanton_v1.0.0-ralink

    カレント・ディレクトリーをパッケージを展開したディレクトリーに切り替えます:

    cd meta-clanton_v1.0.0-ralink

    続いてYoctoのビルドツールなどの取得を行います:

    ./setup.sh

    これでディストリビューションのビルドを開始するために必要なファイルが揃いました。ビルドを開始するために環境を専用のものに切り替えます:

    source poky/oe-init-build-env yocto_build

    5-4-2. BSPに含まれる設定の変更

    • Galileoボードの起動時にRT2800 USBモジュールを読み込むように設定を変更します。変更対象は「../meta-clanton-bsp/recipes-kernel/quark-init/files/galileo.conf」ファイルで、最終行に「rt2800usb」を追加します(表記後の改行不要)。
    • 標準LinuxディストリビューションにRalink Technology製品のファームウェアを含めるように設定を変更します。変更対象は「../meta-clanton-distro/recipes-core/images/image-full.bb」ファイルで、36行目(IntelのWi-Fi定義の直後)に「IMAGE_INSTALL += "linux-firmware-ralink"」を挿入します。

    5-4-3. カーネル・コンフィギュレーションの変更

    • 初期状態ではLinuxカーネルを、まだ未取得かつ未展開状態です。ですので、まずはカーネル・コンフィギュレーションを行う直前までビルドを進めるために以下のコマンドを実行します※9
      bitbake linux-yocto-clanton -c configure

      プロンプトに戻るまでしばらく待ちます。※10

    • Linuxカーネル・コンフィギュレーションを変更してRalink TechnologyのUSB用RTシリーズのモジュールが有効になるように設定を変更します。変更対象は「./tmp/work/clanton-poky-linux-uclibc/linux-yocto-clanton/3.8-r0/linux-clanton-standard-build/.config」ファイルです。まず1129行目の「# CONFIG_RT2X00 is not set」という行を削除します。続いてファイルの適当な位置に以下の内容を挿入します:
      CONFIG_RT2X00=m
      # CONFIG_RT2400PCI is not set
      # CONFIG_RT2500PCI is not set
      # CONFIG_RT61PCI is not set
      # CONFIG_RT2800PCI is not set
      # CONFIG_RT2500USB is not set
      # CONFIG_RT73USB is not set
      CONFIG_RT2800USB=m
      CONFIG_RT2800USB_RT33XX=y
      CONFIG_RT2800USB_RT35XX=y
      CONFIG_RT2800USB_RT53XX=y
      CONFIG_RT2800USB_UNKNOWN=y
      CONFIG_RT2800_LIB=m
      CONFIG_RT2X00_LIB_USB=m
      CONFIG_RT2X00_LIB=m
      CONFIG_RT2X00_LIB_FIRMWARE=y
      CONFIG_RT2X00_LIB_CRYPTO=y
      CONFIG_RT2X00_LIB_LEDS=y
      # CONFIG_RT2X00_DEBUG is not set

    5-4-4. Linuxディストリビューションのビルド

    続けて標準Linuxディストリビューションとしての全体のビルドを行うために以下のコマンドを実行します:

    bitbake image-full-galileo

    このビルドが終了するまで待ちます。なお、v4l-utils-0.8.8-r2パッケージのdo_configureでエラーが出てビルドが中断することがあります。この場合には再度上記のコマンドでビルドを再開することでビルドを最後まで行うことができます。エラーが出る原因ははっきりしませんが、カーネルを先にコンフィギュレーションまで進めた関係で、依存関係に何らかの問題が発生しているのでしょう。

    5-5. Galileoボードでビルドした標準Linuxディストリビューションを起動する

    5-5-1. microSDメモリーカードへの書き込み

    これまでの作業で./meta-clanton_v1.0.0-ralink/yocto_build/tmp/deploy/images/に作成された以下のファイルをmicroSDメモリーカードのルート・ディレクトリーへ書き込みます:

    image-full-clanton.ext3
    core-image-minimal-initramfs-clanton.cpio.gz
    bzImage
    grub.efi
    boot (ディレクトリー)

    一部はシンボリック・リンクですが、microSDメモリーカードへ書き込む際には実体ファイルになるようにします。※11なお、一部のInternet上の情報ではgrub.confの書き換えが必要だとする情報がありますが、grub.conf内の「$EARLY_CON_ADDR_REPLACE」はBSPによる新しいファームウェア内のGRUBが適切な値に読み替えるため手を加える必要はありません※12

    5-5-2. microSDメモリーカードをGalileoボードに挿して起動

    Galileoボードの電源が切れていることを確認し、その状態でmicroSDメモリーカードをGalileoボードに差し込みます。そしてGalileoボードを通電して起動します。しばらくするとUEFIからGRUBへ制御が移り、microSDメモリーカード上のGRUB設定を読み取ってメニューを表示し、1秒経過後にmicroSDメモリーカード上の標準Linuxディストリビューションが起動します。

    microSDメモリーカードへ書き込んだ標準Linuxディストリビューションの初回起動時には少々時間がかかります。これは初回起動時に暗号化キーを作成するSSHコンポーネントによるもので、異常ではありません。次回以降は普通の速度で起動します。

    正常に起動しない場合は、Galileoボードに“Intel Quark BSPをインテル Galileo 開発ボードで使う方法”の“6. インテル Galileo 開発ボード内蔵用のビルドから起動まで”の手順のとおりに作成したシステム・イメージをGalileoボードに書き込み済みであることを確認してみましょう。このビルドによるシステム・イメージにファームウェアを置き換えていないと正常にブートできません。

    5-6. 無線LANの設定

    ビルドしたシステム・イメージで起動したGalileoボードにrootユーザーでログインして無線LANの設定を行います。ログインの方法はシリアル・ケーブル経由、ssh経由、telnet経由など、どの方法でもかまいませんが、シリアル・ケーブル経由ではない接続では「[~] system message」に代表されるようなシステム・メッセージは出力されません。本メモではシリアル・ケーブルで接続したログを掲載しています。

    5-6-1. SSIDとパスフレーズの設定

    以下のようにコマンドを実行してアクセス・ポイントのSSIDとパスフレーズを設定します:

    wpa_passphrase SSID パスフレーズ > /etc/wpa_supplicant.conf

    ※上記のうち「SSID」には使用しているアクセス・ポイントのSSIDを、「パスフレーズ」にはアクセス・ポイントのパスフレーズにそれぞれ置き換えて実行します:

    5-6-2. 通信方式の設定

    作成した/etc/wpa_supplicant.confファイルを編集して、通信方式などの必要な設定を行います。これによって以下のようなファイルの内容となります※13

    ctrl_interface=/var/run/wpa_supplicant
    ctrl_interface_group=0
    update_config=1
    
    network={
            proto=RSN
            key_mgmt=WPA-PSK
            pairwise=CCMP
            group=CCMP
            ssid="XXXXXXXXXXXXXX"
            #psk="YYYYYYYYYYYYYY"
            psk=0000000000000000000000000000000000000000000000000000000000000000
    }

    太字強調の部分が追記した部分です。

    ctrl_interfacectrl_interface_groupupdate_configはデフォルト通りということでこの値にしています。必要に応じて変更してください。

    protokey_mgmtpairwisegroupは使用する認証方式および暗号方式に合わせて以下のように設定します:

    認証方式 暗号方式 proto key_mgmt pairwise group
    WPA-PSK TKIP WPA WPA-PSK TKIP TKIP
    AES WPA WPA-PSK CCMP CCMP
    WPA-PSK2 TKIP RSN WPA-PSK TKIP TKIP
    AES RSN WPA-PSK CCMP CCMP

    参考情報Linuxで無線LAN (ゆうちくりんの忘却禄)

    5-6-3. 無線LANインターフェースの起動

    WLI-UC-GNMがGalileoボードに接続されていることを確認して、以下のコマンドを実行して設定した無線LANインターフェースを起動します:

    ifup wlan0

    うまく接続してDHCPでアドレスを取得できると以下のような出力があります:

    root@clanton:~# ifup wlan0
    Successfully initialized wpa_supplicant
    [ 1081.018733] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
    udhcpc (v1.20.2) started
    Sending discover...
    [ 1082.914717] wlan0: authenticate with **:**:**:**:**:**
    [ 1083.065743] wlan0: send auth to **:**:**:**:**:** (try 1/3)
    [ 1083.074445] wlan0: authenticated
    [ 1083.080691] wlan0: associate with **:**:**:**:**:** (try 1/3)
    [ 1083.090999] wlan0: RX AssocResp from **:**:**:**:**:** (capab=0x431 status=0 aid=2)
    [ 1083.115238] wlan0: associated
    [ 1083.118308] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
    Sending discover...
    Sending select for 192.168.0.208...
    Lease of 192.168.0.208 obtained, lease time 172800
    ip: RTNETLINK answers: File exists
    /etc/udhcpc.d/50default: Adding DNS 192.168.0.1

    なお、環境によっては正常にアドレスを取得できないことがあります。その場合には以下のような出力があります:

    root@clanton:~# ifup wlan0
    Successfully initialized wpa_supplicant
    [  378.588823] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
    udhcpc (v1.20.2) started
    Sending discover...
    Sending discover...
    Sending discover...
    No lease, failing

    このような場合には以下のコマンドで改めてESSIDを指定すると接続できるようになることがあります:

    iwconfig wlan0 essid "XXXXXXXXXXXXXX"

    XXXXXXXXXXXXXXをアクセス・ポイントのESSIDに置き換えて実行します。

    これで接続が行われると以下のような出力があります:

    root@clanton:~# iwconfig wlan0 essid "XXXXXXXXXXXXXX"
    root@clanton:~# [  410.084800] wlan0: authenticate with **:**:**:**:**:**
    [  410.235633] wlan0: send auth to **:**:**:**:**:** (try 1/3)
    [  410.244581] wlan0: authenticated
    [  410.250692] wlan0: associate with **:**:**:**:**:** (try 1/3)
    [  410.260930] wlan0: RX AssocResp from **:**:**:**:**:** (capab=0x431 status=0 aid=1)
    [  410.284753] wlan0: associated
    [  410.287822] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
    ifup wlan0
    udhcpc (v1.20.2) started
    Sending discover...
    Sending select for 192.168.0.208...
    Lease of 192.168.0.208 obtained, lease time 172800
    ip: RTNETLINK answers: File exists
    /etc/udhcpc.d/50default: Adding DNS 192.168.0.1

    このコマンドで接続できる場合にはifup wlan0を実行する前にあらかじめESSIDを指定しておくとエラーなく接続できます。※14

    正常に接続してIPアドレスを取得できたら、外部と通信できることを確認するためにpingコマンドで疎通確認を行ってみます:

    root@clanton:~# ping 192.168.0.1
    PING 192.168.0.1 (192.168.0.1): 56 data bytes
    64 bytes from 192.168.0.1: seq=0 ttl=64 time=7.377 ms
    64 bytes from 192.168.0.1: seq=1 ttl=64 time=7.699 ms
    64 bytes from 192.168.0.1: seq=2 ttl=64 time=7.678 ms
    64 bytes from 192.168.0.1: seq=3 ttl=64 time=7.225 ms
    64 bytes from 192.168.0.1: seq=4 ttl=64 time=9.616 ms
    64 bytes from 192.168.0.1: seq=5 ttl=64 time=9.622 ms
    64 bytes from 192.168.0.1: seq=6 ttl=64 time=7.345 ms
    64 bytes from 192.168.0.1: seq=7 ttl=64 time=7.812 ms
    64 bytes from 192.168.0.1: seq=8 ttl=64 time=8.103 ms
    ^C
    --- 192.168.0.1 ping statistics ---
    9 packets transmitted, 9 packets received, 0% packet loss
    round-trip min/avg/max = 7.225/8.053/9.622 ms

    以上のようにGalileoボードにUSBで接続したWLI-UC-GNMによって無線LANを正常に使用できることが確認できました。

    参考情報1Linuxで無線LAN (ゆうちくりんの忘却禄)
    参考情報2Quick HOWTO : Ch13 : Linux Wireless Networking – Linux Home Networking

    6. Bluetoothの使用

    実際にUSB接続のBluetoothアダプターをGalileoボードで使用してみます。※15

    6-1. 対象としたUSB接続のBluetoothデバイス

    特に前知識なしでいろいろと見比べて、小ささに惹かれてロジテック株式会社LBT-UAN04C2BK4992072058286)を選択しました:

    Bluetoothアダプター(LBT-UAN04C2BK)

    購入価格は1900円くらいです。

    Galileoボードとの接続には前述株式会社アイネックスUSB-113を使用しています。

    Bluetoothは汎用のドライバーというものが使える傾向が強いので無線LAN(Wi-Fi)ほど事前に調べることはしませんでした。

    ※現在のところWindows 8.1での動作保証はないそうです。

    6-2. LBT-UAN04C2BKの素性

    このLBT-UAN04C2BKはCSR plc(以下、CSR)製のチップを搭載しています。CSRはMicrosoftやIntelとともにBluetooth関連の開発をしており、同社のチップは標準ドライバーで使う場合には使い勝手がよいかと思います。

    Galileoボード用のLinuxカーネルでも標準でこのチップに対応する標準ドライバーを含んでいるため、ビルド時に何かを指定する必要はありません。

    6-3. Bluetoothの起動とテスト

    LBT-UAN04C2BKをGalileoボードに挿して起動するだけで使用可能な状態になります。後は接続対象のBluetoothデバイスと使用目的に応じて設定を行うわけですが、その方法は一般的なBlueZを採用した他のLinuxディストリビューションと変わりません。変わるとすれば、GUIがないためすべてコマンドで設定する必要があることです。LinuxにおけるBluetoothのサポートは、基本的にGUIを前提としている側面が強く、あまり高度なことは標準コマンドではやりづらいのが現状かと思います。

    ここでは接続対象のBluetoothデバイスに依存せずに、Bluetoothの動作確認を行ってみます。

    まず、Galileoボードにログインします。ログインの方法はシリアル・ケーブル経由、ssh経由、telnet経由など、どの方法でもかまいません。

    続いて以下のコマンドでBluetoothインターフェースを起動します:

    hciconfig hci0 up

    続いて周囲のBluetoothデバイスを検索する以下のコマンドを実行します:

    hcitool scan

    実際にBluetoothデバイスを検索して1つ見つかったログを以下に示します(AA:AA:AA:AA:AA:AAには実際には対象機器のBDアドレスが入ります。以下同):

    root@clanton:~# hcitool scan
    Scanning ...
            AA:AA:AA:AA:AA:AA       DM1

    ちなみにこの「DM1」というのはWindows 7 Ultimateが稼働している私のノート・パソコン(HP Pavilion dm1-4009AU)です。

    この見つかった「DM1」のBluetooth MACアドレスにBluetoothでpingをするコマンドは以下のとおりです:

    l2ping AA:AA:AA:AA:AA:AA

    実際に実行してみたログを以下に示します(BB:BB:BB:BB:BB:BBには実際の自局BDアドレスが入ります):

    root@clanton:~# l2ping AA:AA:AA:AA:AA:AA
    Ping: AA:AA:AA:AA:AA:AA from BB:BB:BB:BB:BB:BB (data size 44) ...
    0 bytes from AA:AA:AA:AA:AA:AA id 0 time 32.94ms
    0 bytes from AA:AA:AA:AA:AA:AA id 1 time 24.66ms
    0 bytes from AA:AA:AA:AA:AA:AA id 2 time 12.30ms
    0 bytes from AA:AA:AA:AA:AA:AA id 3 time 25.94ms
    0 bytes from AA:AA:AA:AA:AA:AA id 4 time 17.32ms
    0 bytes from AA:AA:AA:AA:AA:AA id 5 time 23.41ms
    0 bytes from AA:AA:AA:AA:AA:AA id 6 time 13.56ms
    0 bytes from AA:AA:AA:AA:AA:AA id 7 time 22.19ms
    0 bytes from AA:AA:AA:AA:AA:AA id 8 time 13.55ms
    0 bytes from AA:AA:AA:AA:AA:AA id 9 time 17.19ms
    0 bytes from AA:AA:AA:AA:AA:AA id 10 time 22.16ms
    0 bytes from AA:AA:AA:AA:AA:AA id 11 time 8.55ms
    0 bytes from AA:AA:AA:AA:AA:AA id 12 time 18.47ms
    0 bytes from AA:AA:AA:AA:AA:AA id 13 time 29.80ms
    0 bytes from AA:AA:AA:AA:AA:AA id 14 time 8.41ms
    0 bytes from AA:AA:AA:AA:AA:AA id 15 time 29.82ms
    ^C16 sent, 16 received, 0% loss

    このようにpingが正常に帰ってくることが確認できます。

    このBluetoothデバイスが持っている機能リストを取得するコマンドは以下の通りです:

    sdptool browse AA:AA:AA:AA:AA:AA

    実際にWindows 7 Ultimate標準Bluetoothスタックで動作している「DM1」のBluetooth MACアドレスに対して実行してみたログを(長いため)折りたたんで以下に示します:

    root@clanton:~# sdptool browse AA:AA:AA:AA:AA:AA
    Browsing AA:AA:AA:AA:AA:AA ...
    Service Name: Service Discovery
    Service Description: Publishes services to remote devices
    Service Provider: Microsoft
    Service RecHandle: 0x0
    Service Class ID List:
      "SDP Server" (0x1000)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
        PSM: 1
      "SDP" (0x0001)
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    
    Service Name: オーディオ ソース
    Service RecHandle: 0x10000
    Service Class ID List:
      "Audio Source" (0x110a)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
        PSM: 25
      "AVDTP" (0x0019)
        uint16: 0x100
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    Profile Descriptor List:
      "Advanced Audio" (0x110d)
        Version: 0x0102
    
    Service RecHandle: 0x10001
    Service Class ID List:
      "AV Remote Target" (0x110c)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
        PSM: 23
      "AVCTP" (0x0017)
        uint16: 0x102
    Profile Descriptor List:
      "AV Remote" (0x110e)
        Version: 0x0103
    
    Service Name: Network Access
    Service Description: Group network service for PANU and GN
    Service RecHandle: 0x10002
    Service Class ID List:
      "PAN Group Network" (0x1117)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
        PSM: 15
      "BNEP" (0x000f)
        Version: 0x0100
        SEQ8: 0 6 dd
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    Profile Descriptor List:
      "PAN Group Network" (0x1117)
        Version: 0x0100
    
    Service Name: Network Access
    Service Description: Group network service for PANU and GN
    Service RecHandle: 0x10003
    Service Class ID List:
      "PAN User" (0x1115)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
        PSM: 15
      "BNEP" (0x000f)
        Version: 0x0100
        SEQ8: 0 6 dd
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    Profile Descriptor List:
      "PAN User" (0x1115)
        Version: 0x0100
    
    Service Name: PIM アイテム転送
    Service RecHandle: 0x10005
    Service Class ID List:
      "OBEX Object Push" (0x1105)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 1
      "OBEX" (0x0008)
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    Profile Descriptor List:
      "OBEX Object Push" (0x1105)
        Version: 0x0102
    
    Service Name: ファイル転送
    Service RecHandle: 0x10006
    Service Class ID List:
      "OBEX File Transfer" (0x1106)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 2
      "OBEX" (0x0008)
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    Profile Descriptor List:
      "OBEX File Transfer" (0x1106)
        Version: 0x0102
    
    Service Name:
    Service RecHandle: 0x10007
    Service Class ID List:
      "AV Remote" (0x110e)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
        PSM: 23
      "AVCTP" (0x0017)
        uint16: 0x103
    Profile Descriptor List:
      "AV Remote" (0x110e)
        Version: 0x0103
    
    Service Name: Stereo Audio
    Service RecHandle: 0x10008
    Service Class ID List:
      "Audio Sink" (0x110b)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
        PSM: 25
      "AVDTP" (0x0019)
        uint16: 0x100
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    Profile Descriptor List:
      "Advanced Audio" (0x110d)
        Version: 0x0102
    
    Service RecHandle: 0x10009
    Service Class ID List:
      "Handsfree" (0x111e)
      "Generic Audio" (0x1203)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 3
    Profile Descriptor List:
      "Handsfree" (0x111e)
        Version: 0x0106
    
    Service Name: Bluetooth Phone Book Access
    Service RecHandle: 0x1000a
    Service Class ID List:
      "Phonebook Access - PSE" (0x112f)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 4
      "OBEX" (0x0008)
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    Profile Descriptor List:
      "Phonebook Access" (0x1130)
        Version: 0x0101
    
    Service Name: 画像送信サービス
    Service RecHandle: 0x1000b
    Service Class ID List:
      "Imaging Responder" (0x111b)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 5
      "OBEX" (0x0008)
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    Profile Descriptor List:
      "Imaging" (0x111a)
        Version: 0x0101
    
    Service Name: Audio Gateway
    Service RecHandle: 0x1000c
    Service Class ID List:
      "Headset Audio Gateway" (0x1112)
      "Generic Audio" (0x1203)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 6
    Profile Descriptor List:
      "Headset" (0x1108)
        Version: 0x0100
    
    Service Name: Audio Gateway
    Service RecHandle: 0x1000d
    Service Class ID List:
      "Handsfree Audio Gateway" (0x111f)
      "Generic Audio" (0x1203)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 7
    Profile Descriptor List:
      "Handsfree" (0x111e)
        Version: 0x0106
    
    Service Name: ビデオ ゲートウェイ
    Service RecHandle: 0x1000e
    Service Class ID List:
      "Video Sink" (0x1304)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
        PSM: 25
      "AVDTP" (0x0019)
        uint16: 0x100
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    Profile Descriptor List:
      "Video Distribution" (0x1305)
        Version: 0x0100

    このようにGalileoボードにUSB接続したLBT-UAN04C2BKを通じて正常にBluetoothが扱えることが確認できました。

    7. 無線LAN(Wi-Fi)とBluetoothを両方同時に使用する

    USB接続の無線LAN(Wi-Fi)とBluetoothを両方同時に使用するためにはUSBポートが2つ必要ですが、Galileoボードには1つしか存在していません。

    Mini PCI ExpressスロットにもUSB 2.0の信号が出ていますが、これを通常のUSBコネクターとして取り出す変換ボードは一般的とは言い難く、入手性もよいとは言えません。

    そこで、ここでは汎用的なUSBハブを使用して接続を行ってみます。

    7-1. USBハブの選択

    GalileoボードのUSBコネクターはMicro USB Type-B ReceptacleのUSB 2.0です。これに株式会社アイネックスUSB-113を経由してUSBハブを接続します。このためUSBコネクターには特別な配慮は不要としました。

    USBハブを選択する際には以下の要素に注目しました:

    • USB 3.0の必要はまったくないのでUSB 2.0対応のものとする。
    • 4ポートくらいに増やせるものとしたい。
    • Galileoボードがマイコンとしてはともかく、パソコンと比較してとても小さいのでできればコンパクトなため、できればスマートな設計のものとしたい。
    • Galileoボードからの電源供給はあまり期待できないためバスパワーではなく、セルフパワーのものとしたい。

    量販店で上記の要素を意識しつつ眺めてみて、エレコム株式会社U2H-EG4SBK4953103234543)を選択しました:

    USBハブ(U2H-EG4SBK)

    購入価格は1200円くらいでした。

    7-2. USBハブ経由で無線LAN(Wi-Fi)アダプターとBluetoothアダプターを接続

    無線LAN(Wi-Fi)アダプター(WLI-UC-GNM)とBluetoothアダプター(LBT-UAN04C2BK)をUSBハブ(U2H-EG4SBK)を経由してGalileoボードに接続します:

    無線LAN(Wi-Fi)とBluetoothをUSBハブ経由でインテル Galileo 開発ボードに接続

    USBハブには付属のACアダプターを接続しています。※16

    7-3. 動作確認

    個別に接続して前述の“5-6. 無線LANの設定”および“6-3. Bluetoothの起動とテスト”で行ったことを繰り返して実行し、問題なく動作することが確認できました。

    ヘビーな用途で使いこんでいないため、完全に問題がないかどうかはわかりませんが、とりあえずはUSBハブを経由した接続でも問題なく動作する様です。

    この接続状態でlsusbを実行した結果を以下に示します:

    root@clanton:~# lsusb
    Bus 002 Device 002: ID 05e3:0608
    Bus 001 Device 001: ID 1d6b:0001
    Bus 002 Device 001: ID 1d6b:0002
    Bus 002 Device 003: ID 0411:01a2
    Bus 002 Device 004: ID 0a12:0001

    0411:01a2が無線LAN(Wi-Fi)アダプター(WLI-UC-GNM)、0a12:0001がBluetoothアダプター(LBT-UAN04C2BK)、そして05e3:0608がUSBハブ(U2H-EG4SBK)です。

    8. まとめ

    このように技適マーク取得済みの一般向け市販品を使用することによって、Galileoボードでも適法に無線通信を行える可能性があります。また、いずれの機器も新品でありながら割と安価で、入手性がよいのもメリットだと思います。

    このメモでの作業内容を応用すれば、他の無線LAN(Wi-Fi)アダプターやLTEアダプター、IrDAアダプターなどでも使用できるものが複数あります。これらの情報が手持ちの機器を応用する際に役立てていただければ幸いです。

    関連記事


    • Windows 7 Ultimateを稼働させた、CPU Intel Core i7-930、DDR3 DRAM 24GBのマシンを使用しました。
    • Bフレッツの100Mbps回線を使用しました。
    • Windows 7 Ultimate上で稼働させたOracle Virtual Box 4.3.10 r93012で4コアのCPU、8GBのメモリー、100GBのストレージを割り当て、Debian Linux 7.4をインストールしました。
    • 32GBのmicroSDメモリーカードを使用しました。
    • SDカード・アダプターにmicroSDメモリーカードをSDカードに変換するアダプターを介して接続して使用しました。
    • USB→RS-232変換アダプターに自作のD-Sub 9ピン⇔3.5ミリメートル・ミニプラグ変換ケーブルを使用しました(作成方法は“「Intel Galileo Development Board」を使用する準備”の“RS-232レベルのD-Sub 9ピン ⇔ 3.5ミリメートル・ミニ・プラグ変換ケーブルの作成”で解説しています)。日本で市販されている製品にはスイッチサイエンスUSB-コンソールアダプタ for Intel Galileoというものがあります。
    • 他のパラメーターのLinuxディストリビューション用のディレクトリーとはディレクトリーは別のディレクトリーにしなければなりません。同一のディレクトリーで作業することはできません。
    • 余談ですが、ここでLinuxカーネルコンフィギュレーションのmenuconfigを実行することもできます。必ずX-Windowが有効な状態でローカル・ログインをし、端末でbitbake linux-yocto-clanton -c menuconfigとコマンドを実行すると準備が出来次第、別ウィンドウの端末が開いてmenuconfigを実行することができます。
    • もしもlinux-yocto-clanton-3.8-r0do_fetchのまま固まってしまった場合は以下の記述を参照して対処してください:

      関連情報linux-yocto-clanton-3.8-r0がdo_fetchのまま固まった場合の対処方法

    • WindowsでリモートからWinSCPで転送すると自動的に実体ファイルとなるので、この場合には特に考慮を必要としません。
    • もちろん、他の目的を持って編集することはなんら問題ありません。
    • 見ればわかるかと思いますが、SSID、パスフレーズなどの情報はマスク済みです。その部分は最初の生成時から変更しないでください。
    • なぜ設定ファイルのSSIDがESSIDとみなされないのかは時間がなくて現時点では追及できていません。
    • Intel製のWi-Fi/Bluetooth両対応のMini PCI Expressカードにおいて、Wi-FiはPCI Expressで接続していますが、BluetoothはUSBで接続しています。このためUSBでBluetoothを接続するという形態はそれと同様です。
    • 接続しなくてもバスパワーで動作する製品ですが、私の経験上バスパワー動作のハブでは安定性に問題が出ることが多いので、無用のトラブル防止に接続しています。
    このエントリーをはてなブックマークに追加