1、配置UART4static iomux_v3_cfg_t mx6sl_uart4_pads[] = { MX6SL_PAD_KEY_COL6__UART4_RXD, MX6SL_PAD_KEY_COL7__UART4_RTS, MX6SL_PAD_KEY_ROW6__UART4_TXD, MX6SL_PAD_KEY_ROW7__UART4_CTS,};然后make menuconfigCONFIG_BT=yCONFIG_BT_RFCOMM=yCONFIG_BT_RFCOMM_TTY=yCONFIG_BT_BNEP=yCONFIG_BT_BNEP_MC_FILTER=yCONFIG_BT_BNEP_PROTO_FILTER=yCONFIG_BT_HIDP=yCONFIG_BT_HCIBTUSB=yCONFIG_BT_HCIUART=yCONFIG_BT_HCIUART_H4=y配置#define MX6_BRD_FEC_BT_REG_ON IMX_GPIO_NR(3, 25)根据蓝牙模块的上电时序,上电3:主要修改hal层:hardware\broadcom\libbt\conf\AP6255:
2、bd_addr.txt 11:22:33:44:55:66bt_vendor.conf:# UART device port where Bluetooth controller is attachedUartPort = /dev/ttymxc3# Firmware patch file locationFwPatchFilePath = /system/etc/firmware/## #Firmware nameFwPatchFileName = BCM4345C0.hcd#使用第4个串口,为/dev/ttymxc3, 固件位置FwPatchFilePath = /system/etc/firmware/固件名字:FwPatchFileName = BCM4345C0.hcdAndroid.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := bt_vendor.confLOCAL_MODULE_CLASS := ETCLOCAL_MODULE_PATH := $(TARGET_OUT)/etc/bluetoothLOCAL_MODULE_TAGS := engLOCAL_SRC_FILES := $(LOCAL_MODULE)include $(BUILD_PREBUILT)配置:BoardConfig.mkBOARD_HAVE_BLUETOOTH:TrueBOARD_HAVE_BLUETOOTH_BCM:True修改:hardware/broadcom/libbt/include/bt_vendor_brcm.hUART_TARGET_BAUD_RATE 3000000LPM_SLEEP_MODE 04:rfkill 主要控制蓝牙的上电与下电static struct platform_device mxc_bt_rfkill = { .name = "mxc_bt_rfkill",};static struct imx_bt_rfkill_platform_data mxc_bt_rfkill_data = { .power_change = mx6sl_evk_bt_power_change,};mxc_register_device(&mxc_bt_rfkill, &mxc_bt_rfkill_data);static struct platform_driver mxc_bt_rfkill_driver = { .driver = { .name = "mxc_bt_rfkill",}, .probe = mxc_bt_rfkill_probe, .remove = __devexit_p(mxc_bt_rfkill_remove),};static int mxc_bt_set_block(void *rfkdata, bool blocked){ struct imx_bt_rfkill_platform_data *data = rfkdata; int ret; /* Bluetooth stack will reset the bluetooth chip during * resume, since we keep bluetooth's power during suspend, * don't let rfkill to actually reset the chip. */ if (system_in_suspend) return 0; pr_info("rfkill: BT RF going to : %s\n", blocked ? "off" : "on"); if (!blocked) ret = data->power_change(1); else ret = data->power_change(0); return ret;}static const struct rfkill_ops mxc_bt_rfkill_ops = { .set_block = mxc_bt_set_block,};通过power_change,打开关闭蓝牙int mx6sl_evk_bt_power_change(int status){ if (status) mx6sl_evk_bt_reset(); else mx6sl_evk_bt_off(); return 0;}操作gpio实现,上电与下电。实际问题会比较多,有不懂的可以留言