问题:手机无法通过信道13连接wifi
问题:手机无法通过信道13连接wifi
首先在文件
androiddeviceqcommsm8916_32WCNSS_qcom_cfg.ini
中设置g11dSupportEnabled=0,让其不支持802.11d
抓取kmsg和logcat的信息发现如下错误
<6>[ 112.231365] DefaultCountry is US
由于国家错误的配置为US,US仅仅是支持到1到11信道
从log上看,只要修改国家为CN中国应该就可以解决这个问题了
导出wlan的配置文件
(1)使用USB连接到电脑
(2)adb root
adb shell
# insmod /system/lib/modules/wlan.ko con_mode=5
# ps ptt
# kill xxx (ptt 进程号)
# ptt_socket_app -v -d -f
(3)QRCT
选择 FTM_Command --> WLAN --> WCN1312...
选择 WCN3620
点击 FTM Start
获取到对应wlan的xml配置
从xml配置文件中找到如下信息
<DefaultCountryTable>
<RegulatoryDomain Map="0:FCC,1:ETSI,2:JAPAN,3:WORLD,4:N_AMER_EXC_FCC,5:APAC,6:KOREA,7:HI_5GHZ,8:NO_5GHZ">0</RegulatoryDomain>
<CountryCode>
<Value>85</Value>
<Value>83</Value>
<Value>73</Value>
</CountryCode>
</DefaultCountryTable>
国家选择的是0---US,需要选择到3----WORLD
下面countrycode需要改成下面信息
<CountryCode>
<Value>67</Value>
<Value>78</Value>
<Value>73</Value>
</CountryCode>
下面数字均是ascall码
85,83,73--->USI
67,78,73--->CNI
修改了配置文件以后,使用QRCT把修改的配置文件重新push到手机上验证ok
这是需要考虑的是,把wlan配置直接弄到升级代码中
由于导出的wlan的配置文件,在源码中和文件系统中是已WCNSS_qcom_wlan_nv.bin形式的二进制文件存储的
去哦们只需要把修改以后的WCNSS_qcom_wlan_nv.bin二进制文件pull出来,放到工程源码中编译就可以了
通过在源码中搜索发现
下面几个地方有相关的bin文件
vendor/qcom/opensource/wlan/qcacld-2.0/firmware_bin/WCNSS_qcom_wlan_nv.bin
vendor/qcom/opensource/wlan/prima/firmware_bin/WCNSS_qcom_wlan_nv.bin
devices/qcom/msm8916_32/WCNSS_qcom_wlan_nv.bin
究竟是替换哪一个呢?
在手机上能够在两个路径下发现这个二进制文件
/persist
/system/etc/firmware/wlan/prima
使用ll命令查看二进制的文件的状态发现
shell@msm8916_32:/system/etc/firmware/wlan/prima # ll
-rw-r--r-- root root 11290 2014-11-21 11:11 WCNSS_cfg.dat
lrw-r--r-- root root 2014-11-21 11:11 WCNSS_qcom_cfg.ini -> /da ta/misc/wifi/WCNSS_qcom_cfg.ini
lrw-r--r-- root root 2014-11-21 11:11 WCNSS_qcom_wlan_nv.bin -> /persist/WCNSS_qcom_wlan_nv.bin
发现实际产生效果的文件是放在目录/persist这个下面的
在源码里面是怎么拷贝过去的呢?
在文件srcLINUXandroiddeviceqcommsm8916_32msm8916_32.mk中发现拷贝动作
#wlan driver
PRODUCT_COPY_FILES +=
device/qcom/msm8916_32/WCNSS_qcom_cfg.ini:system/etc/wifi/WCNSS_qcom_cfg.ini
device/qcom/msm8916_32/WCNSS_qcom_wlan_nv.bin:persist/WCNSS_qcom_wlan_nv.bin
上面其实就是拷贝语句
把:前的文件拷贝到:后面的地方
所以我们修改后的二进制bin应该替换到device/qcom/msm8916_32/WCNSS_qcom_wlan_nv.bin
现在还有一个疑问软连接是什么时候建立的呢?
在文件srcLINUXandroiddeviceqcommsm8916_32AndroidBoard.mk中有建立软连接的动作
#Create symbolic links
$(shell mkdir -p $(TARGET_OUT_ETC)/firmware/wlan/prima;
ln -sf /persist/WCNSS_qcom_wlan_nv.bin
$(TARGET_OUT_ETC)/firmware/wlan/prima/WCNSS_qcom_wlan_nv.bin;
ln -sf /data/misc/wifi/WCNSS_qcom_cfg.ini
$(TARGET_OUT_ETC)/firmware/wlan/prima/WCNSS_qcom_cfg.ini)
endif
这个AndroidBoard.mk是在编译软件的时候就会运行,来建立这个软连接
注意:
在文件系统中
/system/etc/firmware/wlan/prima/WCNSS_qcom_wlan_nv.bin
这个bin文件根本不是,源码中下面目录的bin
vendor/qcom/opensource/wlan/prima/firmware_bin/WCNSS_qcom_wlan_nv.bin