ハードの設定初体験
環境を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についての情報がたくさん載っているページで重宝していマス。英語ではありますが。
このページによると、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.bin
やrtlwifi/rtl8192cufw.bin
のロードに失敗した旨の内容です。
このrtl8192cufw_TMSC.bin
やrtl8192cufw.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の
ことです)
そしてちゃんと使えています。じゃじゃ〜ん。やったぜ!!
補足・ハマりポイント
USBドングルの発熱
今回の記事の内容とは少し離れますが、小型の無線LANアダプタは発熱しやすいようです。
挿してからしばらくすると熱がぐんぐん上がってきます。
@MINOのノートパソコンはちょうどパームトップの横にusbポートがあるので、そこに挿していますが、パームトップが尋常じゃないくらいに熱くなります。
外したばかりのアダプタはちょっと触ってられないくらい熱くなっているので、怖いです。
おそらく小型の無線lanアダプタの設計上のやむをえない仕様なのだろうと思います。ちっちゃいから。
気をつけないとUSBポートも熱の影響で壊れてしまいかねません。
無線LANアダプタはそんなに高くないので、壊れても仕方がないかなと思えますが、ノートパソコンが壊れてしまっては目も当てられないです。
USBハブなどを介して挿した方がいいかもしれないです。
後記
プログラミングの勉強をしていると、どうしてもインフラの分野も勉強する必要が出てきます。
特にサーバの知識なんかはかなり必要になりますよね。
今回の記事はごく個人的な環境での設定ですが、経験値は積むことができました。
なにごともチャレンジしてみようと思います。