您的位置:首页 > 其它

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

2015-02-22 20:17 489 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: