AIC8800 WiFi 驱动:6.17 内核适配与安装总结
记一次在Ubuntu 24.04(内核 6.17)上对 UGREEN WiFi6 AX300(AIC8800)驱动的适配与安装过程。
资源下载
- 绿联官方驱动下载(Linux)
绿联 Wi-Fi 6 无线网卡 AX300 系列驱动(Linux 系统)
适用型号:CM760-25262、CM761-35263、CM860-75511、CM957-75614 | 文件版本:V1.6
一、背景与问题
- 终端沙箱报错
在 Cursor 中出现 “Terminal sandbox could not start”,与 Linux 6.2+ 的 AppArmor 有关。可安装官方 AppArmor 包或使用~/.cursor/sandbox.json中"type": "insecure_none"临时关闭沙箱。 驱动编译失败
执行sudo apt install curl时触发了未配置完成的aic8800fdrvpackage,其 post-install 脚本在编译内核模块时失败,原因包括:- 内核 6.17 中
del_timer/del_timer_sync已改为timer_delete/timer_delete_sync - 5.4+ 中
wakeup_source_create/add/remove/destroy已移除,需用wakeup_source_register/wakeup_source_unregister - cfg80211 回调
set_wiphy_params、set_tx_power增加radio_idx参数 cfg80211_rx_spurious_frame、cfg80211_rx_unexpected_4addr_frame增加link_id参数- 定时器回调中
from_timer需改为container_of等适配 - 部分 switch 需要显式
fallthrough以消除 -Wimplicit-fallthrough 报错
- 内核 6.17 中
二、源码修改清单(6.17 内核适配)
驱动源码路径:aic8800_linux_drvier/drivers/aic8800/aic8800_fdrv/(及同目录下相关文件)。
| 文件 | 修改内容 |
|---|---|
| aicwf_tcp_ack.c | 增加 #include <linux/timer.h> |
| rwnx_compat.h | 增加 #include <linux/timer.h>;6.2+ 用宏将 del_timer/del_timer_sync 映射为 timer_delete/timer_delete_sync;6.2+ 为 from_timer 提供兼容宏(实际多数处已改为 container_of) |
| rwnx_wakelock.c | 5.4+ 使用 wakeup_source_register(dev,name) 与 wakeup_source_unregister(ws);rwnx_wakeup_init 改为接收 struct rwnx_hw * 以传入 dev;rwnx_wakeup_deinit 在 5.4+ 仅调用 wakeup_source_unregister |
| rwnx_wakelock.h | rwnx_wakeup_init 声明改为 (struct rwnx_hw *, const char *);增加 struct rwnx_hw 前向声明 |
| rwnx_main.c | 增加 #include <linux/timer.h>;set_wiphy_params 在 6.2+ 增加 int radio_idx;set_tx_power 在 6.2+ 增加 int radio_idx;定时器回调中用 container_of(t, struct rwnx_hw, p2p_alive_timer) 等替代 from_timer;多处 switch 增加 fallthrough; |
| rwnx_rx.c | 增加 #include <linux/timer.h>;6.2+ 对 cfg80211_rx_spurious_frame / cfg80211_rx_unexpected_4addr_frame 增加第三参数 link_id(传 -1);defrag_timeout_cb、reord_timeout_handler 中用 container_of(t, struct defrag_ctrl_info, defrag_timer) 等替代 from_timer |
| rwnx_tx.c | 一处 switch 增加 fallthrough; |
| aicwf_sdio.c | 定时器回调中用 container_of(t, struct aic_sdio_dev, timer) 替代 from_timer |
三、编译驱动
在驱动目录下执行(需已安装对应内核头文件,如 linux-headers-$(uname -r)):
cd /path/to/UGREEN_WiFi6_AX300_Driver_Linux_.../aic8800_linux_drvier/drivers/aic8800
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules成功后会生成:
aic_load_fw/aic_load_fw.koaic8800_fdrv/aic8800_fdrv.ko
四、安装脚本说明
原 install_setup.sh 使用 su -c,在无交互终端时无法输入密码。因此新增两个脚本,均在 项目根目录下的 aic8800_linux_drvier 中执行。
1. install_with_sudo.sh(安装固件与 udev)
- 复制
fw/aic8800DC到/lib/firmware/ - 复制
tools/aic.rules到/etc/udev/rules.d/ - 执行
udevadm trigger与udevadm control --reload - 若存在
/dev/aicudisk等虚拟光驱设备则执行 eject
使用:
cd /home/fsy/Downloads/UGREEN_WiFi6_AX300_Driver_Linux_CM760-25262_CM761-35263_CM860-75511_V1.6/aic8800_linux_drvier
./install_with_sudo.sh按提示输入 sudo 密码即可。
2. load_modules.sh(加载内核模块)
- 先检查
aic_load_fw、aic8800_fdrv是否已加载(lsmod) - 未加载则执行
sudo insmod ...加载对应.ko - 若已加载(例如之前装过 aic8800fdrvpackage),会提示“已在运行,跳过”,避免 “File exists” 报错
使用:
cd /home/fsy/Downloads/UGREEN_WiFi6_AX300_Driver_Linux_CM760-25262_CM761-35263_CM860-75511_V1.6/aic8800_linux_drvier
./load_modules.sh五、推荐操作顺序
- 应用上述源码修改并完成编译(第三节)。
- 在
aic8800_linux_drvier目录执行:./install_with_sudo.sh。 - 再执行:
./load_modules.sh。 - 使用
ip a或nmcli device wifi等确认无线网卡是否出现并可用。
六、若通过 deb 包安装
若系统之前或之后通过 aic8800fdrvpackage 的 deb 安装,需保证其使用的源码与本次修改一致,或在安装前先移除该包再按本文档从源码编译并安装:
sudo dpkg --remove --force-remove-reinstreq aic8800fdrvpackage # 仅当该包导致问题时然后再按第三、四节编译并运行 install_with_sudo.sh 与 load_modules.sh。
文档基于当前驱动版本与内核 6.17.0-14-generic 整理。


评论 (0)