Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(8):wifi与蓝牙

wifi与蓝牙放在一起,因为这两者的芯片供应商有2种:
高通(qcom)或博通(brcm)
而且都是成对一起使用某个厂商的芯片,不会出现wifi是高通,蓝牙是博通的情况

一、如何判断wifi芯片供应商

高通wifi芯片:
在system\etc\firmware\wlan\prima\里有WCNSSxxxx类似的文件,这些是固件
在system\lib\modules\prima里有prima_wlan.ko,这是wifi驱动
wifi驱动也有不以模块形式加载,而直接集成在内核里的

博通wifi芯片:
在system\etc\firmware\里有fw_bcmdhdxxx.bin类似的文件,这些是固件
在system\etc\wifi里有bcmdhd.cal配置文件

二、如何判断蓝牙芯片供应商

高通蓝牙:
system\etc\init.qcom.bt.sh有初始化蓝牙的相关脚本
system\bin里有btnvtool蓝牙工具

博通蓝牙:
能找到BCM4334B0_002.001.013.1804.1954.hcd这样的文件
或者有brcm_patchram_plus这个程序

三、在BoardConfig.mk里增加高通wifi项

# Wifi
BOARD_HAS_QCOM_WLAN              := true
BOARD_WLAN_DEVICE                := qcwcn
WPA_SUPPLICANT_VERSION           := VER_0_8_X
BOARD_WPA_SUPPLICANT_DRIVER      := NL80211
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
BOARD_HOSTAPD_DRIVER             := NL80211
BOARD_HOSTAPD_PRIVATE_LIB        := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
WIFI_DRIVER_MODULE_PATH          := "/system/lib/modules/wlan.ko"
WIFI_DRIVER_MODULE_NAME          := "wlan"
WIFI_DRIVER_FW_PATH_STA          := "sta"
WIFI_DRIVER_FW_PATH_AP           := "ap"

在本例里,必须从官方rom里提取wlan.ko放到/system/lib/modules/wlan.ko
然后参考官方卡刷包的刷机脚本updater-script
在device/pantech/a870/Android.mk里添加如下语句

# Create wlan firmware links
$(shell mkdir -p $(TARGET_OUT_ETC)/firmware/wlan/prima; \
    ln -sf /data/misc/wifi/WCNSS_qcom_cfg.ini    $(TARGET_OUT_ETC)/firmware/wlan/prima/WCNSS_qcom_cfg.ini; \
    ln -sf /data/misc/wifi/prima.bin    $(TARGET_OUT_ETC)/firmware/wlan/prima/prima.bin)

# Create wlan module links
$(shell mkdir -p $(TARGET_OUT)/lib/modules; \
ln -sf /system/lib/modules/prima/prima_wlan.ko    $(TARGET_OUT)/lib/modules/wlan.ko)

这些语句用于创建链接
最终编译后会在updater-script里生成如下语句:

symlink("/data/misc/wifi/WCNSS_qcom_cfg.ini", "/system/etc/firmware/wlan/prima/WCNSS_qcom_cfg.ini");
symlink("/data/misc/wifi/prima.bin", "/system/etc/firmware/wlan/prima/prima.bin");
symlink("/system/lib/modules/prima/prima_wlan.ko", "/system/lib/modules/wlan.ko");

另外值得提醒的是,WCNSS_qcom_cfg.ini这个文件,aosp或其它第三方rom必须放在system\etc\wifi才会起作用,但官方ROM却有可能放在system\etc\firmware\wlan\prima里,至于需要放在哪个路径才行,请读者自行试验。

四、在BoardConfig.mk里增加博通wifi项

# Wifi
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
WPA_SUPPLICANT_VERSION      := VER_0_8_X
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_bcmdhd
BOARD_HOSTAPD_DRIVER        := NL80211
BOARD_HOSTAPD_PRIVATE_LIB   := lib_driver_cmd_bcmdhd
BOARD_WLAN_DEVICE           := bcmdhd
WIFI_DRIVER_FW_PATH_PARAM   := "/sys/module/bcmdhd/parameters/firmware_path"
WIFI_DRIVER_FW_PATH_STA     := "/system/etc/firmware/fw_bcmdhd.bin"
WIFI_DRIVER_FW_PATH_AP      := "/system/etc/firmware/fw_bcmdhd_apsta.bin"

然后在build.prop还必须有wifi相关的配置项,具体请参考官方rom
例如wifi.interface=wlan0类似这种项必须有,请读者自行尝试

五、在BoardConfig.mk里增加高通蓝牙项

# Bluetooth
BOARD_HAVE_BLUETOOTH := true
BOARD_HAVE_BLUETOOTH_QCOM := true
BLUETOOTH_HCI_USE_MCT := true
BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/pantech/a870/bluetooth

六、在BoardConfig.mk里增加博通蓝牙项

# Bluetooth
BOARD_HAVE_BLUETOOTH := true
BOARD_HAVE_BLUETOOTH_BCM := true
BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/pantech/a870/bluetooth

注意:博通蓝牙的话,可能msm-aosp对其支持较差,总之笔者没有成功适配过博通蓝牙功能-_-

七、修改蓝牙设备默认名称

修改device/pantech/a870/bluetooth/bdroid_buildcfg.h
#define BTM_DEF_LOCAL_NAME "QCOM-BTD"
这个是蓝牙默认名称,可以自己修改,比如泛泰a870可以这样改
#define BTM_DEF_LOCAL_NAME "IM-A870"

八、高通wifi调试

当wifi不能用时,除了看log,还可以对比官方rom来做试验
打开adb shell并取得root权限
接下来介绍几个调试命令
getprop wlan.driver.status 获取wlan驱动状态
未打开wifi时是unloaded
打开wifi后是ok

cat /proc/modules 这个用于获取当前加载的模块
未打开wifi时
texfat 174987 0 - Live 0x00000000 (PO)
mwlan_aarp 3331 0 - Live 0x00000000 (PO)

打开wifi后
wlan 3021860 0 - Live 0x00000000 (O)
texfat 174987 0 - Live 0x00000000 (PO)
mwlan_aarp 3331 0 - Live 0x00000000 (PO)

你可能感兴趣的:(android)