在调试这个模块的时候碰到了很多问题,下面具体看看。
下面大概调试步骤说一下,然后就是具体碰到的问题:
一、大概配置
1.首先简单的是加入驱动文件,我这里是RK平台,默认放置的路径是:kernel/drivers/net/wireless/rockchip_wlan/rtl8821cs
之后就是检验加入的8821的驱动有没有正常被编译到。
2.第二就是对系统层的配置:
//类似于makefile
buildroot/package/rockchip/rkwifibt/rkwifibt.mk
//类似于Kconfig
buildroot/package/rockchip/rkwifibt/Config.in
Config.in:将menuconfig rkwifibt配置的WiFiBT型号传递给mk文件;
rkwifibt.mk:将对应WiFiBT所需的文件、firmware等拷贝到文件系统里面去; # 指定rkwifibt的源码目录
RKWIFIBT_SITE = $(TOPDIR)/../external/rkwifibt
#是构建过程函数,给源代码传递编译和链接选项,调用源代码的Makefile执行编译 RKWIFIBT_BUILD_CMDS
# 编译完之后,自动执行安装,让Buildroot把编译出来库和bin文件安装到指定的目录
RKWIFIBT_INSTALL_TARGET_CMDS
还有就是对8821的库文件配置:
external/rkwifibt/realtek
详细配置请见RK的文档。
大概配置流程如上,相比android的流程是要简单不少。
二、碰到的问题:
如上log打印,出现了mmc2:mmc host rescan start!
A.分析:
如上log,说的是模块没有正常上电,没有被识别到的问题。
所以要么是dts配置有误,要么是硬件上对这个模块没有焊好。
B.验证:
1.由于这个模块在同样的板子上,在android系统中是可以使用的,所以硬件上是没有问题的。
dts也是根据RK文档配置的,本人对了很多遍,认为也是没啥毛病。
2.如下,是对模块pid,vid的校验:
这个pid,vid是8821cs的正常显示,没毛病,所以直接打破了分析中的模块不上电的问题。
3.就是对模块的ko加载问题:
8821cs.ko也起来了(出现bcmdhd,是因为这是默认加载的。而8821cs我这里是手动加载insmod的)
按理来说,pid,vid有被识别,模块ko文件有被加载,那么ifconfig命令,是会出现wlan0的节点的,但是我这里并没有。
犯难了(囧)。
C.对比
之后,因为是同样的设备树dts文件,同一块板子android的是ok的,所以我烧录了android系统的固件进行比对,结果发现了wl_reg_on的电平不对。
cat d/gpio //android
cat /sys/kernel/debug/gpio //linux
该脚在android中是处于高电平的, 而在debian中,该脚的电平一直处于低电平,说明不正常。再结合RK的文档,确实说明了该脚不正常。
D.对比后验证
1.首先添加了对8821cs.ko文件自动加载的脚本
diff --git a/debian/overlay/etc/init.d/rkwifibt.sh b/debian/overlay/etc/init.d/rkwifibt.sh
index 8466747..13178a3 100755
--- a/overlay/etc/init.d/rkwifibt.sh
+++ b/overlay/etc/init.d/rkwifibt.sh
@ -12,6 +12,7 @
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
init_rkwifibt() {
+ insmod /system/lib/modules/8821cs.ko
case $1 in
rk3288)
rk_wifi_init /dev/ttyS0
2.然后让硬件帮忙将wl_reg_on的脚上前端的电阻断开了,让它一直处于高电平状态。
重新编译烧录验证:结果出现了wlan0网卡节点。
然后尝试用命令打开WiFi上网,可以ping通网址。
3.上述中2的验证中,说明软件中的驱动对该脚的上拉能力不够,所以,我尝试了将该脚内部上拉。
然而电平并未变高。虽然出现了wlan0节点,但是无法用命令检索到ssid.
E.分析无法检索wifi的问题
1.查看log
使用示波器量了wl_reg_on前端的电阻,发现上电开机那会,该电平会拉高一会,之后便不再拉高了。
然后又在代码中搜索dhd_module_init,发现跑的是bcmdhd的驱动
查看log和驱动代码,分析得出:由于先跑的是bcmdhd,它会先调用的sdmmc的power,然后又消失;而8821cs慢一点,等他再去调用sdmmc的时候,已经不理它了。
验证:将8821cs的ko文件名字改成博通的,重启试试。
欸,发现WiFi可以上网。
F.将博通的bcmdhd屏蔽掉编译验证试试
在编译的时候,只是屏蔽configs的CONFIG_AP6XXX=n,编译烧录是没有生效的,发现bcmdhd.ko文件还是有被编译生成。所以需要
1.在kernel下make clean
2.在debian/binary/system/lib/modules/下删除bcmdhd.ko文件。
3.如果bcmdhd.ko还是有被加载,那么请删除下面2个文件,这是因为在第一次编译sdk的时候,有关博通的驱动已经有被编译了。
删除重新编译(时间稍长)。
结果,验证OK.只是加载了8821cs.ko ,可以上网。
到此8821cs的WiFi就配置成功了。