目錄 目錄........................................................................................................................................... 1 1.1 概述.................................................................................................................................. 1 1.2 硬件相關(guān)部分 .................................................................................................................. 2 1.3 Kernel ............................................................................................................................... 4 1.3.1 概述......................................................................................................................... 4 1.3.2 代碼修改 ................................................................................................................. 5 1.4 用戶態(tài)空間 ...................................................................................................................... 8 1.5 HAL 層移植 ...................................................................................................................... 9 1.5.1 Bluedroid ............................................................................................................. 10 1.5.2 init.connectivity.rc 文件 ..................................................................................... 12 1.5 總結(jié) ................................................................................................................................. 12 1.1 概述 近期需要把 Bluetooth 移植到 iTOP-4412 開(kāi)發(fā)平臺(tái),查閱了相關(guān)資料,經(jīng)過(guò)一段時(shí)間 的研究、調(diào)試,終于成功的將藍(lán)牙功能移植到了開(kāi)發(fā)板上面,這里筆者記錄移植過(guò)程及注意 事項(xiàng),方便以后工作需要。 iTOP-4412 開(kāi)發(fā)板的 Bletooth 模塊與板卡之間的連接采用 UART 接口,Bletooth 硬件模塊 使用的是MTK的MT6620芯片,MTK提供了Android4.0及Android4.4的driver, Porting Guid, 有了這些就為我們的移植工作做了總體性的指導(dǎo)。 但是僅僅有 MTK 提供的文檔還是遠(yuǎn)遠(yuǎn)不夠的,畢竟硬件接口定義不同,kernel 版本也 不同,Android層與MTK提供的代碼也有差異,這就需要我們?cè)?/font>MTK文檔的指導(dǎo)下, Step byStep 進(jìn)行 Porting 工作.
移植環(huán)境: 1 iTOP-4412 精英版 + MT6620 Bletooth 模塊 2 kernel 3.0.15 version 3 Android4.4. 4 Ubuntu12.04 64BIt 開(kāi)發(fā)環(huán)境
1.2 硬件相關(guān)部分 由于 MT6620 芯片集成了 Bluetooth,WiFi, FM,GPS 功能,所以 Bluetooth 的原理圖可查看 MT6620 WiFi 原理圖部分,下圖為 Bletooth 模塊與開(kāi)發(fā)板連接的引腳定義,通過(guò)該接口可以 知道 Bluetooth 模塊與 CPU 的交互接口.
1.2 硬件相關(guān)部分 由于 MT6620 芯片集成了 Bluetooth,WiFi, FM,GPS 功能,所以 Bluetooth 的原理圖可查看 MT6620 WiFi 原理圖部分,下圖為 Bletooth 模塊與開(kāi)發(fā)板連接的引腳定義,通過(guò)該接口可以 知道 Bluetooth 模塊與 CPU 的交互接口.
1.jpg (14.41 KB, 下載次數(shù): 41)
下載附件
2020-6-11 11:35 上傳
▆ UART 串口: Bluetooth 與 CPU 之間的通信接口,命令和數(shù)據(jù)的傳輸都是經(jīng)過(guò)串口交 換的。另外 MT6620 固件補(bǔ)丁的下載也是通過(guò)串口進(jìn)行的,所以說(shuō)串口是必不可少的硬件接 口。上圖中 Pin8,Pin10 為串口部分,與 CPU 的串口 0 連接. ▆ MT6620 芯片使能引腳: Pin16 PMU_EN , 使能引腳,默認(rèn)低電平狀態(tài),高電平有效, 啟用藍(lán)牙功能之前需要先使能該引腳,這樣 MT6620 才開(kāi)始工作。 ▆ 中斷引腳:Pin 14 BGF_INT , Blutooh, GPS,FM 共用的中斷引腳,用于告知 CPU 有數(shù) 據(jù)來(lái)了,或者說(shuō)有請(qǐng)求到了. ▆ 復(fù)位引腳: Pin15 WiFi_RESET ,該引腳與 MT6620 的 SYSRST_B 連接,用于芯片的復(fù)位 操作. ▆ 芯片工作電壓:Pin12 提供 1.8V 的電壓輸入,Pin19 提供 3.3V,Pin20 提供 5V 電壓輸入. 下圖為 MT6620 模塊原理圖部分:
2.jpg (19.01 KB, 下載次數(shù): 45)
下載附件
2020-6-11 11:35 上傳
MT6620 的 引 腳 定 義 如 下 :
3.jpg (47.13 KB, 下載次數(shù): 49)
下載附件
2020-6-11 11:35 上傳
以上是進(jìn)行 Porting 前的準(zhǔn)備工作,當(dāng)然需要萬(wàn)用表,示波器工具進(jìn)行輔助的檢測(cè),查看 Bluetooth 模塊的工作電壓是否正常,GPIO 的當(dāng)前狀態(tài),串口的數(shù)據(jù)波形. 另外需要強(qiáng)調(diào)的是,MT6620 Bluetootch 支持藍(lán)牙 4.0 規(guī)范,藍(lán)牙 4.0 規(guī)范包括常規(guī)藍(lán)牙, 高速藍(lán)牙,還有很重要的低功耗藍(lán)牙,即 BLE 的支持,下面是 MT6620 藍(lán)牙特性: ▆ 支 持 Bluetooth V2.1 +EDR ▆ 支 持 Bluetooth 3.0+HS compliance ▆ 支 持 Bluetooth V4.0 Low Energy (LE) ▆ 使用 UART / PCM 接口 ▆ 模組包含 PA with 13 dBm (class 1) transmit power ▆ Better WiFi/BT coexistence performance ▆ Low power scan function to reduce the power consumption in scan modes 關(guān)于 MT6620 的更多硬件特性,請(qǐng)參考 MTK 官方發(fā)布的 MT6620 硬件使用指導(dǎo)相關(guān)文檔. 1.3 Kernel 1.3.1 概述 iTOP4412 開(kāi)發(fā)板采用的內(nèi)核是 Linux 3.0.15 版本,MTK 官方給的移植 Porting 沒(méi)有說(shuō)明 針對(duì)具體的 kernel 版本,由于是 Android4.4,所以 kernel 應(yīng)該是 3.0 以后的版本或者更高支 持; 首先按照 PoringGuid 的指導(dǎo)說(shuō)明,把 New 和 Modify 文件夾下面關(guān)于 kernel 部分的修改 放到我們的 kernel 代碼里面, 把 MT6620 的驅(qū)動(dòng)放在 driver/misc/目錄下面,文件夾名稱 mediatek,里面存放的是 WMT,既 wireless manage tools, 里面提供了與 MT6620 download firmware patch ,enable /disable MT6620 芯片,power on, power off 操作的相關(guān)驅(qū)動(dòng)部分, 及 SDIO 總線設(shè)備接口驅(qū)動(dòng) Host Interface drivers. 藍(lán)牙驅(qū)動(dòng) mtk_stp_bt.ko 的源碼也在這個(gè)目錄 下面,我們以驅(qū)動(dòng)庫(kù) .ko 的形式編譯驅(qū)動(dòng)模塊. driver/misc/mediatek/ 庫(kù)文件列表如下:: mtk_hif_sdio.ko ----mmc 總線相關(guān)接口,mmc 總線發(fā)現(xiàn) SDIO 設(shè)備,分配總線地址后,會(huì)與該 驅(qū)動(dòng)進(jìn)行適配.適配成功后該驅(qū)動(dòng)會(huì)調(diào)用 WiFi 網(wǎng)絡(luò)驅(qū)動(dòng),另外 Bluetooth 也使用了該驅(qū)動(dòng)庫(kù)文 件提供的相應(yīng)接口; mtk_stp_uart.ko-----串口相關(guān)驅(qū)動(dòng),通過(guò)串口下載固件補(bǔ)丁,設(shè)置芯片參數(shù); mtk_stp_wmt.ko-----core 部分,提供 Bluetooth 上電,斷電,PSM 省電管理操作等 mtk_stp_bt.ko ----字符設(shè)備驅(qū)動(dòng),創(chuàng)建 Bluetooth 設(shè)備節(jié)點(diǎn)用于與用戶空間交互; 另外這里附一張 Blutooth Kernel 層驅(qū)動(dòng)層次圖:
4.jpg (19.24 KB, 下載次數(shù): 39)
下載附件
2020-6-11 11:35 上傳
上圖紅色部分 BlueZ, Hci_stp.ko 為 Android4.0 Bluetooth 使用的藍(lán)牙協(xié)議棧與 Kernel 庫(kù)文 件。藍(lán)色部分 Bluedroid, mtk_stp.bt.ko 為 Android4.4 版本使用的藍(lán)牙協(xié)議棧與 kernel 庫(kù)文 件。Android4.0 與 Android4.4 關(guān)于 Bluetooth 部分變化比較大,請(qǐng)大家移植過(guò)程中注意這一 點(diǎn),他們之間的具體差異這里不再講解。 從上圖可以看到 bluetooth 驅(qū)動(dòng)調(diào)用關(guān)系: mtk_stp_bt.ko -> mtk_stp_wmt.ko -> mtk_stp_uart.ko -> uart driver 最后最底層的串口驅(qū)動(dòng)負(fù)責(zé)藍(lán)牙命令,數(shù)據(jù)的發(fā)送與接收. 1.3.2 代碼修改 1 根據(jù)硬件連接情況配置必要的平臺(tái)資源 修改文件: kernel/iTop4412_Kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c 關(guān)鍵函數(shù): 該函數(shù)配置 MT6620 相關(guān)的 GPIO 引腳為初始化輸出狀態(tài),或者配置為中斷狀態(tài), Bluetooth 驅(qū)動(dòng)會(huì)改變這些引腳的狀態(tài),這里僅僅是初始化. static void __init mtk_combo_init(void) { //MT66XX PMUEN if(gpio_request(EXYNOS4_GPC1(0), "GPC1_0")) { printk(KERN_ERR "failed to request GPC1_0 for MT6620 PMUEN control\n"); } //MT66XX SYSRST if(gpio_request(EXYNOS4_GPC1(1), "GPC1_1")) { printk(KERN_ERR "failed to request GPC1_1 for MT6620 SYSRST control\n"); } s3c_gpio_cfgpin(EXYNOS4_GPC1(0), S3C_GPIO_OUTPUT); s3c_gpio_cfgpin(EXYNOS4_GPC1(1), S3C_GPIO_OUTPUT); gpio_direction_output(EXYNOS4_GPC1(0), 0); gpio_direction_output(EXYNOS4_GPC1(1), 0); gpio_free(EXYNOS4_GPC1(0)); gpio_free(EXYNOS4_GPC1(1)); mdelay(5); //need config eint models for Wifi & BGA Interupt if (gpio_request(EXYNOS4_GPX2(5), "WiFi INT")) printk(KERN_WARNING "MT6620 WiFi INT(GPX2.5) Port request error!!!\n"); else { s3c_gpio_setpull(EXYNOS4_GPX2(5), S3C_GPIO_PULL_NONE); s3c_gpio_cfgpin(EXYNOS4_GPX2(5), S3C_GPIO_SFN(0xF)); gpio_free(EXYNOS4_GPX2(5)); } if (gpio_request(EXYNOS4_GPX2(4), "BGF INT")) printk(KERN_WARNING "MT6620 BGA INT(GPX2.4) Port request error!!!\n"); else { s3c_gpio_setpull(EXYNOS4_GPX2(4), S3C_GPIO_PULL_NONE); s3c_gpio_cfgpin(EXYNOS4_GPX2(4), S3C_GPIO_SFN(0xF)); gpio_free(EXYNOS4_GPX2(4)); } //normal it is high level if (gpio_request(EXYNOS4_GPX3(2), "6260_GPIO2")!=0) { printk("[mt6620] ERROR:Cannot request 6260_GPIO2\n"); } else { gpio_direction_output(EXYNOS4_GPX3(2), 1);/* WLAN_CHIP_PWD */ gpio_set_value(EXYNOS4_GPX3(2), 1); mdelay(100); gpio_free(EXYNOS4_GPX3(2)); } return; } 關(guān)鍵結(jié)構(gòu)體: 該結(jié)構(gòu)體告訴 MT6620 驅(qū)動(dòng)相關(guān)部分使用了平臺(tái)的哪些 GPIO 資源. 結(jié)構(gòu)體所屬文件: kernel/iTop4412_Kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c static struct mtk_wmt_platform_data mtk_wmt_pdata = { .pmu =EXYNOS4_GPC1(0), //RK30SDK_WIFI_GPIO_POWER_N,//RK30_PIN0_PB5, //MUST set to pin num in target system .rst = EXYNOS4_GPC1(1),//RK30SDK_WIFI_GPIO_RESET_N,//RK30_PIN3_PD0, //MUST set to pin num in target system .bgf_int=EXYNOS4_GPX2(4), //IRQ_EINT(20),//RK30SDK_WIFI_GPIO_BGF_INT_B,//RK30_PIN0_PA5,//MUST set to pin num in target system if use UART interface. .urt_cts = -EINVAL, // set it to the correct GPIO num if use common SDIO, otherwise set it to -EINVAL. .rtc = -EINVAL, //Optipnal. refer to HW design. .gps_sync = -EINVAL, //Optional. refer to HW design. .gps_lna = -EINVAL, //Optional. refer to HW design. }; static struct mtk_sdio_eint_platform_data mtk_sdio_eint_pdata = { .sdio_eint = EXYNOS4_GPX2(5),//IRQ_EINT(21) ,//RK30SDK_WIFI_GPIO_WIFI_INT_B,//53, //MUST set pin num in target system. }; static struct platform_device mtk_wmt_dev = { .name = "mtk_wmt", .id = 1, .dev = { .platform_data = &mtk_wmt_pdata, }, }; static struct platform_device mtk_sdio_eint_dev = { .name = "mtk_sdio_eint", .id = 1, .dev = { .platform_data = &mtk_sdio_eint_pdata, }, }; MTK 官方移植文檔中會(huì)告訴我們需要在原始內(nèi)核代碼里面增加哪些文件,如何在 make menuconfig 中配置相關(guān)部分,這里就不再詳細(xì)描述. 注意:藍(lán)牙驅(qū)動(dòng)雖然沒(méi)有使用到 mmc 總線,但是 mtp_hif_sdio.ko 驅(qū)動(dòng)導(dǎo)出了接口函數(shù), mtk_stp_wmt.ko 核心驅(qū)動(dòng)庫(kù) 會(huì)調(diào)用導(dǎo)出函數(shù)以 ,所以 mtp_hif_sdio.ko 需要加載到內(nèi)核空間, 有 如果您的產(chǎn)品中不含有 WiFi , 僅僅需要 Bluetooth 功能,那么完全可以不用配置 MMC 總 線部分,不影響藍(lán)牙的使用 ,但是務(wù)必加載 mtp_hif_sdio.ko 文件。 另外 MT6620 具備功耗控制功能,默認(rèn)情況下如果 MT6620 處于 idle 空閑狀態(tài),空閑時(shí) 間大于 60 秒后,會(huì)自動(dòng)進(jìn)入 sleep 狀態(tài),有中斷觸發(fā)時(shí)會(huì)喚醒,繼續(xù)工作,您可以使用 "echo 0 0 > /proc/driver/wmt_dbg "命令關(guān)閉功耗控制,這樣MT6620會(huì)始終不會(huì)進(jìn)入sleep狀態(tài)。 另外也可以修改 MT6620 mtk_stp_wmt.ko 驅(qū)動(dòng)中的參數(shù),更改 ide to sleep 的時(shí)間. MTK 官方提供的驅(qū)動(dòng)代碼中芯片默認(rèn) idle 5 秒后會(huì)進(jìn)入 sleep 狀態(tài),使用藍(lán)牙接 收文件時(shí),如果用戶響應(yīng)時(shí)間超過(guò)了 5 秒(用戶沒(méi)有單擊接收或者拒絕按鈕),MT6620 會(huì) 休眠,驅(qū)動(dòng)會(huì)導(dǎo)致 MT6620 會(huì)進(jìn)入 RESET 狀態(tài),從而 Bluetooth 服務(wù)會(huì)出現(xiàn)問(wèn)題,Bluetooth 功能不可使用,為了避免這樣的問(wèn)題發(fā)生,我們把休眠時(shí)間由默認(rèn)的 5 秒調(diào)整到了 60 秒, 給用戶足夠多的響應(yīng)時(shí)間,用戶在 60 秒內(nèi) 接收或者拒絕藍(lán)牙手機(jī)發(fā)給板卡的文件,另外文 件接收完成后,需要單擊狀態(tài)欄中的文件接收完成提示,盡量在 Android4.4 狀態(tài)欄中不含 有關(guān)于藍(lán)牙消息的提醒。 u 1.4 用戶態(tài)空間 下面我們描述一下采用 Linux 系統(tǒng)和 Android 系統(tǒng)的用戶都需要注意的地方: 驅(qū)動(dòng)層移植完成后, MTK 的 Porting Guid 會(huì)告訴你需要在用戶態(tài)運(yùn)行 wmt_launcher 工 具,作為后臺(tái)的一個(gè)服務(wù)程序運(yùn)行,該服務(wù)會(huì)配置串口的工作參數(shù),下載固件補(bǔ)丁到 MT6620 中,他的源代碼相對(duì)比較簡(jiǎn)單,只有一個(gè).c 文件: 原始文件位于 MTK 發(fā)布包: APEX_Android_4.4_MP_SW_package_V2.0/APEX_Android_4.4_MP_001_panda_combo_mt66xx _Package_Common/New/hardware/mediatek/wmt/stp_uart_launcher.c 修改后的文件位于 iTOP-4412 Android4.4 發(fā)布包: iTop4412_KK4.4/hardware/mediatek/wmt/stp_uart_launcher.c 修改點(diǎn)主要在串口參數(shù)配置上,由于內(nèi)核版本不同,串口設(shè)置參數(shù)也略有不同. 具體修改可以使用代碼比對(duì)工具進(jìn)行比較。 另外需要說(shuō)明的是運(yùn)行 wmt_launcher 的運(yùn)行參數(shù) 跟 MTK 給的移植文檔有點(diǎn)不同, Porting Guid 里面推薦串口波特率使用 921600, 而在 iTOP-4412 的板子上面采用該值會(huì)工作不 正常,導(dǎo)致固件補(bǔ)丁無(wú)法下載,開(kāi)始懷疑板卡不支持該波特率,后使用串口測(cè)試工具專門針對(duì)這 個(gè)串口進(jìn)行 921600 測(cè)試,也沒(méi)發(fā)現(xiàn)問(wèn)題,后沒(méi)有繼續(xù)查找,而是運(yùn)行 wmt_launcher 時(shí)采用 115200 波特率: wmt_launcher -b 115200 -d /dev/ttySAC0 -p /system/etc/firmware & 注意: 如果您的操作系統(tǒng)使用的是 Linux 而不是 Android,需要修改 stp_uart_launcher.c 原始代碼里面有 Android 特有的屬性相關(guān)部分,Linux 系統(tǒng)不具有這個(gè)特性,我們提供了修改好 的 文 件 : stp_uart_launcher-linux-ok.c , 用 戶 可 以 作 為 參 考 , 該 文 件 與 原 始 文 件 stp_uart_launcher-ori.c,及正常工作的文件 stp_uart_launcher.c 位于相同目錄下面. 無(wú)論是 Linux 系統(tǒng)還是 Android 系統(tǒng),掛載根文件系統(tǒng)以后需要運(yùn)行 wmt_launcher 服務(wù),該 服務(wù)在后臺(tái)運(yùn)行,打開(kāi) /dev/ttySAC0 串口,監(jiān)控著串口上報(bào)的事件,對(duì)事件進(jìn)行響應(yīng),比如內(nèi) 核上報(bào) "下載固件補(bǔ)丁" 事件,那么 wmt_launcher 會(huì)打開(kāi) /system/etc/firmware 下面的固件補(bǔ) 丁,然后下載到 MT6620 模塊中,該服務(wù)不可以被用戶終止運(yùn)行. 1.5 HAL 層移植 Bluetooth 的 HAL 層主要有 Bluedroid 協(xié)議棧與 MT6620 vendor 提供底層庫(kù)文件組成。
5.jpg (16.93 KB, 下載次數(shù): 45)
下載附件
2020-6-11 11:35 上傳
需要我們重點(diǎn)關(guān)注的有 bluetooth.default.so 該動(dòng)態(tài)庫(kù)文件提供了 Framework 層調(diào)用 HAL 層的 API 接口,同時(shí)向下調(diào)用 libbt-hci.so 。 bluetooth.default.so 包含兩個(gè)靜態(tài)庫(kù):libbt-brm_stack.a libbt-brm_bta.a . libbt-brm_stack.a 提 供 Bluetooth 各種 profiles 的支持, 比如 a2dp,hid,pan 等等, libbt-brm_bta.a 用于與 framdwork 層進(jìn)行通信. libbt-hci.so 該動(dòng)態(tài)庫(kù)提供 bluetooth.default.so 的底層支持,另外他會(huì)調(diào)用 libbt-vendor.so 接口, 通過(guò)串口發(fā)送,接收命令,數(shù)據(jù)的操作也是通過(guò)該動(dòng)態(tài)庫(kù)實(shí)現(xiàn)的。他位于 bluedroid 源碼目錄 hci 文件夾下。 libbt-vendor.so 廠 商 庫(kù) 文 件 , 用 于 實(shí) 現(xiàn) 廠 商 提 供 的 藍(lán) 牙 模 塊 特 性 支 持 , 庫(kù) 文 件 位 于 android4.4/iTop4412_KK4.4/hardware/mediatek/bt/combo_mt66 目錄下。 1.5.1 Bluedroid 從 Android 4.2 開(kāi)始,Bluetooth stack 發(fā)生了重大改變:從 Bluez 換成了由 Google 和 Broadcom 聯(lián)合開(kāi)發(fā)的 Bluedroid(當(dāng)然,核心的部分還是 Broadcom 的,Google 主要是做了和上層 Framework 相關(guān)的部分)。 Bluedroid 和 Bluez 相比,有如下優(yōu)點(diǎn): ■ 層次結(jié)構(gòu)清晰。各個(gè) profile 對(duì)上層接口統(tǒng)一,便于增加新的 profile; ■ 增加了 HAL 層,便于移植。 ■ 去掉了 DBus,F(xiàn)ramework 的 Java 代碼直接調(diào)用到 Bluedroid 的 Native 代碼。 但是 Android 4.2 中的 Bluedroid 與 Android 4.0 中的 Bluez 相比,功能要少,例如不支持 AVRCP 1.3, Bug較多,例如某些藍(lán)牙耳機(jī)不能重?fù)茏詈笠粋(gè)電話。最重要的是4.2的Bluedroid不支持BLE。 不過(guò)在剛剛發(fā)布的 Android 4.3 中已經(jīng)有了很多改進(jìn),AVRCP 1.3 和 BLE 都得到了支持。 目前有一些Android 4.1或4.2的設(shè)備是支持BLE的,但是都是采用的Vendor自己的解決方案, 比如 Bluetooth stack 采用 Bluez 5.x,再提供 Vendor BLE Android SDK. 現(xiàn)在 Android 4.4 已經(jīng)發(fā)布, 從未來(lái)發(fā)展趨勢(shì)來(lái)看,如果有人要學(xué)習(xí) Bluetooth in Android,建議不要再研究 Bluez,最好轉(zhuǎn)向 Bluedroid。 以下是 Android 4.4 中 Bluetooth 相關(guān)代碼之分布:
6.jpg (18.93 KB, 下載次數(shù): 41)
下載附件
2020-6-11 11:35 上傳
筆者在進(jìn)行 Bluetooth 的調(diào)試過(guò)程中,使用 Logcat 命令輸出 Android 的調(diào)試信息,在 Android 的Setting界面開(kāi)啟藍(lán)牙功能,根據(jù)打印信息的輸出,發(fā)現(xiàn)Enable Bluetooth的過(guò)程中出現(xiàn)了問(wèn)題, 最后查找原因是因?yàn)?MT6620 芯片工作前需要需要下載固件補(bǔ)丁,這個(gè)過(guò)程需要花費(fèi)一定的時(shí)間, 然后 bluetooth.default.so 庫(kù)文件代碼中對(duì)開(kāi)啟 Bluetooth 有一定的時(shí)間限制,默認(rèn)情況下是 3000 毫秒的超時(shí)時(shí)間,超時(shí)后會(huì) disable 藍(lán)牙,后經(jīng)筆者修改為 20 000 毫秒,這樣即可 enable 藍(lán)牙 芯片,從而進(jìn)入工作狀態(tài). 修改文件: iTop4412_KK4.4/external/bluetooth/bluedroid/Android.mk
8.jpg (36.49 KB, 下載次數(shù): 39)
下載附件
2020-6-11 11:35 上傳
1.5.2 init.connectivity.rc 文件 init.connectivity.rc 文件路徑: iTop4412_KK4.4/hardware/mediatek/config/combo_mt66xx/ init.combo_mt66xx.rc 原始文件名稱為 init.combo_mt66xx.rc,拷貝到 ramdisk 的 root 目錄下面名稱變更為 init.connectivity.rc 文件 。 我們?cè)谠撐募黾恿思虞d驅(qū)動(dòng)模塊庫(kù)操作,運(yùn)行 wmt_lanucher 服務(wù)操作,另外需要注意 文件原有的創(chuàng)建 bluetooth 相關(guān)目錄操作,及修改權(quán)限,變更擁有者,這些 command 非常 的重要,比如: # Load Blue module insmod /system/lib/modules/mtk_stp_bt.ko chmod 0660 /dev/stpbt chown bluetooth system /dev/stpbt mkdir /data/bluetooth 0711 bluetooth bluetooth mkdir /data/misc/bluedroid 0771 bluetooth bluetooth 1.5 總結(jié) 用戶在移植 HAL 層之前可以先使用 MTK 提供的藍(lán)牙測(cè)試工具 autobt 進(jìn)行測(cè)試,該測(cè)試 工具脫落復(fù)雜的 HAL 層,直接調(diào)用 libbt-vendor.so 也就是廠商自己的庫(kù)文件,在 Android 的 命令行中執(zhí)行即可,可以使用該命令查詢其他的藍(lán)牙設(shè)備,發(fā)送,接收文件等等。是判斷藍(lán) 牙硬件是否正常工作的有力工具,使用autobt測(cè)試通過(guò)后,再調(diào)試Android HAL及上層部分。 autobt 工具的源碼位于: iTop4412_KK4.4/hardware/mediatek/utility/hw_test_tool/bluetooth/src/tool 另外 MTK 官方提供了 Bluetooth 的多個(gè)補(bǔ)丁,路徑: APEX_Android_4.4_MP_SW_package_V2.0/Document/BT_patch_description(must read) 這些補(bǔ)丁是比較重要的,有關(guān)于藍(lán)牙基礎(chǔ)連接方面的,也有關(guān)于藍(lán)牙文件發(fā)送接收,藍(lán) 牙鼠標(biāo),藍(lán)牙耳機(jī)方面的,需要根據(jù)您的產(chǎn)品需求打?qū)?yīng)的補(bǔ)丁,我們發(fā)布的 Android4.4 代碼中已經(jīng)打上了藍(lán)牙基礎(chǔ)連接,和文件發(fā)送接收方面的補(bǔ)丁,其他的補(bǔ)丁未處理.
HAL 層修改完成后在 Android4.4 的 Setting 里面打開(kāi) Bluetooth,就可以掃描到其他藍(lán)牙 設(shè)備,然后進(jìn)行配對(duì),配對(duì)完成后就可以進(jìn)行文件的傳輸操作了,筆者僅測(cè)試了藍(lán)牙的文件 發(fā)送與接收功能,其他的藍(lán)牙功能比如藍(lán)牙耳機(jī),藍(lán)牙鼠標(biāo)的使用均未進(jìn)行測(cè)試,不過(guò)有了 文件發(fā)送接收的測(cè)試基本說(shuō)明了藍(lán)牙的 Porting 是 OK 的,如果您有興趣或者需求,可以移 植藍(lán)牙其他更豐富的功能與應(yīng)用。
7.jpg (129.01 KB, 下載次數(shù): 37)
下載附件
2020-6-11 11:35 上傳
|