とにかく書く

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

Arch Linux で BUFFALO「WI-U2-433DHP」を使う(2018/02/18 修正版)

以前、 BUFFALO の WI-U2-433DHP をつかうためにドライバとしてGitHub - paralin/rtl8821au: RTL8821au driver updated to work on the latest kernels を使っていた。ところが linux/timer.h にあった init_timer 関数(マクロだけど)や、struct timer_list の data メンバーが無くなってしまい、またコンパイルエラーが出るようになった。
結局、AUR のドライバ を使うことで解決できるようになったのでメモする。

2019/10/10 追記:この記事で使用していたドライバは、メンテナによると Kernel 5.3.1 から使えなくなっているとのことです。代わりに aircrack-ng の git または aur を使うようメンテナにおすすめされています。また試したら記事にします。
2020/05/05 追記: AUR の方で 無事に動作しました。


そのままではWI-U2-433DHPのデバイスIDが無いため、前回同様ソースコードを取得して追加する。

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

8812au としてダウンロードされる。前回行った Makefile の CONFIG 設定などは既になされている。
8821のデバイスIDが並んでいるところにWI-U2-433DHPのデバイスIDを追加する。

rtl8812au/os_dep/linux/usb_intf.c

#ifdef CONFIG_RTL8821A
/* 省略 */
{USB_DEVICE(0x0411, 0x029b),.driver_info = RTL8821}, /* Buffalo - WI-U2-433DHP この行を追加した */
#endif

あとは rtl8812au ディレクトリにてインストールするだけ。

$ sudo ./dkms-install.sh

あとは ワイヤレス設定 - ArchWiki に従って設定を進めていく。

カーネルをアップデートした場合

2018/06/23追記
カーネルをアップデートした後の処理をいつも忘れてしまうためメモする(dkms で自動的に処理すべきだけどできていない)。

  1. git clean -f を実行する(#include <stdarg.h> が見つからないと言われるため)
  2. make
  3. sudo ./dkms-remove.sh
  4. sudo ./dkms-install.sh

Linux カーネル 5.2.0 の対処

2019/07/20追記
カーネルを5.2.0にしたら、またビルドが通らなくなった。
ビルドエラーから、以下の対処をして解決。

os_dep/linux/os_intfs.c
カーネルバージョン 5.2.0 未満の判定を追加した。

static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)
	, struct net_device *sb_dev
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
	, void *accel_priv
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 2, 0))
	, select_queue_fallback_t fallback
#endif
)

dkms_install.sh
git から取得すると上の変更が効かなくなるので、下記2行をコメントアウトした。

# mkdir -p "${DRV_USR_SRC}"
# git archive --format=tar.gz --worktree-attributes --verbose HEAD | tar -xz -C "${DRV_USR_SRC}"

全ファイルをそのまま手動でコピーしてdkms_install.shを実行すればOK

 $ sudo cp -R rtl8812au /usr/src/rtl8812au-5.1.5
 $ sudo ./dkms_install.sh

もし、/usr/src/rtl8812au-5.1.5 が既にできているなら

 $ sudo ./dkms_remove.sh

で消してしまうのが楽。