起因
- 买了个 usb wifi 网卡,很久之前买的了,忘记是为何而买,恰巧过年回家把老家的
r4s
下线了,寻思着给他用吧
驱动
- 一开始
lsusb
看到的设备 id 是 0bda:1a2b
,于是 usb_modeswitch -KW -v 0bda -p 1a2b
切换成 wifi
设备了,设备 id 变为 0bda:b851
- 搜索得驱动源码:
https://github.com/biglinux/RTL8851bu
(坑爹的开始)
-
Armbian
系统,升级内核,安装 build-essential/dkms
和头文件,编译报错,找不到对应 arch 的 Makefile,看了下不知为何 armbian
用的是 arm64
,make
用的 aarch64
,我记得标准应该是 aarch64
才对,遂修改 Makefile
和 dkms.conf
- 函数符号不对,
cfg80211_cac_event
提示缺参数,内核升级的后的常见问题,遂查找头文件看 cfg80211_cac_event
函数原型和注释,其中 link_fd
注释说明可以是 0
所以无脑改 0
,一共两处
- 驱动源码里,
iface->rtw_wdev->cac_started
找不到,说结构体上没有,遂翻内核源码看 struct wireless_dev
定义,发现需要从 links[]
里取,传入 index
意义是 link_fd
,因为上面说这处可以是 0
遂直接写 0
尝试,vim
批量替换好
- 编过了,
insmod
提示缺符号,modprobe cfg80211
后重新加载,跑起来啦,兴奋🥰

傻逼
- 既然跑起来了,寻思
fork
仓库修改一份留存,然后发现 tmd 人家有个新仓库(不看 readme 的傻逼是我 555),https://github.com/biglinux/rtl8831
,翻阅对应的位置看,人家已经适配好了高版本内核 2333

