BCM的代码相对保密一些,所以提供了一些bin文件,首先把模块厂商提供的配置文件和相关bin文件用adb放到板子上/etc/wifi/文件下
例adb remount
adb push bcmdhd.cal /etc/wifi/
adb push fw_bcmdhd.bin /etc/wifi/
adb push fw_bcmdhd_apsta.bin /etc/wifi/
adb push fw_bcmdhd_mfgtest.bin /etc/wifi/
adb push p2p_supplicant.conf /etc/wifi/
adb push sta.conf /etc/wifi/
adb push wpa_supplicant.conf /etc/wifi/
adb push wpa_supplicant_ap.conf /etc/wifi/
如果你adb不好用也可以直接把这些文件拷贝到android代码android/out/target/product/sabresd_6sx/system/etc/wifi/下面 重新编译bootimage即可
下面开启内核IEEE80211相关配置,我直接修改imx_v7_android_defconfig配置文件
CONFIG_CFG80211=y
CONFIG_CFG80211_WEXT=y
CONFIG_MAC80211=y
下面需要对设备数进行修改,solox默认支持Murata的wifi+bt模块,在调试的时候是将slot3那个sdio口配置为wifi的接口,murata_quick_start_guide_android 其中wl_reg接到了slot2的第9引脚上(这个可选择,将对应的引脚配置成gpio模式就行了),wl_host_wake可以悬空。这里提供imxq的dts文件仅做参考
wlreg_on: fixedregulator@100 {
compatible = "regulator-fixed";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-name = "wlreg_on";
gpio = <&gpio2 22 0>;
startup-delay-us = <30000>;
enable-active-high;
};
bcmdhd_wlan_1: bcmdhd_wlan@0 {
compatible = "android,bcmdhd_wlan";
gpios = <&gpio3 15 0>; //wl host wakeup
wlreg_on-supply = <&wlreg_on>;
};
pinctrl_usdhc3: usdhc3grp {
fsl,pins = <
MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
MX6QDL_PAD_EIM_A16__GPIO2_IO22 0x80000000
MX6QDL_PAD_EIM_DA15__GPIO3_IO15 0x80000000
>;
};
&usdhc3 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usdhc3>;
bus-width = <4>;
cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
no-1-8-v;
wifi-host;
non-removable;
keep-power-in-suspend;
enable-sdio-wakeup;
status = "okay";
};
然后再修改kernel\drivers\net\wireless\Makefile和Kconfig,增加编译bcmdhd,为了方便调试我们先将驱动生成模块。
编译出来为模式:bcmdhd.ko,将编译出来的bcmdhd.ko push到/system/lib/modules下。下面开始相关的测试工作。
加载驱动模块,加载的过程中可能会报错,如果不是致命错误可以暂时不要理睬,进行下面步骤,如果出现致命错误,首先检查的kernel配置,其次检查模块和wifi相关
这几个脚的状态,比如电压等。最后查硬件布线等等。根据以往经验,可能硬件出现问题比较多,所以硬件设计一定要参考模块规格书。如果这都没有解决建议尝试到bcm官网下载相应的bin文件或者向厂商核实bin文件………………
insmod /system/lib/modules/bcmdhd.ko "firmware_path=/system/etc/wifi/fw_ bcmdhd.bin nvram_path=/system/etc/wifi/bcmdhd.cal"
开启wpa_supplicant
/system/bin/wpa_supplicant -iwlan0 -Dnl80211 -c/etc/wifi/wpa_supplicant.conf -m/etc/wifi/p2p_supplicant.conf -puse_p2p_group_interface=1p2p_device=1 -e/data/misc/wifi/entropy.bin -g/data/misc/wifi/sockets/wpa_wlan0 -dd -B
开启后ps看一下是否wpa_supplicant进程存在,如果不存在下面的命令会提示无法连接的错误
wpa_cli -p/data/misc/wifi/sockets -iwpa_wlan0
如果一切都正常,那就来连接下wifi试试,测试连接无密码AP
wpa_cli> IFNAME=wlan0 add_network
wpa_cli> IFNAME=wlan0 set_network 0 ssid "CMCC" //0为add_network时显示的[network id]
wpa_cli> IFNAME=wlan0 set_network 0 key_mgmt NONE
wpa_cli> IFNAME=wlan0 enable_network 0