2014年11月28日

[Yocto] DE3815TYKHEへのWi-Fi端末機能追加

最近組込み分野におけるYocto Projectの存在感は益々大きくなってきています。IntelはYocto Projectを積極的に後押しており、かなり大きな開発リソースを投入しています。また、Intelは組込み向けの新しいプロセッサや評価ボードなどを次々と発表していますが、組込みOSとしてYocto ProjectとAndroidを強力にプッシュしています。Wind Riverなどの組込みLinuxのベンダー企業もYocto Projectに積極的に開発リソースを投入しているようです。ここに来て、Yocto Projectを取り巻く動きはさらに活発になっています。

前記事では、DE3815TYKHEの内蔵EthernetコントローラであるRealtek RTL8111のドライバをYocto Linuxへ追加する方法について書きました。Valley Island(Intel E38xx)用BSPをカスタマイズすることで目的を達成しましたが、新しいターゲット・ハードウェアへYocto Linuxを移植する場合、既存のBSPを改造することが手っ取り早い方法です。Yocto Linuxに取り組むプログラマが増えているようなので、BSPのカスタマイズ方法に関する導入ガイド的な情報として、前記事は役に立つ内容になっているのではないかと自負しています。本業の仕事でもYocto Linuxの研究開発に携わっていますが、休日などのプライベートな時間もYocto Linuxの研究に相当な時間を割いています。仕事上必要に迫られてYocto Projectについてググって調べることが多いですが、日本語の情報はまだまだ少ないのが実情です。オープンソース・コミュニティへの貢献にもなるので、プライベートな研究活動で得られた成果や情報を積極的に公開していこうと思っています(本業の仕事があまりに忙しすぎて、記事を書く時間がなかなか取れないのが悩みですが・・・)。

さて、10/13の記事でDE3815TYKHEへSO-DIMMメモリとSSDを組み込む作業について書きましたが、DE3815TYKHEにはMini-PCIeスロットと無線LAN用のアンテナ・ケーブルが内蔵されていました。せっかくスロットが内蔵されているのに使わないのはもったいないので、DE3815TYKHEへ無線LANカードを追加してみました。同時にYocto LinuxへWi-Fi端末機能を追加する作業も行ったので、その作業の詳細についても書きます。

■ DE3815TYKHEへの無線LANカードの組込み


今回入手したのはRalink RT3090というチップを搭載した無線LANカードです。このチップはIEEE802.11b/g/nの無線通信規格に対応しています。
ANIMG_20141127_084730-DE3815TYKHE-Embedding_WLAN-Ralink_RT3090.jpg
ANIMG_20141127_085658-DE3815TYKHE-Embedding_WLAN-Ralink_RT3090.jpg
まずは、DE3815TYKHEへの無線カードの組み込みから始めました。組み込み作業は簡単でした。内蔵のMini-PCIeスロットにカードを挿して、カード上の2つのコネクタにアンテナ・ケーブルを取り付けるだけです。
ANIMG_20141129_155541-DE3815TYKHE_Embedding_WLAN-Ralink_RT3090.jpg
なお、上の写真のとおり、本無線カードは技術基準適合証明(いわゆる「技適マーク」)を取得済みの物なので、屋外や正式な稼働現場でも無線機能内蔵機器として使うことができますが、技適マークの付いていない無線カードを組み込んだ機器を屋外や正式な稼働現場などで使用することは違法です(屋内限定の実験レベルでの使用なら電波法に抵触しないという解釈もあるようですが、この辺は曖昧みいたいです)。無線カードを機器に組み込んで使う場合は、この点に注意しなければなりません。

■ DE3815TYKHE BSPへのWi-Fi設定追加


無線カードの組み込み作業が済んだので、さっそくDE3815TYKHEでYocto Linuxを起動してみました。そして、PCI/PCIeボードを追加したときの定番コマンドであるlspciコマンドを最初に実行してみました。無線LANカードを挿した状態でのlspciコマンドの出力情報は下のようになりました。
# lspci
00:00.0 Host bridge: Intel Corporation ValleyView SSA-CUnit (rev 0c)
00:02.0 VGA compatible controller: Intel Corporation ValleyView Gen7 (rev 0c)
00:13.0 SATA controller: Intel Corporation ValleyView 6-Port SATA AHCI Controller (rev 0c)
00:14.0 USB controller: Intel Corporation ValleyView USB xHCI Host Controller (rev 0c)
00:1a.0 Encryption controller: Intel Corporation ValleyView SEC (rev 0c)
00:1b.0 Audio device: Intel Corporation ValleyView High Definition Audio Controller (rev 0c)
00:1c.0 PCI bridge: Intel Corporation ValleyView PCI Express Root Port (rev 0c)
00:1c.1 PCI bridge: Intel Corporation ValleyView PCI Express Root Port (rev 0c)
00:1c.2 PCI bridge: Intel Corporation ValleyView PCI Express Root Port (rev 0c)
00:1f.0 ISA bridge: Intel Corporation ValleyView Power Control Unit (rev 0c)
00:1f.3 SMBus: Intel Corporation ValleyView SMBus Controller (rev 0c)
02:00.0 Network controller: Ralink corp. RT3090 Wireless 802.11n 1T/1R PCIe
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

PCIバス・レベルでカードは認識されていますが、ifconfigコマンドで情報を取得しても、無線LANのインスターフェースは存在していませんでした。カーネルにRalink RT3090用のドライバを組み込んでいないので当然です。dmesgコマンドの情報でも、それらしいドライバはロードされていませんでした。それでは、Yocto Linuxに無線LANドライバを組み込むにはどうすれば良いのでしょうか。

本件に関する情報が欲しくて、Yocto Projectの公式サイトのページを探し回ったり同プロジェクトのGitリポジトリに存在するレシピなどを片っ端から読んだりしました。結論を先に書くと、前記事で作成したDE3815TYKHE用BSPに以下のような変更を加えると、Yocto LinuxへWi-Fi機能を組み込むことができます(ターゲット名を「de3815tyke」から「de3815tybe」に変更しました。その関係で、前記事からファイル名を変更しています。ちなみに、「DE3815TYBE」はDE3815TYKHEに搭載されているボードの型番です。Intelは本ボードを単独でも販売しています)。
#@TYPE: Machine
#@NAME: Intel DE3815TYBE (Thin Canyon) board which is embedded in NUC Kit DE3815TYKHE

#@WEBTITLE: Intel Atom E38xx Processor (DE3815TYBE) 32-bit with Open Source Frame Buffer Graphics

#@DESCRIPTION: Machine configuration for DE3815TYBE 32-bit systems, without Intel-proprietary graphics bits

PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
PREFERRED_VERSION_linux-yocto ?= "3.10%"

require conf/machine/include/intel-core2-32-common.inc
require conf/machine/include/intel-common-pkgarch.inc
require conf/machine/include/meta-intel.inc

MACHINE_FEATURES += "pcbios efi"
MACHINE_FEATURES += "wifi"

MACHINE_EXTRA_RRECOMMENDS += "linux-firmware"

XSERVER ?= "${XSERVER_X86_BASE} \
${XSERVER_X86_EXT} \
${XSERVER_X86_FBDEV} \
${XSERVER_X86_I965} \
"

APPEND += "acpi_enforce_resources=lax video=efifb:off vga=0x318"

#@TYPE: Machine
#@NAME: Intel DE3815TYBE (Thin Canyon) board which is embedded in NUC Kit DE3815TYKHE

#@WEBTITLE: Intel Atom E38xx Processor (DE3815TYBE) 64-bit with Open Source Frame Buffer Graphics

#@DESCRIPTION: Machine configuration for DE3815TYBE 64-bit systems, without Intel-proprietary graphics bits

PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
PREFERRED_VERSION_linux-yocto ?= "3.10%"

require conf/machine/include/intel-corei7-64-common.inc
require conf/machine/include/intel-common-pkgarch.inc
require conf/machine/include/meta-intel.inc

MACHINE_FEATURES += "pcbios efi"
MACHINE_FEATURES += "wifi"

MACHINE_EXTRA_RRECOMMENDS += "linux-firmware"

XSERVER ?= "${XSERVER_X86_BASE} \
${XSERVER_X86_EXT} \
${XSERVER_X86_FBDEV} \
${XSERVER_X86_I965} \
"

APPEND += "acpi_enforce_resources=lax video=efifb:off vga=0x318"

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

#############################
# MACHINE = de3815tybe-32 #
#############################
COMPATIBLE_MACHINE_de3815tybe-32 = "de3815tybe-32"
KMACHINE_de3815tybe-32 = "valleyisland-32"
KBRANCH_de3815tybe-32 = "standard/base"
KERNEL_FEATURES_de3815tybe-32 = " features/valleyisland-io/valleyisland-io \
features/valleyisland-io/valleyisland-io-pci.scc \
features/wifi/wifi-all.scc"

LINUX_VERSION_de3815tybe-32 = "3.10.43"
SRCREV_machine_de3815tybe-32 = "aa677a2d02677ec92d59a8c36d001cf2f5cf3260"
SRCREV_meta_de3815tybe-32 = "199943142f7e0a283240246ee6c02f4376b315f0"
SRCREV_valleyisland-io_de3815tybe-32 = "27bc40c174bb4ca160eafd6ccf3da9e774c9a8c7"

SRC_URI_de3815tybe-32 = "git://git.yoctoproject.org/linux-yocto-3.10.git;protocol=git;nocheckout=1;branch=${KBRANCH},${KMETA},valleyisland-io-2.0;name=machine,meta,valleyisland-io"

SRC_URI_de3815tybe-32 += "file://add_driver-net_ethernet_r8169.cfg"

#############################
# MACHINE = de3815tybe-64 #
#############################
COMPATIBLE_MACHINE_de3815tybe-64 = "de3815tybe-64"
KMACHINE_de3815tybe-64 = "valleyisland"
KBRANCH_de3815tybe-64 = "standard/base"
KERNEL_FEATURES_de3815tybe-64 = " features/valleyisland-io/valleyisland-io \
features/valleyisland-io/valleyisland-io-pci.scc \
features/wifi/wifi-all.scc"

LINUX_VERSION_de3815tybe-64 = "3.10.43"
SRCREV_machine_de3815tybe-64 = "aa677a2d02677ec92d59a8c36d001cf2f5cf3260"
SRCREV_meta_de3815tybe-64 = "199943142f7e0a283240246ee6c02f4376b315f0"
SRCREV_valleyisland-io_de3815tybe-64 = "27bc40c174bb4ca160eafd6ccf3da9e774c9a8c7"

SRC_URI_de3815tybe-64 = "git://git.yoctoproject.org/linux-yocto-3.10.git;protocol=git;nocheckout=1;branch=${KBRANCH},${KMETA},valleyisland-io-2.0;name=machine,meta,valleyisland-io"

SRC_URI_de3815tybe-64 += "file://add_driver-net_ethernet_r8169.cfg"

module_autoload_i2c-dev = "i2c-dev"

Yocto LinuxへWi-Fi(無線LAN)端末機能を追加するために必要な変更はたったこれだけです。linux-yocto_3.10.bbappendに加えた変更によって、カーネルのソースツリーに存在する主要な無線LANドライバがすべて組み込まれます。一方、de3815tybe-32.confde3815tybe-64.confの変更内容は、ターゲットイメージへWi-Fi関連パッケージを追加する役割を持っています。後者の変更によって、以下のパッケージがターゲットイメージへ組み込まれます。
  • linux-firmware-*
  • wireless-tools
  • wpa-supplicant
  • connman-gnome

「linux-firmware-」という名前で始まるパッケージには無線LANチップのファームウェアがバイナリ形式で格納されており、チップの種類分数が存在します。無線LANチップのファームウェアはデバイス・メーカーから配布されており、git.kernel.orgに収集されています(ファームウェアを公開していないメーカーも存在します。その場合は、有志の独自調査によりファームウェアを作成しているようです)。このサイトからダウンロードしたファームウェアから各無線LANチップ用のlinux-firmwareパッケージが生成されます。無線LANドライバがチップの初期化時にファームウェアをカードへロードする仕組みになっており、対象チップに適合したファームウェアが存在しないと、無線LANカードは正常に動作しません。上の「MACHINE_EXTRA_RRECOMMENDS += "linux-firmware"」という設定によって、主要な無線LANチップ用のlinux-firmwareパッケージがすべてターゲットイメージへ組み込まれます。

■ connman-gnomeによるWi-Fi接続


DE3815TYKHE BSPに上の変更を加えた後、以下のコマンドによってカーネルとターゲットイメージの再ビルドを行えば、Yocto LinuxへWi-Fi端末機能が追加されます。
$ bitbake linux-yocto -c cleansstate
$ bitbake linux-yocto
$ bitbake core-image-sato

上記の変更を加えたBSPから再ビルドしたYocto LinuxをDE3815TYKHEで起動すると、dmesgコマンドの出力情報に下のような行が追加されます。
# dmesg
.... ....
.... ....
.... ....
.... ....
[ 1.746796] cfg80211: Calling CRDA to update world regulatory domain
.... ....
[ 1.909116] rt2800pci 0000:02:00.0: enabling device (0000 -> 0002)
[ 1.915002] ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 3090, rev 3213 detected
[ 1.966563] ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 0005 detected
[ 2.201021] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
.... ....

これでRalink RT3090用のドライバはロードされチップの初期化は行われていますが、この段階でifconfigコマンドを実行しても、無線LANのインターフェースは存在していません。その理由は、Yocto Linuxのネットワーク・インターフェースはconnman(Connection Manager)というソフトウェアによって管理されているからです。connmanによっていずれかのWi-Fiアクセスポイントに接続した段階で、初めて無線LANのインターフェースが作成されます。

core-image-sato(Sato Mobile Desktop)イメージでYocto Linuxを起動している場合、具体的には、以下のような操作を行う必要があります。
  1. Sato Mobile Desktop画面の右上に存在するLANケーブルのアイコンをクリックすると、下のようなメニューが表示されます。
    UBShot_20141202_154430-DE3815TYKHE-connman-gnome-WiFi_Setup-1024x768
    このメニューから[Preferences]メニューを選択します。

  2. すると、下のようなウィンドウが開きます。これがGUI版Connection Manager(connman-gnome)の画面です。
    UBShot_20141202_154506-DE3815TYKHE-connman-gnome-WiFi_Setup-1024x768
    上は、左側のServicesリストから[Wireless Networks]を選択したときのウィンドウ表示です。

    このウィンドウの[Enable]ボタンを押すと、無線LANインターフェースが有効になります。同時にWi-Fiアクセスポイントの検索処理が行われ、数秒後にServicesリスト内の[Wireless Networks]の下に見つかったアクセスポイントのSSIDの一覧が表示されます。
    UBShot_20141202_154705-DE3815TYKHE-connman-gnome-WiFi_Setup-1024x768
    なお、無線LANインターフェースが有効な状態で[Scan]ボタンを押すと、アクセスポイントの再検索を行うことができます。

  3. SSIDのリストから、接続したいアクセスポイントを選択してください。すると、下のようなウィンドウ表示に変わります。
    UBShot_20141202_154725-DE3815TYKHE-connman-gnome-WiFi_Setup-1024x768
    このウィンドウの[Connect]ボタンを押すと、下のようなポップアップ・ウィンドウが表示されます。
    UBShot_20141202_154918-DE3815TYKHE-connman-gnome-WiFi_Setup-1024x768
    このウィンドウの[Passphrase]エディットボックスに、接続しようとしているアクセスポイントのパスフレーズ(共有キー)を入力して、[OK]ボタンを押してください。

  4. アクセスポイントへの接続処理が実行され、上で入力したパスフレーズが正しければ、Servicesリストの対象SSIDの下に「connected」という表示が追加されます(接続処理の進行によって、この表示は「associating...」→「configuring...」→「connected」と変化します)。
    UBShot_20141202_155059-DE3815TYKHE-connman-gnome-WiFi_Setup-1024x768
    上のような状態になれば、アクセスポイントへの接続は完了しています。

上の操作を行った後、ターミナルからifconfigコマンドを実行すると、wlan0というインターフェースが作成されているはずです。これが無線LANのネットワーク・インターフェースです。
# ifconfig
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.223.9 Bcast:192.168.223.255 Mask:255.255.255.0
inet6 addr: fe80::xxxx:xxff:fexx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1220 errors:0 dropped:0 overruns:0 frame:0
TX packets:616 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:92049 (89.8 KiB) TX bytes:492673 (481.1 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:660 (660.0 B) TX bytes:660 (660.0 B)

wlan0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.179.6 Bcast:192.168.179.255 Mask:255.255.255.0
inet6 addr: fe80::xxxx:xxff:fexx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:39 errors:0 dropped:0 overruns:0 frame:0
TX packets:59 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2005 (1.9 KiB) TX bytes:9075 (8.8 KiB)


また、connmanによる無線LANインターフェースの有効化とアクセスポイントへの接続操作を行うと、下のようなカーネルログも出力されます。
# dmesg
.... ....
.... ....
[ 35.727187] ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2860.bin' 'rt2860.bin'
[ 35.732481] ieee80211 phy0: rt2x00lib_request_firmware: Info - Firmware detected - version: 0.34
[ 35.778497] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[ 66.643277] wlan0: authenticate with xx:xx:xx:xx:xx:xx
[ 66.652945] wlan0: send auth to xx:xx:xx:xx:xx:xx (try 1/3)
[ 66.654514] wlan0: authenticated
[ 66.655252] wlan0: associate with xx:xx:xx:xx:xx:xx (try 1/3)
[ 66.662697] wlan0: RX AssocResp from xx:xx:xx:xx:xx:xx (capab=0x431 status=0 aid=1)
[ 66.662811] wlan0: associated
[ 66.662860] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready

connmanで接続したアクセスポイントを経由してインターネットにアクセスできるかどうか試すには、ターミナルから下のようなpingコマンドを実行してみると良いでしょう。
# ping www.yoctoproject.org
PING www.yoctoproject.org (140.211.169.56): 56 data bytes
64 bytes from 140.211.169.56: seq=0 ttl=48 time=156.630 ms
64 bytes from 140.211.169.56: seq=1 ttl=48 time=156.535 ms
64 bytes from 140.211.169.56: seq=2 ttl=48 time=156.484 ms
64 bytes from 140.211.169.56: seq=3 ttl=48 time=156.374 ms
64 bytes from 140.211.169.56: seq=4 ttl=48 time=156.321 ms
64 bytes from 140.211.169.56: seq=5 ttl=48 time=156.516 ms

ただし、Ethernet側のLANケーブルを外した状態で行うべきです。Ethernet側の有線LAN回線経由ではなく、無線LAN回線経由でのインターネット接続を確認することが目的だからです。Webブラウザが在ればもっと簡単に確認できるのですが、残念ながら、デフォルトの状態ではcore-image-satoイメージにWebブラウザは組み込まれていません。

connman-gnomeによって接続したWi-Fiアクセスポイントの情報は保存されています。そのため、システムを再起動しても、自動的に前回接続していたアクセスポイントへ接続され、wlan0インターフェースが作成されます。

■ connman-clientによるCLI環境へのWi-Fi機能追加


これでYocto LinuxへのWi-Fi端末機能の組み込み作業は一応終わりですが、もう一つ補足的な情報を掲載しておきます。GUIではなくCLI環境にWi-Fi端末機能を追加する方法についてです。これまで、ずっとcore-image-sato(Sato Mobile Desktop)というGUI環境のイメージをビルドしてきましたが、Yocto LinuxにはCLI環境用のイメージレシピもいくつか収納されています。その中から、core-image-full-cmdlineというイメージにWi-Fi端末機能を組み込んでみたので、その作業の内容も紹介しておきましょう。モニタやタッチスクリーンの存在しないCLIベースのターゲット用にYocto LinuxでWi-Fi端末システムを構築するケースを想定しています。

CLI環境用イメージにWi-Fi機能を組み込む場合、BSPの内容は特に変わりはありません。上記のBSPをそのまま使うことができます。Wi-Fi関連パッケージもconnman-gnome以外はそのまま使えます。connman-gnomeだけはGUI環境用のパッケージなので使えません。connman-gnomeに代わって、connman-clientというパッケージを追加する必要があります。これはコマンドラインで動作するconnmanの接続設定アプリです。

Yocto Linuxのシステム構成イメージにパッケージを追加する方法はいくつか存在します。この辺の詳しい情報は別の記事で解説したいと思っていますが、今回は手っ取り早くlocal.confに設定記述を追加することで実現してみました。具体的には、以下のようにlocal.confを変更しました。
#
# Additional packages to be installed to the specific images
#
IMAGE_INSTALL_append_pn-core-image-full-cmdline = " \
kernel-modules \
wireless-tools \
wpa-supplicant \
connman \
connman-client"

#
# Extra image configuration defaults
#
# The EXTRA_IMAGE_FEATURES variable allows extra packages to be added to the generated
# images. Some of these options are added to certain image types automatically. The
# variable can contain the following options:
# "dbg-pkgs" - add -dbg packages for all installed packages
# (adds symbol information for debugging/profiling)
# "dev-pkgs" - add -dev packages for all installed packages
# (useful if you want to develop against libs in the image)
# "ptest-pkgs" - add -ptest packages for all ptest-enabled packages
# (useful if you want to run the package test suites)
# "tools-sdk" - add development tools (gcc, make, pkgconfig etc.)
# "tools-debug" - add debugging tools (gdb, strace)
# "eclipse-debug" - add Eclipse remote debugging support
# "tools-profile" - add profiling tools (oprofile, exmap, lttng, valgrind)
# "tools-testapps" - add useful testing tools (ts_print, aplay, arecord etc.)
# "debug-tweaks" - make an image suitable for development
# e.g. ssh root access has a blank password
# There are other application targets that can be used here too, see
# meta/classes/image.bbclass and meta/classes/core-image.bbclass for more details.
# We default to enabling the debugging tweaks.
EXTRA_IMAGE_FEATURES = "debug-tweaks package-management"

IMAGE_INSTALL_append」という変数を使うと、すべてのイメージが対象になりますが、上のように「IMAGE_INSTALL_append_pn-<IMAGE_NAME>」という変数名にすると、指定したイメージに対してのみパッケージを追加することができます。また、core-image-full-cmdlineイメージにはrpmコマンドが入っていないので、これを組み込むために「EXTRA_IMAGE_FEATURES」の設定も変更しました。rpmコマンドを使えると、後からターゲット環境へパッケージをインストールすることができます。システム構成を調べる際にも役立つので、ターゲットイメージには必ずrpmやopkgなどのパッケージ管理コマンを入れておくことをお勧めします。

core-image-full-cmdlineイメージのビルド手順はcore-image-satoと同じです。以下のコマンドによって、ビルドできます。
$ bitbake core-image-full-cmdline -c fetchall
$ bitbake core-image-full-cmdline

起動&インストール用USBメディアの作成方法も同じです。USBメモリを開発マシンへ挿した状態で、以下のコマンドを実行すれば、同メディアを作成できます。
$ umount /dev/sdc
$ sudo dd if=tmp/deploy/images/de3815tybe-64/core-image-full-cmdline-de3815tybe-64.hddimg of=/dev/sdc
$ sync

上で作成したUSBメディアを使って、DE3815TYKHEの内蔵SSDへYocto Linuxをインストールしました。その上で、内蔵SSDからYocto Linuxを再起動しました。core-image-full-cmdlineイメージでは、Yocto Projectのスプラッシュ画面に続いて、ログインプロンプトがモニタ画面に表示されます。

ログインした後ifconfigコマンドを実行すると、やはり無線LANのwlan0インターフェースは作成されていません。これはcore-image-satoと同じです。ここで、無線LANインターフェースの有効化とWi-Fiアクセスポイントへの接続操作を行います。CLI環境でこれらを行うには、「connmanctl」というコマンドを使います。具体的には、以下のような手順を実行します。
# connmanctl
connmanctl> enable wifi
Enabled wifi
connmanctl> scan wifi
Scan completed for wifi
connmanctl> agent on
Agent registered
connmanctl> services
AirPort15044 wifi_xxxxxxxxxxxx_416972506f72743135303434_managed_psk
Guest15044 wifi_xxxxxxxxxxxx_47756573743135303434_managed_psk
nad11-2e8ac2 wifi_xxxxxxxxxxxx_6e616431312d326538616332_managed_psk
ZL wifi_xxxxxxxxxxxx_5a4c_managed_psk
106F3F655F8A3 wifi_xxxxxxxxxxxx_313036463346363546384133_managed_psk
106F3F655F8A3-1 wifi_xxxxxxxxxxxx_3130364633463635463841332d31_managed_psk
TP-LINK_648426 wifi_xxxxxxxxxxxx_54502d4c494e4b5f363438343236_managed_psk
001D738E88FB-3 wifi_xxxxxxxxxxxx_3030314437333845383846422d33_managed_psk
001D738E88FB wifi_xxxxxxxxxxxx_303031443733384538384642_managed_psk
001D738E88FB-3 wifi_xxxxxxxxxxxx_3030314437333845383846422d31_managed_psk
0000docomo wifi_xxxxxxxxxxxx_30303030646f636f6d6f_managed_psk
connmanctl> connect wifi_xxxxxxxxxxxx_6e616431312d326538616332_managed_psk
Agent RequestInput wifi_xxxxxxxxxxxx_6e616431312d326538616332_managed_psk
Passphrase = [ Type=psk, Requirement=mandatory, Alternates=[ WPS ] ]
WPS = [ Type=wpspin, Requirement=alternate ]
Passphrase? ************〔← 接続対象アクセスポイントのパスフレーズ(共有キー)を入力する〕
Connected wifi_xxxxxxxxxxxx_6e616431312d326538616332_managed_psk
connmanctl> quit

上の操作を行った後ifconfigコマンドを実行すれば、無線LANのwlan0インターフェースが作成されていることが確認できます。Wi-Fiアクセスポイントへの接続が完了すれば、無線LANのネットワーク環境はSato Mobile Desktopと変わりありません。インターネットへのアクセスも問題なくできます。

【参考ページ】

 connman: wifi configuration ・ IntelOpenDesign/MakerNode Wiki ・ GitHub
 WiFi access on Intel(TM) Galileo with Yocto* Linux
 インテル Galileo 開発ボードでWi-Fi/BTを適法に使用する方法の実践 | KEI SAKAKI's PAGE.
 Connman - ArchWiki


posted by とみやん at 16:29| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project