Jetson TK1 で mini PCI-Express カードによる無線LAN 接続を行うためのメモです.
使うカードは,Intel Dual Band Wireless-AC 7260 (以下,7260)です.7260 は,比較的安価でありながら無線 LAN 規格の 802.11 ac/a/b/g/n (最大 867 Mbps) および Bluetooth 4.0 に対応した魅力的な mini PCI-Express カードです.
ところが,現時点(’14年8月)では以下の 2点の問題があるため,そのままでは 7260 を使うことができません.
- NVIDIA が提供するカーネル(Tegra124_Linux_R19.3.0_armhf.tbz2) が無線 LAN 関係のドライバが無効化された状態で build されている
- NVIDIA が提供するカーネルのバージョン 3.10.24 の段階では 7260 のドライバが Jetson TK1 には一部未対応
そこで,カーネルを入れ替えた上で設定を追加することで,7260 を動かせるようにします.なお,最初に断っておきますと,以下の手順の大半は参考文献の最初に記載したリンク先の内容に基づいています.
書き込みファイルの準備
NVIDIA の公式サイトから取得したカーネル及びルートファイルシステムに対して,カーネルを「The Grinch” Custom Kernel 19.3.2 (10 August 2014)」に置き換えます.
1 2 3 4 5 6 7 8 9 |
$ wget https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra124_Linux_R19.3.0_armhf.tbz2 $ wget https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra_Linux_Sample-Root-Filesystem_R19.3.0_armhf.tbz2 $ sudo tar xpf Tegra124_Linux_R19.3.0_armhf.tbz2 $ cd Linux_for_Tegra/rootfs/ $ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R19.3.0_armhf.tbz2 $ cd .. $ wget http://www.jarzebski.pl/files/jetsontk1/grinch-19.3.2/zImage -O kernel/zImage $ wget http://www.jarzebski.pl/files/jetsontk1/grinch-19.3.2/kernel_supplements.tbz2 -O kernel/kernel_supplements.tbz2 $ sudo ./apply_binaries.sh |
カーネルモジュールの書き込み
「rootfs/lib/modules/3.10.24-grinch-19.3.2」以下のファイルを,Jetson TK1 にコピーします.以下では,SSH で Jetson TK1 にログインできることを前提にしています.(ホスト名はデフォルトの「tegra-ubuntu」)
1 2 3 4 5 6 7 |
$ cd rootfs/lib/modules $ tar zcvf ../../../modules.tar.gz 3.10.24-grinch-19.3.2 $ cd - $ scp modules.tar.gz tegra-ubuntu: $ ssh tegra-ubuntu # 次のコマンドは tegra-ubuntu 上にて実行 $ sudo tar zxvf modules.tar.gz -C /lib/modules |
カーネルの書き込み
Jetson TK1 に対してカーネルを書き込みます.これについては,『Jetson TK1 SD ブート & 初期設定』の「ブートローダ及びカーネルの書き込み」と全く同じ手順となります.(SD カードブートしない場合は,適宜読み替えが必要)
環境設定
自動でネットワークに接続し,名前引きできるようにするために,2 つのファイルを編集します.WiFi の接続自体は,GUI 画面で行うことを前提にしています.(NetworkManager に任せる)
- /etc/rc.local
-
起動時に自動的にドライバをロードするため,以下を追加します.なお,最初の 3 行は W_DISABLE# を H にするための操作です.
冒頭に記載した「ドライバが Jetson TK1 には一部未対応」に対処するため処置になります.123456echo 191 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio191/directionecho 1 > /sys/class/gpio/gpio191/valuemodprobe -r iwlmvmmodprobe iwlmvm - /etc/dhcp/dhclient-wlan0.conf
-
下記の内容を追記します.
この設定を行うと,ネットワークに有線と無線の両方で接続した場合に,両者を区別して名前引き出来るようになります.具体的には,無線 LAN の方はホスト名が「tegra-ubuntu-wifi」となります.
必須の設定ではないです.1interface "wlan0" { send host-name = concat (gethostname(), "-wifi"); }余談ですが,この設定は NetworkManager が「/var/lib/NetworkManager/dhclient-wlan0.conf」を生成する際に「send host-name」の指定行を削除する挙動を回避する hack となっています(NetworkManager のソース見て考えました).普通に書くと無視されてしまいます.
以上で,起動時に自動的に無線 LAN でネットワーク接続できるようになります.
「The “Grinch” Custom Kernel」を使わずに自分でカーネルをビルドしても良いですが,なにかトラブルがあった場合に NVIDIA Developer Zone 等の助けが借りられる可能性が高まるという意味で,現時点(’14年8月)ではこれが最もお勧めです.
NVIDIA の中の人も「Currently, the easiest method to use Wifi on Jetson TK1 is to install the user-supplied “Grinch” kerne」と言っていますし.
接続例
参考までに 7260 を装着した状態ときにどんな感じになるかご紹介.
コンパクトなアンテナを使えば,あんまり違和感無い感じにまとまります.私の場合は,下記のアンテナを使用しています.
4dBi アンテナ 無線LAN WIFI/Wimax/Bluetooth モジュール用 ミニサイズ アンテナ 2本 17cm 1.13ipex
参考文献
- [CustomKernel] The Grinch 19.3.2 for Jetson TK1
- NetworkManager の設定以外はほぼこの内容をなぞっています.
- [guide] Build own kernel for Jetson TK1
- カーネルを自分でビルドする場合の手順について解説されています.
- ECN-WirelessDisable [キャッシュ]
- gpio191 に関わる操作は,このドキュメントに記載されている「W_DISABLE#」を H にするためのものです.
- dhcp-eval – ISC DHCP conditional evaluation
- dhclient の設定ファイルの汎用性を高めるため,文字列を連結する方法を探していてここにたどり着きました.あんまり知られていないようですが割と色々な機能があるので,「dhcp-eval」というキーワードだけでも頭の隅に置いておくと,いつか役に立つかもしれません.
コメント
[…] 以上で環境が整った。参考文献: Jetson TK1 で mini PCI-Express カードによる無線LAN 接続を行う方法 Ubuntu 無線Lan がなまら遅い(速度にムラがある)ときの対処 […]