2016/10/18 21:04:21

LinuxでUSB無線LANアダプタを使えるようにしてみる

usblun
目次(クリックするとジャンプします)
  • 1:ハードの設定初体験
  • 2:USB無線LANアダプタを使う
  • 2.1:アダプタの素性を調べる
  • 2.2:USB製品の素性を調べるには
  • 2.3:ドライバの状態を調べる
  • 2.4:ファームウエアの存在
  • 2.4.1:DFSGに準拠しているか
  • 2.5:ファームウェアのインストール
  • 3:実際に利用してみる
  • 4:補足・ハマりポイント
  • 4.1:USBドングルの発熱
  • 5:後記

ハードの設定初体験

環境をlinuxしてから少し時間がたち、いろいろな設定に手を出しているこの頃。

windowsではsoftap機能を使い、タブレットやスマートフォンをインターネットに接続していました。

linuxでも同じことをしたいと思い、まずはUSB無線LANアダプタを使えるようにするために設定を行ってのでその記録です。

この記事はPlanex GW-USValue-EZというUSB無線LANアダプタを例にとって解説を進めるますが、他のアダプタでも参考になるかもしれません。

本記事の環境は Debian GNU/Linux 8です。

USB無線LANアダプタを使う

アダプタの素性を調べる

最近のLinuxは周辺機器の認識率がたかいそうで、メジャーな製品であればたいてい認識してくれるという話。

Planex GW-USValue-EZも挿して見ると、デバイス自体は認識されていました。

しかし使えない。なぜだろう。

もしかしたらドライバがちゃんと読み込まれていないのかもしれないと思い、必要なドライバが存在するかどうかを確かめることにしてみました。

USB製品の素性を調べるには

lsusbコマンドを使うと良いようです。アダプタを挿したあとにこのコマンドを実行すると、認識されているUSB機器が表示されるはず。

@MINOの環境ではPlanex GW-USValue-EZに該当する表示は以下のようになりました。

$sudo lsusb
Bus 001 Device 003: ID 2019:ed17 PLANEX GW-USValue-EZ 802.11n Wireless Adapter [Realtek RTL8188CUS]

Planex GW-USValue-EZはどうやらRealtek RTL8188CUSというチップを使っているらしいです。(Realtekは台湾の企業でメカニカルなカニのマークロゴで有名なので知っている人も多いと思いマス)

ドライバの状態を調べる

ということはRealtek RTL8188CUS用のドライバが読み込まれているか調べればいいのかな?

webで検索してみると、debianwikiのページが見つかった。debianについての情報がたくさん載っているページで重宝していマス。英語ではありますが。

debianwiki

このページによると、Realtekのチップのドライバは最初からLinuxに組み込まれていることがわかります。

さらにチップによってどのドライバが必要なのかが書かれていました。

どうやらRTL8188CUSはrtl8192cuというドライバが必要なようです。

Linuxではドライバはモジュールという形で動的に読み込まれたり外されたりするそうですが、rtl8192cuに該当するモジュールが読み込まれていればドライバが読み込まれているということになるので、確認してみます。

モジュールのリストを確認するにはlsmodコマンドを使います。

裸で使うとたくさん表示されてしまうので、grepと組み合わせて目的の表示に絞った方がいいかと思いマス。

@MINOの環境では以下のような表示になりました。

$ lsmod | grep rtl8192cu

rtl8192cu              66216  0 
rtl_usb                17592  1 rtl8192cu
rtlwifi                54719  2 rtl_usb,rtl8192cu
rtl8192c_common        40162  1 rtl8192cu
mac80211              474277  4 ath9k,rtl_usb,rtlwifi,rtl8192cu
usbcore               195340  7 uvcvideo,rtl_usb,ehci_hcd,ehci_pci,usbhid,rtl8192cu,xhci_hcd

 

結果表示の一行目にバッチリrtl8192cuモジュール(ドライバ)が読み込まれていることがわかリました。

つまりPlanex GW-USValue-EZが使えない理由はドライバではなさそうです。心折れそう。

ファームウエアの存在

いろいろ調べているうちにPlanex GW-USValue-EZが使えない理由がわかりました。

結論から言うと必要なファームウエアが読み込まれていなかったからだったデス。

恥ずかしながら、ファームウエアが何を意味しているのかがよくわかっていませんでした。デバイスはドライバーさえ組み込めれば、動くものだと思っていました。

ファームウエアとはチップの中の制御コンピュータを動作するためのプログラムのことで、ファームウエアがなければチップが動作しないので使えなかったということのようです。

ドライバはOSから周辺機器を使うためのプログラムでチップの中の人のことなど関係ないので、ドライバが正常に読み込まれていますが、製品が使えないという事態が起こるのです。

それではファームウエアが読み込まれていない状態を確認してみます。

ファームウエアをインストールする前の状態でGW-USValue-EZを挿してdmasgコマンドしてみると以下のような出力が得られました。

[  102.111416] usb 1-2: new high-speed USB device number 5 using xhci_hcd
[  102.241366] usb 1-2: New USB device found, idVendor=2019, idProduct=ed17
[  102.241376] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  102.241382] usb 1-2: Product: GW-USValue-EZ
[  102.241387] usb 1-2: Manufacturer: GW-USValue-EZ
[  102.241391] usb 1-2: SerialNumber: 00e04c000001
[  102.242273] rtl8192cu: Chip version 0x10
[  102.285761] rtl8192cu: MAC address: 00:22:cf:46:df:11
[  102.285770] rtl8192cu: Board Type 0
[  102.285842] rtl_usb: rx_max_size 15360, rx_urb_num 8, in_ep 1
[  102.285885] rtl8192cu: Loading firmware rtlwifi/rtl8192cufw_TMSC.bin
[  102.285915] usb 1-2: firmware: failed to load rtlwifi/rtl8192cufw_TMSC.bin (-2)
[  102.285921] usb 1-2: Direct firmware load failed with error -2
[  102.285925] usb 1-2: Falling back to user helper
[  102.289818] usb 1-2: firmware: failed to load rtlwifi/rtl8192cufw.bin (-2)
[  102.289826] usb 1-2: Direct firmware load failed with error -2
[  102.289830] usb 1-2: Falling back to user helper
[  102.291665] rtlwifi: Loading alternative firmware rtlwifi/rtl8192cufw.bin

デバイスを検知して、ドライバを組み込むまでは特にエラーは出ていませんが、[102.285885]以降にエラーが立て続けにでていることがわかります。

firmware: failed to load rtlwifi/rtl8192cufw_TMSC.bin (-2)

firmware: failed to load rtlwifi/rtl8192cufw.bin (-2) です。

これはrtlwifi/rtl8192cufw_TMSC.binrtlwifi/rtl8192cufw.binのロードに失敗した旨の内容です。

このrtl8192cufw_TMSC.binrtl8192cufw.binがファームウエアに当たるものです。

DFSGに準拠しているか

未確認ですがubuntuやmintではおそらくこのファームウエアは最初から入っているかと思います。

しかしdebianはDFSG(debian社会契約に含まれる Debian フリーソフトウェアガイドライン)に準規したソフトウエアしか含まないディストリビューション。

今回目的のファームウェアはDFSGには準規しているソフトウエアではないです。というかファームウエアの多くはプロプライエタリだと思います。

ドライバはあるのにファームウエアがないというちぐはぐな状態はそのような理由によるのだろうと思います。

このようにdebianを使っていると、どうしてもDFSGに準規しないソフトウエアやプログラムが必要になってくる場合があります。(でもそこが好きなところでもあります)

DFSGに準規しないソフトウエアを使えないのはやはり現実的では無いということで、debianではDFSGに準規しないソフトウエアを含んだリポジトリ領域を追加することが可能です。

初期ではリポジトリにmain(DFSGに完全準規)が記述されていますが、ここにcontrib(DFSGに準規するが依存関係おいてnon-freeが含まれており準規しない)とnon-free(DFSGに準規しない)を追加記述することによって、DFSGに準規しないソフトウエアやプログラムも参照・インストールすることができます。

ファームウェアのインストール

リポジトリURLを管理している/etc/apt/sources.listにある公式URLにcontrib non-freeを追加してみました。

deb http://ftp.jp.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ jessie main contrib non-free

その後、新しいパッケージリストが反映されるようにします。

$ sudo apt update

Details of package(https://packages.debian.org/hu/jessie/firmware-realtek)で確認したところGW-USValue-EZのファームウエアは

firmware-realtek

というパッケージに含まれていることがわかりました。

これをインストールします。

$ sudo apt install firmware-realtek -y

インストールすると以下のディレクトリにファームウエアが入っていることが確認できます。

/lib/firmware/rtlwifi/rtl8

rtl8188efw.bin          rtl8192cufw_A.bin       rtl8723aufw_B.bin
rtl8188eufw.bin         rtl8192cufw_B.bin       rtl8723aufw_B_NoBT.bin
rtl8192cfw.bin          rtl8192cufw_TMSC.bin    rtl8723befw.bin
rtl8192cfwU.bin         rtl8192defw.bin         rtl8723fw.bin
rtl8192cfwU_B.bin       rtl8192sefw.bin         rtl8723fw_B.bin
rtl8192cufw.bin         rtl8712u.bin            rtl8821aefw.bin

さて再度GW-USValue-EZを挿してみます。

[22009.865610] usb 1-2: USB disconnect, device number 5
[22018.999712] usb 1-2: new high-speed USB device number 6 using xhci_hcd
[22019.129427] usb 1-2: New USB device found, idVendor=2019, idProduct=ed17
[22019.129436] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[22019.129441] usb 1-2: Product: GW-USValue-EZ
[22019.129445] usb 1-2: Manufacturer: GW-USValue-EZ
[22019.129449] usb 1-2: SerialNumber: 00e04c000001
[22019.130292] rtl8192cu: Chip version 0x10
[22019.174318] rtl8192cu: MAC address: 00:22:cf:46:df:11
[22019.174326] rtl8192cu: Board Type 0
[22019.174396] rtl_usb: rx_max_size 15360, rx_urb_num 8, in_ep 1
[22019.174434] rtl8192cu: Loading firmware rtlwifi/rtl8192cufw_TMSC.bin
[22019.174507] usb 1-2: firmware: direct-loading firmware rtlwifi/rtl8192cufw_TMSC.bin
[22019.174773] ieee80211 phy3: Selected rate control algorithm 'rtl_rc'
[22019.176898] rtlwifi: wireless switch is on
[22020.315029] rtl8192cu: MAC auto ON okay!
[22020.327578] rtl8192cu: Tx queue select: 0x05
[22020.680678] IPv6: ADDRCONF(NETDEV_UP): wlan1: link is not ready

ファームウエアが読み込まれ、GW-USValue-EZが使用可能になったことが確認できます。

実際に利用してみる

ちゃんと認識されています。(USB Wi-FiというのがGW-USValue-EZのことです)

network_usb

usblun_on

そしてちゃんと使えています。じゃじゃ〜ん。やったぜ!!

補足・ハマりポイント

USBドングルの発熱

今回の記事の内容とは少し離れますが、小型の無線LANアダプタは発熱しやすいようです。

挿してからしばらくすると熱がぐんぐん上がってきます。

@MINOのノートパソコンはちょうどパームトップの横にusbポートがあるので、そこに挿していますが、パームトップが尋常じゃないくらいに熱くなります。

外したばかりのアダプタはちょっと触ってられないくらい熱くなっているので、怖いです。

おそらく小型の無線lanアダプタの設計上のやむをえない仕様なのだろうと思います。ちっちゃいから。

気をつけないとUSBポートも熱の影響で壊れてしまいかねません。

無線LANアダプタはそんなに高くないので、壊れても仕方がないかなと思えますが、ノートパソコンが壊れてしまっては目も当てられないです。

USBハブなどを介して挿した方がいいかもしれないです。

後記

プログラミングの勉強をしていると、どうしてもインフラの分野も勉強する必要が出てきます。

特にサーバの知識なんかはかなり必要になりますよね。

今回の記事はごく個人的な環境での設定ですが、経験値は積むことができました。

なにごともチャレンジしてみようと思います。