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