以前、 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 で自動的に処理すべきだけどできていない)。
- git clean -f を実行する(#include <stdarg.h> が見つからないと言われるため)
- make
- sudo ./dkms-remove.sh
- 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
で消してしまうのが楽。