目录
前言
在嵌入式系统开发中,移植外部硬件设备的驱动是一个常见的任务。本文将分享如何在全志平台上成功移植RTL8822CU无线模块的驱动,以实现无线网络功能。
提示:以下是本篇文章正文内容,下面案例可供参考
一、驱动源码获取
驱动源码一般由模块厂商提供,本文主要根据RTL8822CU_WiFi_linux_v5.14.0.3-2-gba458274c_COEX20211210-2727.20220418.tar.gz驱动程序进行交叉编译移植。
二、源码编译
**1、源码解压:**使用如下命令解压源码。
cpp
tar -zxvf RTL8822CU_WiFi_linux_v5.14.0.3-2-gba458274c_COEX20211210-2727.20220418
解压源代码目录如下图所示:
driver目录为驱动源码所在目录,目录结构如下所示:
2、Makefile修改。
查看Makefile结构,在平台关联配置项下添加T113-S3平台选项,并将该选项配置为"y",如下图所示:
仿照CONFIG_PLATFORM_ARM_SUN8I_W5P1配置项点添加T113配置项,如下图所示:
其中交叉编译器路径配置为:
cpp
CROSS_COMPILE := /opt/QZ/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-
内核路径配置为:
cpp
KSRC :=/home/cftc/workspace/QZ/T113-S3-V1.1-SDK-2022-09-20/sdk/out/kernel/build
驱动模块名称配置为:MODULE_NAME := wlan
3、驱动编译:
在当前目录执行 make 即可编译源码,编译报错如下图所示:
通过咨询模块厂家,得知platform_ARM_SUNxI_usb为android平台才会使用到,我们是在buildroot linux系统下使用,故无需包含该配置项点,修改Makefile配置如下图所示:
再次make clean,make即可成功编译驱动模块,正常编译如下图所示:
三、驱动模块加载测试
加载驱动报错,具体如下图所示:
通过Vs_intenal_I_am reallya filesystem and am NoTa driver得知,从Android R开始,安卓加强了代码标准化的管理,GK要求gki要求,s相关接口只能在1s代码中使用,其他模块不允许调用,同时对于vis read限制了外部使用,外部只能使用kemel read操作,但是使用kemel read也是不符合GKI要求的,规避手段,在调用kemnel read的源文件中增加声明即可绕过 (临时绕过手段,AndroidS上必须改掉文件系统的相关操作)MODULE IMPORT NS(VFS internal i am really a filesystem and am NOT a driver):
即可通过修改驱动源码,添加如下部分即可解决该报错问题:
驱动正常加载如下图所示:
至此大功告成!
总结
通过按照上述步骤进行移植,你应该能够在全志平台上成功驱动RTL8822CU无线模块。当然,每个平台和硬件配置可能会有所不同,但遵循这个基本流程应该可以帮助你顺利完成移植工作。移植驱动可能是一个复杂的任务,但也是嵌入式系统开发中非常有意义和有趣的一部分。希望本文对那些尝试在全志平台上移植RTL8822CU驱动的开发者们有所帮助。祝你们在项目中取得成功!