GW-US54GXSで無線LAN接続を試みる
引越した部屋の間取り上、無線LANを使う必要が出てきたので、試行錯誤することに。
今回の肝は、FreeBSDでの動作報告が殆ど無いGW-US54GXSで動くのか?というところ。
- Kernelを7.0にあげ
FreeBSDでは、zydというドライバでGW-US54GXSを扱うらしいのだけど、6.3には取り込まれていないみたい。当該ドライバのソースファイルだけ持ってきて組み込む手もあるけど(面倒だが…)、この際、7.0にあげてみることにする。
cvsupのtagsはRELENG_7。
- kldload if_zyd
if_zydモジュールのkldloadをすっかり忘れていてugenのまま時間を浪費してしまった。てっきり、GENELICに書かれているものだと… /boot/loader.confに以下を記載したら、zyd0というインターフェースを認識してくれた。
if_zyd_load=yes
- rc.confにifconfig_zyd0
本当は、/etc/start_if.zyd0のほうが良いのかも知れないけど、とりあえず動かすこと優先。さらにとりあえずWEPで。
ifconfig_zyd0="DHCP ssid WARPSTAR-HOGEHOGE mode 11g weptxkey 1 wepkey 1:0x0123456789ABC wepmode on"
status: associatedになった。
- 認識するものの通信できず
無線LANアクセスポイント兼ルータへのpingが通らない。こんなエラーが出てしまう。
zyd0: device timeout
man zydによると、
zyd%d: device timeout A frame dispatched to the hardware for transmis- sion did not complete in time. The driver will reset the hardware. This should not happen.
だそうだから、難しそうだ…
#後程わかったけど、ifconfigの設定ミス。
#設定ミスってても、status: associatedになっちゃうときがあるみたい。
- currentのドライバを移植してしまおうか?
HEADタグの最新版if_zyd*を持ってきてコンパイルしたのだけど、他の最新ファイルに依存していてコンパイルエラーに。あまり本格的にやるとメンテナンスが大変そうなので、ちょっと保留。
- 救世主?ndisgen
man ndisgen
ndisgen -- generate a FreeBSD driver module from a Windows(R) NDIS driver distribution
という救世主的なツールを発見。使ってみる。
mitsu@garlic$ sudo ndisgen ZD1211BU.INF ZD11BU2K.SYS : 色々説明が出てくるのでEnter押下. : Press enter to try converting the files now: ndiscvt: line 66: %Manufacturer%: syntax error. CONVERSION FAILED
がーん。
あきらめきれないので、ZD1211BU.INFの中を覗いてみる。
61 HKR,, DeviceVxDs, 0, %DriverFileName% 62 63 ; NDIS Info 64 HKR,NDIS, MajorNdisVersion, 1, 03 65 HKR,NDIS, MinorNdisVersion, 1, 0A 66 HKR,NDIS, LogDriverName, 0, %CustomServiceName%(%Manufacturer%) 67
INFファイルの書式はわからないんだけども、%Hoge%が変数みたいなものか?66行目で真新しいのは、(%Hoge%)というフォーマット?べた書きしちゃえばよいのかしら。と思って試行錯誤を繰り返すも埒が明かず。直しても直しても続々と出てくるエラーを前に、とりあえずあきらめる。
と思ったけど、もう一度徹底的に直してみる。なんとか成功。結局何を直したかというと
- 改行コードをCR-LFからLFに変更(これは念のため)
- %CustomServiceName%(%Manufacturer%)は思い切って(%Manufacturer%)を削除
- ダブルクォーテーションは削除
などなど。で、ZD11BU2K_SYS.koが生成された。
- kldunload if_zyd
mitsu@garlic$ sudo kldunload if_zyd mitsu@garlic$ kldstat Id Refs Address Size Name 1 1 0xc0400000 9796f4 kernel mitsu@garlic$
- kldload ZD11BU2K_SYS.ko
mitsu@garlic$ sudo kldload ./ZD11BU2K_SYS.ko Password: mitsu@garlic$ mitsu@garlic$ kldstat Id Refs Address Size Name 1 9 0xc0400000 9796f4 kernel 2 1 0xc292d000 71000 ZD11BU2K_SYS.ko 3 1 0xc299e000 c000 if_ndis.ko 4 2 0xc29ac000 16000 ndis.ko mitsu@garlic$
となるものの、ifconfigには現れず… この辺が諦め時か…
- さらに諦めない⇒成功
もう一度、原点に返りif_zydの設定を見直すことにした。
- wepkeyはhexdecimal-asciiっぽくみえるけど、ただの文字列では?
- 念のためchannelも明示的に指定したほうが良いのでは?
といった辺りを弄ってみると以下のようになった。
ifconfig_zyd0="DHCP ssid WARPSTAR-HOGE channel 7 mode 11g weptxkey 1 wepkey 1:0123456789ABC wepmode on"
すると…成功!
きちんとDHCPでIPアドレスを付与してもらえて、インターネットにも繋がるようになった。
- とはいえ不安定だったりする
zyd0: device timeout zyd0: could not transmit buffer: TIMEOUT
割と頻繁にこんなエラーがでて通信できなくなってしまう。USB抜き差しすれば復活するが、実運用を考えると難しい。
#すぐ隣のWindowsを使った感じでは、電波(っていうのかな?)自体は十分届いているようだ。
- 結局
この無線LAN USBアダプタはLinux(Ubuntu)に譲り、FreeBSDとかのPC群へは長〜い有線LANを這わせることにしよう。その際は壁とかを傷つけないようにしよう。賃貸だから。
無線LANはまるっきり素人だったので、挙動が分かったりしていい勉強になった。久しぶりに、程よく燃え尽きたので結構満足。