とにかく書く

日々の雑感や知り得たことを、とにかく書いています

Arch Linux で BUFFALO「WI-U2-433DHP」を使う

Arch Linux で BUFFALO「WI-U2-433DHP」を使うためにやったことのメモ。


この記事の記述は古く、もはや使えません。新しい記事を参照してください。


かわうそまつり: BUFFALO「WI-U2-433DHP」をUbuntu14.04で使えるようにする! を参考にさせていただいた。ドライバを探すなどの苦労するところはお知恵を拝借し大変助かった。ただ、一部コンパイルがエラーを出したためその解決策をあわせて記載する。

GitHub - paralin/rtl8821au: RTL8821au driver updated to work on the latest kernels からソースコードを取得する。

$ git clone https://github.com/paralin/rtl8821au.git

ソースコードから以下を編集する。
rtl8821au/Makefile

CONFIG_RTL8821A = n → CONFIG_RTL8821A = y
CONFIG_PLATFORM_I386_PC = n → CONFIG_PLATFORM_I386_PC = y

rtl8821au/os_dep/linux/usb_intf.c

{USB_DEVICE(0x0E66, 0x0023),.driver_info = RTL8821}, /* HAWKING - Edimax */
{USB_DEVICE(0x2019, 0xAB32),.driver_info = RTL8821}, /* Planex - GW-450S */
{USB_DEVICE(0x0411, 0x029b),.driver_info = RTL8821}, /* Buffalo - WI-U2-433DHP この行を追加した */
#endif

rtl8821au/include/osdep_service.h
signal_pending や flush_signals のプロトタイプ宣言がないためコンパイルエラーが出る。以下を追加。

#ifdef PLATFORM_LINUX
#include <linux/sched/signal.h>  /* この行を追加 */
#include <linux/signal.h> /* この行を追加 */
#include <osdep_service_linux.h>
#endif

rtl8821au/include/rtw_debug.h
_seq_dump としてマクロで置換されている seq_printf が void を返すのに if 文の条件に書かれているためコンパイルエラーになる。特に問題なさそうだったので、if 条件式を外した。

            /*if (_seqdump(sel, fmt, ##arg))*/ /*rtw_warn_on(1)*/    \
            _seqdump(sel, fmt, ##arg);                                \

rtl8821au/os_dep/linux/ioctl_linux.c
rtl8821au/os_dep/linux/rtw_android.c
is_compat_task() は in_compat_syscall() に変わった模様(参考:
[v2,16/16] x86/compat: Remove is_compat_task - Patchwork )文字列置換で対応した。

以上で(警告はいくつか出るものの)コンパイルは通るようになった。

 $ make
 $ sudo make install
 $ sudo modprobe 8821au
 $ lsmod

8821au が出力に含まれていればOK。あとは ワイヤレス設定 - ArchWiki に従って

 $ lsusb -v
 ID 0411:029b BUFFALO INC. が出力に含まれる
 $ ip link
enp0s29u1u6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000 が出力に出る。
enp0s29u1u6 が無線インターフェイスである。(dmesg | grep enp0s29u1u6 で rename したと出力される)。
 $ sudo ip link set enp0s29u1u6 up

最後に NetworkManager にて GUI でアクセスポイントを選択→パスワード入力→Apply で接続完了した。