亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種安卓藍(lán)牙協(xié)議棧向Mint17系統(tǒng)移植的方法

文檔序號:10534509閱讀:945來源:國知局
一種安卓藍(lán)牙協(xié)議棧向Mint17系統(tǒng)移植的方法
【專利摘要】本發(fā)明提供一種安卓藍(lán)牙協(xié)議棧向Mint17系統(tǒng)移植的方法該方法主要包括:1)添加用戶空間程序,調(diào)用硬件抽象層的藍(lán)牙標(biāo)準(zhǔn)接口使用藍(lán)牙功能;2)藍(lán)牙核心協(xié)議棧移植到Mint17;3)對接口bt_vendor_interface_t的實(shí)現(xiàn),控制內(nèi)核驅(qū)動;4)對內(nèi)核中的藍(lán)牙驅(qū)動程序進(jìn)行修改。該方法基于特定的Linux發(fā)行版本Mint17,通過修改Mint17系統(tǒng)中具體的驅(qū)動實(shí)現(xiàn)和特定模塊,實(shí)現(xiàn)安卓藍(lán)牙協(xié)議棧Bluedroid向Mint17系統(tǒng)移植的可行方案。本發(fā)明提供的新型的藍(lán)牙協(xié)議棧相比舊版本bluez具有更加清晰的層次劃分,具有更強(qiáng)的靈活性;可以增強(qiáng)Linux系統(tǒng)對藍(lán)牙移動設(shè)備的擴(kuò)展和兼容能力。
【專利說明】
_種安卓藍(lán)牙協(xié)議棧向M i nt17系統(tǒng)移植的方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明屬于網(wǎng)絡(luò)安全計(jì)算機(jī)技術(shù)領(lǐng)域,涉及一種安卓藍(lán)牙協(xié)議棧Bluedroid向 Mintl7系統(tǒng)移植的方法。
【背景技術(shù)】
[0002] 由于目前移動設(shè)備的普及,對藍(lán)牙的使用也日漸增多,最新安卓系統(tǒng)中支持的藍(lán) 牙協(xié)議棧Bluedroid以獨(dú)特的優(yōu)勢為安卓用戶提供服務(wù)。伴隨著移動技術(shù)的發(fā)展和安卓移 動設(shè)備用戶群的增長,新型安卓藍(lán)牙協(xié)議棧相較Linux官方藍(lán)牙協(xié)議棧bluez更加完善和普 及。Mint 17作為Linux的一種發(fā)行版,得到了越來越多的用戶青睞,如何將Bluedroid協(xié)議移 植到Mintl7系統(tǒng)中成為一項(xiàng)研究熱點(diǎn)。Mintl7下使用bluez藍(lán)牙協(xié)議框架,在內(nèi)核層集成了 hci、12cap、rfcomm、cmtp、bnep協(xié)議,其他上層協(xié)議在用戶空間集成,用戶空間通過系統(tǒng)調(diào) 用ioctl與內(nèi)核交互。從安卓4.2版本開始使用的Bluedroid協(xié)議棧在結(jié)構(gòu)上與bluez存在很 大的差異。其藍(lán)牙的驅(qū)動部分是在內(nèi)核層的driver目錄下實(shí)現(xiàn),但是除去藍(lán)牙驅(qū)動以外的 所有藍(lán)牙組件完全實(shí)現(xiàn)并且運(yùn)行在用戶空間。

【發(fā)明內(nèi)容】

[0003] 本發(fā)明要解決的技術(shù)問題是提供一種新型藍(lán)牙協(xié)議棧Bludroid向Mintl7系統(tǒng)移 植的方法,該方法通過分析對比兩種系統(tǒng)下藍(lán)牙協(xié)議的實(shí)現(xiàn)架構(gòu)、具體實(shí)現(xiàn)協(xié)議。從中解析 出與特定系統(tǒng)和硬件相關(guān)的部分,提取系統(tǒng)通用的部分,通過修改目標(biāo)系統(tǒng)的實(shí)現(xiàn)方法完 成Mintl7系統(tǒng)藍(lán)牙協(xié)議的移植。
[0004] 在Linux內(nèi)核中已經(jīng)集成了 BlueZ協(xié)議棧的部分核心內(nèi)容并且實(shí)現(xiàn)了對藍(lán)牙硬件 設(shè)備的驅(qū)動程序。而Bluedroid協(xié)議棧除驅(qū)動程序外,已經(jīng)完全在用戶空間實(shí)現(xiàn)了藍(lán)牙的所 有組件。因此,參考安卓Bluedroid藍(lán)牙系統(tǒng)框架,移植方案的具體方法為:將Bluedroid藍(lán) 牙框架作為Linux的用戶空間程序?qū)崿F(xiàn),去除安卓藍(lán)牙框架中硬件抽象層(Hardware Abstract Layer,簡稱HAL)層之上的部分,通過調(diào)用HAL標(biāo)準(zhǔn)接口實(shí)現(xiàn)藍(lán)牙功能。底層通過 動態(tài)加載庫文件打開內(nèi)核藍(lán)牙設(shè)備文件,通過主機(jī)控制器接口(Host Controller Interface,簡稱HCI)中對設(shè)備文件的讀寫實(shí)現(xiàn)藍(lán)牙硬件的控制。
[0005] Bluedroid藍(lán)牙協(xié)議棧整體框架劃分見附圖1。其中包含7個(gè)主要的模塊,各模塊的 大致功能如下:
[0006] JAVA程序:使用JAVA編程語言進(jìn)行編寫;表示藍(lán)牙框架最頂層的應(yīng)用程序,以及對 應(yīng)各種具體應(yīng)用(如耳機(jī),鼠標(biāo)等)的應(yīng)用規(guī)范的代碼實(shí)現(xiàn)。JNI:全稱JAVA Native Interface;通過C語言實(shí)現(xiàn),是聯(lián)系上層JAVA應(yīng)用和底層代碼的接口程序。HAL:全稱 Hardware Abstract Layer,硬件抽象層,是Bluedroid藍(lán)牙協(xié)議棧新加入的模塊,該模塊將 底層的藍(lán)牙協(xié)議通過軟件抽象為一個(gè)硬件設(shè)備,并向上層提供統(tǒng)一的接口,上層通過調(diào)用 這些接口對底層協(xié)議進(jìn)行控制。CORE STACK:藍(lán)牙協(xié)議具體實(shí)現(xiàn)的部分。HCI:全稱Ho s t Controller Interface,主機(jī)控制器接口;軟硬件的隔離模塊,向上層藍(lán)牙協(xié)議棧提供統(tǒng)一 標(biāo)準(zhǔn)的接口,通過調(diào)用HCI的標(biāo)準(zhǔn)接口,上層藍(lán)牙協(xié)議可以采用統(tǒng)一通用的方式完成對藍(lán)牙 硬件的控制而不必考慮硬件的異構(gòu)特性。VENDOR:不同藍(lán)牙廠商在這一模塊完成對各自芯 片產(chǎn)品的特異性配置;DRIVER:藍(lán)牙設(shè)備驅(qū)動程序,位于內(nèi)核空間。
[0007] 本發(fā)明的技術(shù)方案為:
[0008] 一種安卓藍(lán)牙協(xié)議棧向Mintl7系統(tǒng)移植的方法,該移植方法包括硬件抽象層 (HAL )、藍(lán)牙核心棧(CORE STACK )、主機(jī)控制器接口(HCI)和廠商模塊(VENDOR)。具體步驟 為:
[0009]第一步,添加用戶空間程序,調(diào)用HAL層的藍(lán)牙標(biāo)準(zhǔn)接口使用藍(lán)牙功能。HAL與上層 的接口 static e:onst bt_interface_t bluetoothlnterface ~ { slzeof (bluetoothlnterface), in.it,. enable:, disable, cleanup, ge t ad ap t e r __pr op er t i e :s, get-adapter一property, s e t_adap t:er_pr oper t y, :ge t _r e:m:o t e_d e v i c e_pr oper t i e s ge:t_r emo t e_de v i c e_proper t y,
[0010] sct-rcinotc-dcvicc-property, get_remote:_s::eryice_record, ge t _remc) t:e_ s e r v ices, s t ar t_d i sc 〇¥ er y ,: .e.aric el-discovery, create 一 bond, remo.v:.e-band., cancel-bond, get-connection一state, p:in_reply, s sp_r e:p 1 y:f ge t _pr o f 11 e _ i n: ter face:, dut_mqde_CQnfiglire, dut mode send, tti [" BI.E TNCLL'DED =- TRl'E letestmode, Sol sg
[0011] NULL, #e:ndif confI g he x_snoop_ 1 og, set_os_cal 1 out s, read energy^i nfo, I;
[0012]該接口提供藍(lán)牙基本功能的入口,包括初始化,開啟,搜索,配對等。藍(lán)牙HAL層還 包括其他相應(yīng)的應(yīng)用規(guī)范(profile)的接口實(shí)現(xiàn)。因此,編寫用戶空間程序,完成對標(biāo)準(zhǔn)接 口的調(diào)用即可實(shí)現(xiàn)相應(yīng)的藍(lán)牙功能。
[0013] 第二步,HAL,CORE STACK,HCI包含良好的接口實(shí)現(xiàn)和功能實(shí)現(xiàn),不需修改,將藍(lán)牙 核心協(xié)議棧直接移植到MintWAAL層和廠商模塊中間為藍(lán)牙核心協(xié)議棧,Bluedroid提供 完整的管理機(jī)制,和良好的接口實(shí)現(xiàn),不需要改動,直接移植到Mintl7。
[0014]第三步,作為連接內(nèi)核與用戶空間的廠商模塊,需要根據(jù)底層硬件特性進(jìn)行適當(dāng) 配置,因此是移植工作需要完成的重點(diǎn)內(nèi)容;廠商模塊這一層往下,通過對接口bt_vend〇r_ interface_t的實(shí)現(xiàn),對接口中的op函數(shù)對應(yīng)的不同操作進(jìn)行編碼,控制內(nèi)核中的藍(lán)牙驅(qū)動 程序,最終通過讀寫內(nèi)核中的設(shè)備文件對硬件進(jìn)行操作。其中op為移植的關(guān)鍵部分,需要實(shí) 現(xiàn)各廠商對Bluedroid定義的操作碼的處理。
[0015] bt_vendor_interface_t接口定義如下:
[0016] typedef struct { size-t size; int (^init) (const bt_vendor_callbacks_t* p__cb, unsigned char *loc:al_bdaddr); int. (*op) (bt-vendor-opcode-t. opcode, void ^paraiil); toid (^cleanup)(void); } bt^vendorinterface_t;
[0017]其中op為移植的關(guān)鍵部分,實(shí)現(xiàn)各廠商對Bluedroid定義的操作碼的處理,操作碼 如下: typedef enum { B〇ND OP POWFR CTRL, BT VND OP FW CFG, BT VND OP SCO CF(;, RT VND OP I'SERTAL OPEN,
[0018] RT VND OP LSERTAI, CLOSE, BT-側(cè) OP GET-LPM-IDLE-TIMEOUT, BTJ[ND OP LPM SET MODE, BT-VND-OP-LPM-WAKE-SET-STATE, BT_VND^0P^SET_AUDI0_STATE, BT VND OP EPTL0C,
[0019] } bt_¥end0r_opcode_t;
[0020] 在hci中包含一系列的指令發(fā)送,數(shù)據(jù)傳輸?shù)炔僮?,這些操作都會映射到操作對應(yīng) 的操作碼。通過〇P (opcode,param)控制硬件的具體操作。因此,需要對op函數(shù)對應(yīng)的不同操 作進(jìn)行編碼,最終通過讀寫內(nèi)核中的設(shè)備文件對硬件進(jìn)行控制。
[0021 ]第四步,對內(nèi)核中的藍(lán)牙驅(qū)動程序進(jìn)行修改。
[0022]在Mintl7內(nèi)核中,藍(lán)牙協(xié)議軟硬件的接口就是主機(jī)控制器接口HCI,HCI提供一套 調(diào)用底層硬件的統(tǒng)一命令接口。在/drivers/bluetooth路徑下實(shí)現(xiàn)了藍(lán)牙的驅(qū)動程序部 分。驅(qū)動程序中,HCI層對所有的外部藍(lán)牙設(shè)備都抽象為一個(gè)結(jié)構(gòu)體hci_deV,注冊一個(gè)藍(lán)牙 設(shè)備需要調(diào)用hci_register_dev()函數(shù),設(shè)備卸載調(diào)用hci_unregister_dev()函數(shù)。Linux 內(nèi)核中自帶的藍(lán)牙驅(qū)動有很多,hci_vhci . c為藍(lán)牙虛擬主控制器驅(qū)動程序,hci_uart .c為 串口接口主控制器驅(qū)動程序,btusb. c為USB接口主控制器驅(qū)動程序,btsdio. c為SDI0主控 制器驅(qū)動程序。
[0023]所有的驅(qū)動都是在HCI層以下實(shí)現(xiàn)的;在HCI模塊的代碼部分,通過內(nèi)核藍(lán)牙設(shè)備 文件操作過程完成藍(lán)牙驅(qū)動的控制和數(shù)據(jù)傳輸:
[0024] 4.1//打開動態(tài)鏈接庫 libbt-vendor ? so
[0025] 1ib_handle = dlopen(VEND0R_LIBRARY_NAME,RTLD_N0ff);
[0026] 4.2//獲取廠商模塊 libbt_vendor ? so 接口
[0027] vendor_interface=(bt_vendor_interface_t*)dlsym(lib_handle,VEND0R_ LIBRARY_SYMB0L_NAME);
[0028] 4.3//廠商模塊初始化注冊回調(diào)函數(shù)
[0029] int status=vendor_interface->init(&vendor_callbacks,(unsigned char*) local_bdaddr);
[0030] 4.4/7調(diào)用op函數(shù),發(fā)送指令數(shù)據(jù)
[0031 ] vendor_interface_>op(opcode,param);
[0032] 4.5//調(diào)用函數(shù)打開UART總線接口
[0033] bool userial_open(userial_port_t port)
[0034] 4.6//發(fā)送數(shù)據(jù),進(jìn)行數(shù)據(jù)寫入時(shí)調(diào)用的是標(biāo)準(zhǔn)的Linux系統(tǒng)調(diào)用write函數(shù)
[0035] //標(biāo)準(zhǔn)系統(tǒng)調(diào)用write
[0036] ret=write(userial_cb. fd[ch_idx] ,p_data+total, len);
[0037] 所述的藍(lán)牙驅(qū)動部分的修改具體過程為:
[0038] hdev->open = hci_uart_open ; //I
[0039] hdev->close = hci_uart_close ;//2
[0040] hdev->flush=hei_uart_flush;//3 [0041 ] hdev->send = hci_uart_send_frame ; //4
[0042] hdev->setup = hci_uart_setup ; //5
[0043]其中包含第一二三行代碼分別是對uart的基本操作,打開,關(guān)閉,刷新;第四行代 碼完成對數(shù)據(jù)發(fā)送控制函數(shù)的設(shè)置;第五行完成對uart的基本設(shè)置。
[0044]通過以上代碼的分析,HCI對文件的操作,數(shù)據(jù)讀寫等使用的都是標(biāo)準(zhǔn)的Linux系 統(tǒng)調(diào)用open,close,read,write等因而在進(jìn)行標(biāo)準(zhǔn)控制方面內(nèi)核空間的設(shè)備驅(qū)動可復(fù)用通 用的藍(lán)牙驅(qū)動程序。另一方面,如藍(lán)牙設(shè)備需要實(shí)現(xiàn)更加復(fù)雜的控制功能(一加為實(shí)現(xiàn)更加 精細(xì)化的功率控制而在內(nèi)核驅(qū)動部分添加了 bluetooth-power ? c文件)可針對性添加相應(yīng) 的文件。
[0045]本發(fā)明的有益效果為:1)新型的藍(lán)牙協(xié)議棧相比舊版本bluez具有更加清晰的層 次劃分,具有更強(qiáng)的靈活性,針對各個(gè)層次,開發(fā)人員只需添加或修改相應(yīng)的代碼即可完成 新功能的添加或優(yōu)化,極大的提高了系統(tǒng)的可擴(kuò)展性。通過新型藍(lán)牙協(xié)議棧,彌補(bǔ)舊版本開 發(fā)難度大的缺陷。2)通過對新型的藍(lán)牙協(xié)議棧Bluedro id的移植,可以增強(qiáng)Linux系統(tǒng)對藍(lán) 牙移動設(shè)備的擴(kuò)展和兼容能力。新版本藍(lán)牙協(xié)議棧Bluedroid除驅(qū)動外,全部藍(lán)牙協(xié)議完全 在用戶空間實(shí)現(xiàn),提高了 Linux內(nèi)核的安全性。
【附圖說明】
[0046] 附圖為實(shí)施例中安卓5.1.1中藍(lán)牙子系統(tǒng)整體框架圖。
【具體實(shí)施方式】
[0047] 一種Android Bluetooth向Mint系統(tǒng)移植的方法,需要移除Linux中Bluez相關(guān)的 模塊,保留內(nèi)核驅(qū)動,Bluedroid作為用戶空進(jìn)程。通過讀寫設(shè)備文件完成藍(lán)牙硬件控制。具 體包括以下步驟:
[0048] 第一步,添加用戶空間程序,調(diào)用HAL層藍(lán)牙標(biāo)準(zhǔn)接口 bt_interface_t使用藍(lán)牙功 能。
[0049] 第二步,HAL,C0RE STACK,HCI不需修改,將藍(lán)牙核心協(xié)議棧直接移植到Mintl7中。 [0050] 第三步,廠商模塊這一層往下,通過對接口 bt_vendor_interface_t的實(shí)現(xiàn),對op 函數(shù)對應(yīng)的不同操作進(jìn)行編碼,控制內(nèi)核驅(qū)動,最終通過讀寫內(nèi)核中的設(shè)備文件對硬件進(jìn) 行操作。
[0051]以高通藍(lán)牙芯片的廠商模塊支持為例,在安卓5.1.1官方源碼中,對應(yīng)的廠商模塊 代碼只包含三個(gè)文件:
[0052] Bt_vendor_qcom.c
[0053] Hardware.c
[0054] Userial_vendor.c
[0055] Bt_vendor_qcom. c 是對上面提到的廠商模塊接口 131:_^11(1〇1'_;[1^61€&06_1:的代碼 實(shí)現(xiàn)。
[0056] const bl vendor inlorraco_t Bn;ET00TlI VKND0R^LIB_TNTERFACF: = { si zeo'f (bt-vendor-.inte.r.f'過ce--t) > init, //初始化函數(shù) op, //藍(lán)牙操作函數(shù) cleanup }:;
[0057] Hardware. c文件實(shí)現(xiàn)狀態(tài)信息的讀取、傳遞。
[0058] Userialvendor.c文件則實(shí)現(xiàn)內(nèi)核中藍(lán)牙設(shè)備文件的打開操作。藍(lán)牙支持兩種數(shù) 據(jù)的通信方式UART和SMD,高通對SMD進(jìn)行支持,其中涉及到兩個(gè)設(shè)備文件的讀寫: static char *s_pszDe¥Sm(i[] = { M/dev/&mdd//,
[0059] 〃/dev/srad2〃. };
[0060] 其中/dev/smd3為指令,事件端口,/dev/smd2為數(shù)據(jù)收發(fā)端口。
[0061 ] libbt_vendor. so模塊主要完成Linux內(nèi)核中藍(lán)牙相關(guān)的設(shè)備文件的打開和關(guān)閉, 以及硬件設(shè)備的初始化和設(shè)置等工作。而藍(lán)牙的指令傳遞,事件傳遞,數(shù)據(jù)傳輸?shù)炔僮鲃t是 由]^1模塊實(shí)現(xiàn)。廠商模塊實(shí)現(xiàn)代碼位于目錄/11&1(^&代/9〇0111/131:/1;[13131:_^11(101'/。在廠商 模塊中,打開文件操作 [0062] //打開設(shè)備文件
[0063] fd = open(s_pszDevSmd[chId], (0_RDWR 10_N0CTTY));
[0064] //打開主線設(shè)備
[0065] fd = open(bt_hci_transport_device .name, (0_RDWR 10_N0CTTY));
[0066] 對文件的操作都是采用標(biāo)準(zhǔn)的系統(tǒng)調(diào)用。
[0067]第四步,在Mintl7內(nèi)核中,藍(lán)牙協(xié)議軟硬件的接口是主機(jī)控制器接口,在/ drivers/bluetooth路徑下實(shí)現(xiàn)藍(lán)牙的驅(qū)動程序部分;驅(qū)動程序中,HCI層對所有的外部藍(lán) 牙設(shè)備都抽象為一個(gè)結(jié)構(gòu)體hci_dev,注冊一個(gè)藍(lán)牙設(shè)備需要調(diào)用hci_register_dev()函 數(shù),設(shè)備卸載調(diào)用hci_unregister_dev〇函數(shù),實(shí)現(xiàn)對內(nèi)核中的藍(lán)牙驅(qū)動部分的修改。
[0068] 所有的藍(lán)牙驅(qū)動都圍繞hci_deV這個(gè)結(jié)構(gòu)體,然后完成如下所示的操作:
[0069] hdev->open = hci_uart_open;
[0070] hdev->close = hci_uart_close ;
[0071 ] hdev->f lush = hci_uart_f lush;
[0072] hdev->send = hci_uart_send_frame ;
[0073] hdev->setup = hci_uart_setup ;
[0074] 藍(lán)牙協(xié)議棧對底層設(shè)備一般是通過串口連接,兩者之間通過HCI協(xié)議通信。要求實(shí) 現(xiàn)一個(gè)tty串口驅(qū)動。對于Bluez而言,其上層是通過socket來發(fā)送、接收數(shù)據(jù)。因此,在藍(lán)牙 通信中,對上層應(yīng)用是socket通信,對下層是tty驅(qū)動實(shí)現(xiàn)。Tty驅(qū)動在路徑/drivers/ Bluetooth/hci_ll?c和/drivers/Bluetooth/hci_ldis?c中。
[0075] hci_ldi s. c實(shí)現(xiàn)了 一個(gè)藍(lán)牙專用的傳輸規(guī)范,其中對tty串口進(jìn)行了一些設(shè)置,如 下所示。
[0076] hci-iia-rt-.l disc., magic = TTY-LI>I SC-MAGIC;. hei_uart_ 1 disc. name =: 〃n_hc.i#;. h:ci_uart_ldisc. open = h:ci_uart Jty_open; hc:i_uart_ldise. close = hei_:uart_tty_close; he i_tiart_l di sc. r ead = hci_uart_tty_re:ad ; he i_uar t_ 1 di sc. wr i t:e = .hGi_u;ar t_t ty _ write ;
[0077] h:ci_uart_ldis:c. loctl = h:ci_uart_tty_ioetl :; hc:i_uart_ldise. pol 1 = hei_:uart_t:ty_pall; hci-iiart-rdisc.. receive-b.iif = hei-uart-tty-receive; he i_uar t_ 1 di sc. wr i t:e_wakenp = hGi_uart_tty_wakeup; h:ci_uart_ldisc. owner = THIS_M0DULE;
[0078]初始化實(shí)現(xiàn): static int --init hci_uart_lnit(void) { static struct tty-Idisc-op.s hci_uart_ldisc; int err:;. BT"INF〇rHC;I UART driver ver %s"? VERSION) ; meraset (&hci_ua.rt_ldisc, Q, siz@o:f (hei_uart_ldis;g));
[0079] :h:ci Jiart_ldisc:. magic = TTYJDISC-MAGIC; hc:i_uart_ldi sc. name = 〃n_hci〃; he i_aart_ldi se. open = hei_uart_tty_open; hG.i-uart-ldisc, close 二 h:c..i_-ua.rt.一tt.y-close; h:ci_uart_ldi sc:, read = hci_uart_tty_read; hc:i_uart_ldisc. write = hei-u.art-tty-write..;
[0080] hei di se, i oct 1 = h:c:i -u.a.rt-tt.y-i〇ct. 1. bei_uart_ldisc:., po 11 = h:ci_uart_tty_poll; hci_uart_ldisc. recelve_buf = hci_uaft_tty_receive; hci_uart_ldis;G, wri te_wa;k?up .=. hei-iiart-tty-wakeup; hci_u.art_ltlisc, owner = THIS-MODULE; err = tty--register--Idisc (N-HCI, &hci---uart--- ldisc); if (err) { BT ERRC^HCI line discipline registration failed, (%d) 〃., err); return err; } ttifdef C0NFIG_BT_HCIUART_H4 h.4-'i.n.itO #endif SiMef CONFIGJTJCIUARTJBCSP bGsp;_init (); #endif #ifdef CONFIG BT IICIUART LL ll init.(); #endif #ifdef C0NFIG_BT_JCIUART^TH3K ath_in:it(); ften.di f _ # i f d:e:f CONFI G_BT_HCTUART_3f T RE h.5---init (); ftendif SiTdcf CONFIG BTJICTl;ART _ INTEL int.eLin.it, ; Sendif #ifdef CQMFIG_BTjICTl;ART BCM
[0081] bcm initO #endif #ifdcf CONFIG BT IICTUART QCA qG:a_init;(); #endi f return 0; }
[0082]所有的驅(qū)動都是在HCI層以下實(shí)現(xiàn)的,在HCI模塊的代碼部分,實(shí)現(xiàn)對內(nèi)核中藍(lán)牙 驅(qū)動程序的調(diào)用和控制。
【主權(quán)項(xiàng)】
1. 一種安卓藍(lán)牙協(xié)議棧向Mintl7系統(tǒng)移植的方法,其特征在于,包括以下步驟: 第一步,添加用戶空間程序,調(diào)用HAL層藍(lán)牙標(biāo)準(zhǔn)接口使用藍(lán)牙功能; 第二步,HAUCORE STACK、HCI不需修改,將藍(lán)牙核心協(xié)議棧直接移植到Mintl7中; 第三步,廠商模塊這一層往下,通過對接口 bt_vendor_interface_t的實(shí)現(xiàn),對op函數(shù) 對應(yīng)的不同操作進(jìn)行編碼,控制內(nèi)核驅(qū)動,最終通過讀寫內(nèi)核中的設(shè)備文件對硬件進(jìn)行操 作; 第四步,在Mintl7內(nèi)核中,在/drivers/bluetooth路徑下實(shí)現(xiàn)藍(lán)牙的驅(qū)動程序部分;驅(qū) 動程序中,HCI層所有的外部藍(lán)牙設(shè)備抽象為一個(gè)結(jié)構(gòu)體hci_deV,注冊一個(gè)藍(lán)牙設(shè)備需要 調(diào)用hci_register_dev()函數(shù),設(shè)備卸載調(diào)用hci_unregister_dev()函數(shù),實(shí)現(xiàn)對內(nèi)核中 的藍(lán)牙驅(qū)動部分的修改,藍(lán)牙驅(qū)動部分的修改過程為: hdev->open = hci_uart_open ; //1 hdev->close = hci_uart_close ;//2 hdev->f lush = he i_uart_f lush ; //3 hdev->send = hci_uart_send_frame ; //4 hdev->setup = hci_uart_setup;//5 其中,第一二三行代碼分別是對uart的基本操作:打開,關(guān)閉,刷新;第四行代碼完成對 數(shù)據(jù)發(fā)送控制函數(shù)的設(shè)置;第五行完成對uart的基本設(shè)置。
【文檔編號】G06F9/44GK105893038SQ201610194611
【公開日】2016年8月24日
【申請日】2016年3月30日
【發(fā)明人】姚琳, 趙鑫, 王立坤
【申請人】大連理工大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1