rtl8822cs 模块 wifi调试 记录
任务:在rk3288 android7.1 上移植配置 rtl8822cs 的wifi模块
思路:
将厂商给的 wifi 驱动换上,并在 内核中 修改对应 makefile 和 Kconfig 以添加,并且在 rk 配置 wifi 型号的代码中 配置添加好,然后会通过wifi 型号去加载对应的驱动模块。截取文档中的说明:
wifi 芯片识别流程
1. 开机对 wifi 模块上电,并自动进行扫描 sdio 操作
2. 系统启动打开 wifi 操作时,分别对系统 sys/bus/sdio(sdio wifi), sys/bus/usb(usb wifi),
sys/bus/pic (pcie wifi )文件系统下的 uevent 进行读取
3. 获取到 wifi 芯片 vid pid 加载相应的 wifi ko 驱动
4. 识别到相应的 wifi 模块后,即可知道相应的 bt 型号,走不同的 bluedroid 协议栈
调试驱动打印:
内核rfkill 驱动:[WLAN_RFKILL] 对应着 kerne/net/rfkill/rfkill-wlan.c (配置 wifi gpio 口的驱动)
rtl88x2cs 驱动:RTW 对应着 kernel/drivers/net/wireless/rockchip_wlan/rtl8822cs (配置对应模块的驱动)
rk平台与 wifi 相关文件修改:
*.dts
hardware/libhardware_legacy/include/hardware_legacy/wifi.h
hardware/libhardware_legacy/wifi
kernel/net/rfkill/rfkill-wlan.c
在dts 中需要注意的是文档中提及 wifi_chip_type 这个节点可以不需要配置,但是查看代码,好像是在 rfkill-wlan.c 中有做判断,所以这个还是需要修改。
具体的rk文档中提到的 dts 的配置,和移植的基本流程就不再赘叙,需要注意的是,基本的流程移植后,realtek wifi 的驱动需要做修改,具体 rk 有一份 realtek wifi 移植的文档,需要做的是修改 module_init 相关的函数,这部分可以参考已经移植好的 realtek wifi 驱动,然后 需要注意的是 要修改 驱动中的 makefile 文件 ,打开 对应的宏定义,具体在文档中也有提及。
这个模组是 sdio wifi ,所以首先 要确认sdio 扫卡是否有扫到当前设备 ,目录是在 /sys/bus/sdio/device/ 下查看,如果没有,正常是需要配合硬件去查明原因,要确定复位引脚,时钟这些是否有问题,在调试该模块的时候,出现 引脚都没问题,就是扫不到 sdio 设备
解决方法,打入以下补丁:
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -648,8 +648,14 @@ try_again:
* to make sure which speed mode should work.
*/
if (!powered_resume && (rocr & ocr & R4_18V_PRESENT)) {
+#if 0 /* SDIO 3.0 patch for Realtek 88x2BS */
err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180,
ocr_card);
+#else
+ pr_warn("%s: Skip set signal voltage to 1.8v\n",
+ mmc_hostname(host));
+ err = 0;
+#endif
if (err == -EAGAIN) {
打入补丁后,解决了 sdio 设备找不到的问题,但是 wifi 还是无法使用,提示加载库失败,然后问厂商,告知不是驱动的问题。
针对当前模块的解决方法:将 sdio 的时钟频率 从默认的 150M 改成 50M ,后加载库成功。