Wi-Fiドングル「Planex GW-900D」を購入したのですが、raspberry piにドングルを挿しても次のように表示されるだけで、Wi-Fiとして認識できませんでした。登録されているUSBデバイスをlsusbコマンドで表示すると、次のようになりました。
pi@raspberrypi ~ $ sudo lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB Bus 001 Device 005: ID 2019:ab30 PLANEX Bus 001 Device 006: ID 054c:06c3 Sony Corp.
pi@raspberrypi ~ $ lsusb -s 1:5 -v Bus 001 Device 005: ID 2019:ab30 PLANEX Couldn’t open device, some information will be missing Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x2019 PLANEX idProduct 0xab30 bcdDevice 0.00 iManufacturer 1 iProduct 2 iSerial 3 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 53 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 500mA
添付されているLinuxのドライバではコンパイルできなかったので、Planex GW-900Dで使用しているチップ「Realtek RTL8812AU」のドライバを探しました。探してみた結果、githubのRealtek RTL8812AUソースコードが使えることがわかりました。gnab/rtl8812auからドライバを持ってきます。コンパイル環境は、「Raspberry Piのデバイスドライバ開発環境の構築 」を参考にしてください。
コンパイル環境のカーネルのバージョンを示します。
root@raspberrypi:/home/pi/GW-900D/rtl8812au-master# uname -a Linux raspberrypi 3.12-1-rpi #1 Debian 3.12.9-1+rpi2 (2014-12-14) armv6l GNU/Linux
ダウンロードした「rtl8812au-master.zip」をraspberry piの任意のフォルダ「/home/pi/GW-900D」に保存し、uzipコマンドで解凍します。
root@raspberrypi:/home/pi/GW-900D# unzip rtl8812au-master.zip Archive: rtl8812au-master.zip a53c4ece2757c54515d603206046abd1fe88f240 creating: rtl8812au-master/ inflating: rtl8812au-master/Kconfig inflating: rtl8812au-master/Makefile ・ ・
解凍すると「rtl8812au-master」フォルダができるので、Planex GW-900DのベンダIDの設定を確認します。Planex GW-900DのベンダIDの設定については、os_dep/linux/usb_intf.cの273行目に次の定義があるので、特に変更が必要ありませんでした。
#ifdef CONFIG_RTL8812A ・ ・ {USB_DEVICE(0x2019, 0xAB30),.driver_info = RTL8812}, /* Planex – Abocom */
ディフォルトでは構成がx86/PCとなっているので、raspberry piとするために、 Makefileの定義(52行目から)を変更します。
・ CONFIG_PLATFORM_I386_PC = n ・ CONFIG_PLATFORM_ARM_RPI = y ・
このフォルダに移動しmakeコマンドを実行します。次の表示が表示されます。
root@raspberrypi:/home/pi/GW-900D/rtl8812au-master# make make ARCH=armv6l CROSS_COMPILE= -C /lib/modules/3.12-1-rpi/build M=/home/pi/GW-900D/rtl8812au-master modules CROSS_COMPILE= -C /lib/modules/3.12-1-rpi/build M=/home/pi/GW-900D/rtl8812au-master modules make[1]: Entering directory `/usr/src/linux-headers-3.12-1-rpi’ CC [M] /home/pi/GW-900D/rtl8812au-master/core/rtw_cmd.o CC [M] /home/pi/GW-900D/rtl8812au-master/core/rtw_security.o CC [M] /home/pi/GW-900D/rtl8812au-master/core/rtw_debug.o CC [M] /home/pi/GW-900D/rtl8812au-master/core/rtw_io.o ・ ・ LD [M] /home/pi/GW-900D/rtl8812au-master/8812au.o Building modules, stage 2. MODPOST 1 modules CC /home/pi/GW-900D/rtl8812au-master/8812au.mod.o LD [M] /home/pi/GW-900D/rtl8812au-master/8812au.ko make[1]: Leaving directory `/usr/src/linux-headers-3.12-1-rpi’
/home/pi/rtl8812au/os_dep/linux/os_intfs.o にはワーニングが出ますが問題ありません。
コンパイルが終了すると、次のファイルが作成されます。
root@raspberrypi:/home/pi/GW-900D/rtl8812au-master# ls 8812au.ko 8812au.mod.o clean hal include Makefile Module.symvers README.md wlan0dhcp 8812au.mod.c 8812au.o core ifcfg-wlan0 Kconfig modules.order os_dep runwpa
作成したカーネルモジュール「8812au.ko」の情報を表示します。
root@raspberrypi:/home/pi/GW-900D/rtl8812au-master# modinfo 8812au.ko filename: /home/pi/GW-900D/rtl8812au-master/8812au.ko version: v4.2.2_7502.20130517 author: Realtek Semiconductor Corp. description: Realtek Wireless Lan Driver license: GPL srcversion: 26CD1F3E2157FD984CB5670 depends: vermagic: 3.12-1-rpi mod_unload modversions ARMv6 p2v8 parm: rtw_ips_mode:The default IPS mode (int) parm: rtw_regulatory_id:int parm: ifname:The default name to allocate for first interface (charp) parm: if2name:The default name to allocate for second interface (charp) parm: rtw_initmac:charp parm: rtw_channel_plan:int parm: rtw_chip_version:int
コンパイルエラーについて
Realtek RTL8812AUドライバソフトの中で、コンパイルするとlinux/os_intfs.cがエラーになるものがあります。これはlinux/os_intfs.cとカーネルのバージョンが一致していない場合に発生します。私の場合、Web上で他のRealtek RTL8812AUドライバソフトを探し、自分のデバイスドライバ開発環境でコンパイルできるドライバソフトを探しました。
CC [M] /home/pi/GW-900D/rtl8812AU_8821AU_linux_v4.2.2_7502.20130517/os_dep/linux/os_intfs.o /home/pi/GW-900D/rtl8812AU_8821AU_linux_v4.2.2_7502.20130517/os_dep/linux/os_intfs.c: In function ‘rtw_proc_init_one’: /home/pi/GW-900D/rtl8812AU_8821AU_linux_v4.2.2_7502.20130517/os_dep/linux/os_intfs.c:352:3: error: implicit declaration ・ ・ cc1: some warnings being treated as errors make[4]: *** [/home/pi/GW-900D/rtl8812AU_8821AU_linux_v4.2.2_7502.20130517/os_dep/linux/os_intfs.o] Error 1 make[3]: *** [_module_/home/pi/GW-900D/rtl8812AU_8821AU_linux_v4.2.2_7502.20130517] Error 2 make[2]: *** [sub-make] Error 2 make[1]: *** [all] Error 2 make[1]: Leaving directory `/usr/src/linux-headers-3.12-1-rpi’ make: *** [modules] Error 2