正文
本合集的是我当初调试 RK3588 平台时的原始笔记——只保留了那些踩过坑的问题接口,没出过问题的内容全删掉了。文章框架如下:
其中,**“调试过程”**章节可能有点意思(记录了我踩过的坑),其他章节无关紧要。
硬件设计
对照原理图找到如下 3 个关键点:
PCIe 接口的 WiFi 基本就有两种:贴在板子上模块及M2接口(这里方案正是),但它们关键点是一样的:
VBAT/VCC3V3:总的3.3V电源,一般是长供电;
WIFIREGON:芯片的复位/使能管脚,开机保持高电平;
PCIE PERST L/PERSTO:芯片PCIe部分的复位管脚,DTS对应的PCIE节点下务必配置正确。
软件配置
dts 配置
移植驱动
将 WiFi 模组厂商提供的驱动源码aic8800_fdrv拷贝至./external/rkwifibt/drivers/目录进行编译。具体步骤如下:
(1)驱动 SDK 源码放置/external/rkwifibt/drivers/目录下;
(2)添加驱动固件至/external/rkwifibt/firmware/aic8800 目录下。
(3)修改device/rockchip/common/scripts/post-wifibt.sh脚本内容,具体如下。
调试过程
PCIe WiFi 识别流程
(1)WiFi 模组(AIC8800)通过 PCIe 接口连接到主机,这个接口负责传输数据和控制信号。
(2)PCIe 接口的初始化是由主机的 PCIe 控制器完成的。模组上电后,主机通过 PCIe 配置空间识别设备,这个就是通过 lspci 看到设备的原因。
(3)WiFi驱动程序的作用是初始化模组并提供接口给操作系统,以及通过PCIE接口将固件(固件用来控制硬件行为)传输到模组内部的存储器中。
确认 PCIe 是否识别模块
该 WiFi 模块为 PCIe 接口,首先确认 PCIe 接口是否能正常识别到 WiFi 模块(旧系统)。
当 AIC8800D80P 上电时 lspci会侦测到Bus 003 Device 007:ID a69c:8d80
insmod 加载驱动
要先确认 fw 文件已拷贝至/lib/firmware。
**【问题描述】:**无法 insmod 加载驱动,log 打印如下。
**【问题分析】:**从报错分析,显然是 PCIE 的 Memory 空间不够,导致驱动加载失败。
**【问题解决】:**修改 PCIe 的 Memory 地址大小。
驱动加载成功,生成wlP4p65s0 节点。
功能验证
查看 ifconfig 节点
扫描周围可见的无线网络
iw dev wlP4p65s0 scan | grep SSID配置并启动 Wi-Fi 连接 。
wpa_passphrase Chen-2.4G-0 123456987 > /etc/wpa_supplicant.conf wpa_supplicant -B -i wlP4p65s0 -c /etc/wpa_supplicant.conf可看到已成功连接至无线网络,并能正常ping通外网。
iw dev ping www.baidu.com -I wlP4p65s0(完)