此前提到,Thinkpad E490安装CentOS7.6遇到内核崩溃的问题,解决之后,安装CentOS7.6操作系统成功。
安装时发现,系统能够检测到有线网卡,但无法检测到无线网卡,说明CentOS7.6对此无线网卡的支持不足,缺失对应驱动。
此前安装的Windows10,Kali2019.2等操作系统都可以使用无线网卡。使用Kali过程中,无线还算稳定,去看了下Kali的内核版本为linux kernel 4.19.37,而当前CentOS7.6的内核版本为linux kernel 3.10.957。想想如从Kali对应版本的源码中提取对应网卡驱动源码来编译应该是可以的,但CentOS内核版本较低,又怕有些API无法兼容,或许要改些源码才能支持。
查看ThinkPad E490的硬件配置,无线网卡采用的是Realtek8822be。根据相关信息到搜索引擎查了些材料,大多是讲Ubuntu系统如何解决的,对CentOS的很少。对于Ubuntu,也是提到linux kernel 4.14开始内核直接有支持Realtek8822be无线网卡驱动。至于linux kernel 3.x,在github也有一些源码可以解决,但提到好多不稳定因素(如:系统重启了,又无线连接无线;无线常有断流现象;又有说要先进入Windows系统,再重启进入CentOS,无线网卡才能找扫描到无线连接列表。。。。)。
笔者抱着试一试的心态,先是到github找到rtlwifi-next项目,看到最近更新是17年的,预料到应该是没法稳定了。更新下载源码编译安装试了下,无线是可以用,但。。。网上说的问题都有(看来还是要另寻方案)。
新的方案,首选是对标Kali的内核版本,于是上www.kernel.org查看最新的版本,找到linux kernel 4.19.67,下载来分析下。
分析之后,发现rtl8822be是在drivers\staging\rtlwifi目录下,于是复制rtlwifi目录出来,移植CentOS7.6系统中。
在CentOS7.6系统中,进行编译之前,先对Makefile补充了一些内容(如下图所示,加到原Makefile顶部)
加到原Makefile底部(如下图所示)
编译时,需要root权限,系统要安装有当前内核版本的模块、头文件等。尝试执行make,结果发现有几个小问题,需要修改。
首先在base.h文件中增加一个定义(如下图所示)
其次core.c文件中,ktime_get_real_seconds()函数无法识别,改成另外方案替代。
struct timeval ts;
......
do_gettimeofday(&ts);
用ts.tv_sec替代ktime_get_real_seconds()。
rtl_op_suspend()、rtl_op_resume()二个函数都要修改。。
改好后,再进行make 编译,已经成功(如下图所示)。
接着执行make install安装(如下图所示)。
执行modprobe r8822be,动态加载模块(如下图所示)。
执行lsmod | grep r8822be,查看(如下图所示)。
执行modinfo r8822be,查看模块相关信息(如下图所示)。
安装完后,可以使用无线网卡了!接下来几天体验了下,比较稳定了,问题倒也还有,只是不常现。Realtek8822be无线网卡驱动还是有一些未完成的工作,在分析这些代码过程中,看到多多处代码注释有TODO字眼,离稳定版还有一些距离的。这里贴出TODO列表(如下图所示),有兴趣的朋友可加入一起完成噢~~
本文只是描述在CentOS7.6系统中如何解决Realtek8822be无线网卡驱动安装的问题。如您是在其他发行版linux系统中遇到类似问题、或者是其他不同厂家的电脑有类似问题亦可参考此文,如有不懂之处,可互相交流解决。
注:本文为Toyo Lau原创,未经许可不得在任何平台转载,侵权必究。如需转载,可关注公众号,在后台留言,与作者联系,取得许可才能转载~
微信扫一扫,发现更精彩。