【经验总结】Ubuntu 22.04.5 LTS 将内核从5.15.0-140 升级到6.8.0-60后纽曼无线网卡无法使用解决措施
【经验总结】Ubuntu 22.04.5 LTS 将内核从5.15.0-140 升级到6.8.0-60后纽曼无线网卡无法使用解决措施
- 问题现象
- 定位过程
- 问题根因
- 解决方案
- 将内核内核从6.8.0-60 降级到5.15.0-140。
- 1、回滚内核版本
- 2、解决重启系统,找不到选择内核版本的菜单问题
- 3、将新版本的kernel卸载掉
- 4、在旧内核上重新安装无线网卡驱动
- 5、切换到旧内核,发现显示不对,需要重新安装一下跟这个内核匹配的显卡驱动
- 总结
问题现象
Ubuntu 22.04.5 LTS 将内核从5.15.0-140 升级到6.8.0-60后纽曼无线网卡无法使用。
纽曼 AC650 无线网卡相关的菜单不显示,无法通过wifi连接网络。
定位过程
通过 lsusb -v 输出 可以确认是 Realtek RTL8821CU 无线网卡(ID 0bda:c811) 已连接到系统,但存在驱动兼容性问题。
尝试手动安装 RTL8821CU 驱动,步骤如下所示:
sudo apt install git dkms build-essential
git clone https://github.com/brektrou/rtl8821CU.git
cd rtl8821CU
sudo ./dkms-install.sh
发现驱动编译失败,日志如下所示
$ sudo ./dkms-install.sh
About to run dkms install steps...
Creating symlink /var/lib/dkms/rtl8821CU/5.4.1/source -> /usr/src/rtl8821CU-5.4.1Kernel preparation unnecessary for this kernel. Skipping...Building module:
cleaning build area...
'make' KVER=6.8.0-60-generic........
........(bad exit status: 2)
ERROR (dkms apport): binary package for rtl8821CU: 5.4.1 not found
Error! Bad return status for module build on kernel: 6.8.0-60-generic (x86_64)
Consult /var/lib/dkms/rtl8821CU/5.4.1/build/make.log for more information.Kernel preparation unnecessary for this kernel. Skipping...Building module:
cleaning build area...
'make' KVER=6.8.0-60-generic................(bad exit status: 2)
ERROR (dkms apport): binary package for rtl8821CU: 5.4.1 not found
Error! Bad return status for module build on kernel: 6.8.0-60-generic (x86_64)
Consult /var/lib/dkms/rtl8821CU/5.4.1/build/make.log for more information.
Finished running dkms install steps.
查看驱动编译详细的日志
stevens@StevensSun-Desktop:~/workspace_github/rtl8821CU$ sudo grep -i error /var/lib/dkms/rtl8821CU/5.4.1/build/make.log -A5
/var/lib/dkms/rtl8821CU/5.4.1/build/os_dep/osdep_service.c:2618:16: error: implicit declaration of function ‘prandom_u32’; did you mean ‘get_random_u32’? [-Werror=implicit-function-declaration]
2618 | return prandom_u32();
| ^~~~~~~~~~~
| get_random_u32
cc1: some warnings being treated as errors
make[3]: *** [scripts/Makefile.build:243:/var/lib/dkms/rtl8821CU/5.4.1/build/os_dep/osdep_service.o] 错误 1
make[2]: *** [/usr/src/linux-headers-6.8.0-60-generic/Makefile:1925:/var/lib/dkms/rtl8821CU/5.4.1/build] 错误 2
make[1]: *** [Makefile:240:__sub-make] 错误 2
make[1]: 离开目录“/usr/src/linux-headers-6.8.0-60-generic”
make: *** [Makefile:2217:modules] 错误 2
原因:Linux 6.8内核移除了prandom_u32()函数,改用get_random_u32()
影响:驱动代码未同步更新,导致编译中断
整体意思就是:RTL8821CU 驱动编译失败的主要原因是内核6.8.0-60-generic与驱动版本5.4.1存在兼容性问题。
既然是与驱动版本5.4.1有兼容性问题,那么是否有最新的驱动?由于无法访问github,通过gitee中转了一下,依然没有发现新的驱动。或许未来某天会有兼容6.x.x.x的补丁之后,再来尝试吧。
基于以上只剩下一条路了,就是将内核版本降到5.x.x.x。
问题根因
Realtek RTL8821CU 无线网卡驱动加载失败,核心问题在于芯片初始化过程中出现硬件兼容性错误。最终确定了是 RTL8821CU 驱动与内核6.8.0-60-generic 存在兼容性问题。
解决方案
将内核内核从6.8.0-60 降级到5.15.0-140。
在实际操作中会遇到一些问题,在这里统一记录下:
1、回滚内核版本
如果是我这种现象,其实5.15.0-140还是在的,不需要再使用如下命令安装一次内核。
sudo apt install linux-image-5.15.0-140-generic
sudo reboot
2、解决重启系统,找不到选择内核版本的菜单问题
默认的ubuntu启动的时候,是看不到选择内核的启动菜单的,需要手动修改grub配置,才行
sudo vim /etc/default/grub
修改如下配置为menu,意思是强制显示菜单。
GRUB_TIMEOUT_STYLE=menu
修改完grub文件,保存一下。
执行如下命令,更新grub 相关配置
sudo update-grub
重启电脑,就会看到启动菜单了,注意,内核选择是在高级选项中,一般是第二个,请根据实际情况选择。
3、将新版本的kernel卸载掉
其实系统启动的时候,并不会自动选择旧的内核,需要我们手动修改grub配置,才能解决。我的情况比较特殊,因为我需要使用这个无线网卡,根本就使用不了6.8.0-60内核,就干脆卸载掉算了。
特别提醒:你一定要明确你当前使用的内核不是 6.8.0-60,否则后边的操作都会问题,由于我也没操作过,如果你遇到了,请告诉我,嘿嘿。
使用如下命令,查询内核的版本
uname -r
#以下内容是执行以上命令后,我的电脑的显示
5.15.0-140-generic
使用如下命令进行卸载目标内核:
sudo apt purge linux-image-6.8.0-60-generic \linux-headers-6.8.0-60* \linux-modules-6.8.0-60-generic
注意这里,不要使用 如下命令自动卸载内核,他有自己的一套逻辑,保留当前使用的,保留一个最新的,还保留一个临近旧的内核,要保留三个内核,我晕,我就是要卸载掉最新的内核,你这是逗我玩吗?
sudo apt autoremove --purge
执行完后,记得执行如下命令,清理残留配置
sudo update-grub
sudo apt autoremove --purge
备注:如果这一步中有报错,不要怕,反复执行一遍也是可以的。
4、在旧内核上重新安装无线网卡驱动
sudo apt install git dkms build-essential
git clone https://gitee.com/stevens-sun/rtl8821CU.git
cd rtl8821CU
sudo ./dkms-install.sh
备注:github国内还得靠梯子,使用gitee中转了一下代码,请自行甄别。原始驱动源代码地址:https://github.com/brektrou/rtl8821CU.git
这里一般就会编译和安装成功,如果编译还有问题,请自行问大模型助手。
5、切换到旧内核,发现显示不对,需要重新安装一下跟这个内核匹配的显卡驱动
以下操作仅供参考
sudo apt purge nvidia-*
sudo apt install nvidia-driver-xxxx
执行第一条命令的时候,注意下是driver的版本号是多少,我的比较老,是470, 就执行如下命令
sudo apt install nvidia-driver-470
执行成功后,重启电脑就OK来。
总结
遇到软件问题不要慌,可以多跟大模型交流一下,我这里使用的事360多纳米AI 大模型 https://bot.n.cn/,你也可以使用其他的大模型,非常方便。