CN105893038A - 一种安卓蓝牙协议栈向Mint17***移植的方法 - Google Patents
一种安卓蓝牙协议栈向Mint17***移植的方法 Download PDFInfo
- Publication number
- CN105893038A CN105893038A CN201610194611.3A CN201610194611A CN105893038A CN 105893038 A CN105893038 A CN 105893038A CN 201610194611 A CN201610194611 A CN 201610194611A CN 105893038 A CN105893038 A CN 105893038A
- Authority
- CN
- China
- Prior art keywords
- bluetooth
- hci
- mint17
- uart
- interface
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明提供一种安卓蓝牙协议栈向Mint17***移植的方法该方法主要包括:1)添加用户空间程序,调用硬件抽象层的蓝牙标准接口使用蓝牙功能;2)蓝牙核心协议栈移植到Mint17;3)对接口bt_vendor_interface_t的实现,控制内核驱动;4)对内核中的蓝牙驱动程序进行修改。该方法基于特定的Linux发行版本Mint17,通过修改Mint17***中具体的驱动实现和特定模块,实现安卓蓝牙协议栈Bluedroid向Mint17***移植的可行方案。本发明提供的新型的蓝牙协议栈相比旧版本bluez具有更加清晰的层次划分,具有更强的灵活性;可以增强Linux***对蓝牙移动设备的扩展和兼容能力。
Description
技术领域
本发明属于网络安全计算机技术领域,涉及一种安卓蓝牙协议栈Bluedroid向Mint17***移植的方法。
背景技术
由于目前移动设备的普及,对蓝牙的使用也日渐增多,最新安卓***中支持的蓝牙协议栈Bluedroid以独特的优势为安卓用户提供服务。伴随着移动技术的发展和安卓移动设备用户群的增长,新型安卓蓝牙协议栈相较Linux官方蓝牙协议栈bluez更加完善和普及。Mint17作为Linux的一种发行版,得到了越来越多的用户青睐,如何将Bluedroid协议移植到Mint17***中成为一项研究热点。Mint17下使用bluez蓝牙协议框架,在内核层集成了hci、l2cap、rfcomm、cmtp、bnep协议,其他上层协议在用户空间集成,用户空间通过***调用ioctl与内核交互。从安卓4.2版本开始使用的Bluedroid协议栈在结构上与bluez存在很大的差异。其蓝牙的驱动部分是在内核层的driver目录下实现,但是除去蓝牙驱动以外的所有蓝牙组件完全实现并且运行在用户空间。
发明内容
本发明要解决的技术问题是提供一种新型蓝牙协议栈Bludroid向Mint17***移植的方法,该方法通过分析对比两种***下蓝牙协议的实现架构、具体实现协议。从中解析出与特定***和硬件相关的部分,提取***通用的部分,通过修改目标***的实现方法完成Mint17***蓝牙协议的移植。
在Linux内核中已经集成了BlueZ协议栈的部分核心内容并且实现了对蓝牙硬件设备的驱动程序。而Bluedroid协议栈除驱动程序外,已经完全在用户空间实现了蓝牙的所有组件。因此,参考安卓Bluedroid蓝牙***框架,移植方案的具体方法为:将Bluedroid蓝牙框架作为Linux的用户空间程序实现,去除安卓蓝牙框架中硬件抽象层(Hardware Abstract Layer,简称HAL)层之上的部分,通过调用HAL标准接口实现蓝牙功能。底层通过动态加载库文件打开内核蓝牙设备文件,通过主机控制器接口(Host Controller Interface,简称HCI)中对设备文件的读写实现蓝牙硬件的控制。
Bluedroid蓝牙协议栈整体框架划分见附图1。其中包含7个主要的模块,各模块的大致功能如下:
JAVA程序:使用JAVA编程语言进行编写;表示蓝牙框架最顶层的应用程序,以及对应各种具体应用(如耳机,鼠标等)的应用规范的代码实现。JNI:全称JAVA Native Interface;通过C语言实现,是联系上层JAVA应用和底层代码的接口程序。HAL:全称Hardware Abstract Layer,硬件抽象层,是Bluedroid蓝牙协议栈新加入的模块,该模块将底层的蓝牙协议通过软件抽象为一个硬件设备,并向上层提供统一的接口,上层通过调用这些接口对底层协议进行控制。CORE STACK:蓝牙协议具体实现的部分。HCI:全称Host Controller Interface,主机控制器接口;软硬件的隔离模块,向上层蓝牙协议栈提供统一标准的接口,通过调用HCI的标准接口,上层蓝牙协议可以采用统一通用的方式完成对蓝牙硬件的控制而不必考虑硬件的异构特性。VENDOR:不同蓝牙厂商在这一模块完成对各自芯片产品的特异性配置;DRIVER:蓝牙设备驱动程序,位于内核空间。
本发明的技术方案为:
一种安卓蓝牙协议栈向Mint17***移植的方法,该移植方法包括硬件抽象层(HAL)、蓝牙核心栈(CORE STACK)、主机控制器接口(HCI)和厂商模块(VENDOR)。具体步骤为:
第一步,添加用户空间程序,调用HAL层的蓝牙标准接口使用蓝牙功能。HAL与上层的接口
该接口提供蓝牙基本功能的入口,包括初始化,开启,搜索,配对等。蓝牙HAL层还包括其他相应的应用规范(profile)的接口实现。因此,编写用户空间程序,完成对标准接口的调用即可实现相应的蓝牙功能。
第二步,HAL,CORE STACK,HCI包含良好的接口实现和功能实现,不需修改,将蓝牙核心协议栈直接移植到Mint17。HAL层和厂商模块中间为蓝牙核心协议栈,Bluedroid提供完整的管理机制,和良好的接口实现,不需要改动,直接移植到Mint17。
第三步,作为连接内核与用户空间的厂商模块,需要根据底层硬件特性进行适当配置,因此是移植工作需要完成的重点内容;厂商模块这一层往下,通过对接口bt_vendor_interface_t的实现,对接口中的op函数对应的不同操作进行编码,控制内核中的蓝牙驱动程序,最终通过读写内核中的设备文件对硬件进行操作。其中op为移植的关键部分,需要实现各厂商对Bluedroid定义的操作码的处理。
bt_vendor_interface_t接口定义如下:
其中op为移植的关键部分,实现各厂商对Bluedroid定义的操作码的处理,操作码如下:
在HCI中包含一系列的指令发送,数据传输等操作,这些操作都会映射到操作对应的操作码。通过op(opcode,param)控制硬件的具体操作。因此,需要对op函数对应的不同操作进行编码,最终通过读写内核中的设备文件对硬件进行控制。
第四步,对内核中的蓝牙驱动程序进行修改。
在Mint17内核中,蓝牙协议软硬件的接口就是主机控制器接口HCI,HCI提供一套调用底层硬件的统一命令接口。在/drivers/bluetooth路径下实现了蓝牙的驱动程序部分。驱动程序中,HCI层对所有的外部蓝牙设备都抽象为一个结构体hci_dev,注册一个蓝牙设备需要调用hci_register_dev()函数,设备卸载调用hci_unregister_dev()函数。Linux内核中自带的蓝牙驱动有很多,hci_vhci.c为蓝牙虚拟主控制器驱动程序,hci_uart.c为串口接口主控制器驱动程序,btusb.c为USB接口主控制器驱动程序,btsdio.c为SDIO主控制器驱动程序。
所有的驱动都是在HCI层以下实现的;在HCI模块的代码部分,通过内核蓝牙设备文件操作过程完成蓝牙驱动的控制和数据传输:
4.1//打开动态链接库libbt-vendor.so
lib_handle=dlopen(VENDOR_LIBRARY_NAME,RTLD_NOW);
4.2//获取厂商模块libbt_vendor.so接口
vendor_interface=(bt_vendor_interface_t*)dlsym(lib_handle,VENDOR_LIBRARY_SYMBOL_NAME);
4.3//厂商模块初始化注册回调函数
int status=vendor_interface->init(&vendor_callbacks,(unsignedchar*)local_bdaddr);
4.4//调用op函数,发送指令数据
vendor_interface->op(opcode,param);
4.5//调用函数打开UART总线接口
bool userial_open(userial_port_t port)
4.6//发送数据,进行数据写入时调用的是标准的Linux***调用write函数
//标准***调用write
ret=write(userial_cb.fd[ch_idx],p_data+total,len);
所述的蓝牙驱动部分的修改具体过程为:
hdev->open=hci_uart_open;//1
hdev->close=hci_uart_close;//2
hdev->flush=hci_uart_flush;//3
hdev->send=hci_uart_send_frame;//4
hdev->setup=hci_uart_setup;//5
其中包含第一二三行代码分别是对uart的基本操作,打开,关闭,刷新;第四行代码完成对数据发送控制函数的设置;第五行完成对uart的基本设置。
通过以上代码的分析,HCI对文件的操作,数据读写等使用的都是标准的Linux***调用open,close,read,write等因而在进行标准控制方面内核空间的设备驱动可复用通用的蓝牙驱动程序。另一方面,如蓝牙设备需要实现更加复杂的控制功能(一加为实现更加精细化的功率控制而在内核驱动部分添加了bluetooth-power.c文件)可针对性添加相应的文件。
本发明的有益效果为:1)新型的蓝牙协议栈相比旧版本bluez具有更加清晰的层次划分,具有更强的灵活性,针对各个层次,开发人员只需添加或修改相应的代码即可完成新功能的添加或优化,极大的提高了***的可扩展性。通过新型蓝牙协议栈,弥补旧版本开发难度大的缺陷。2)通过对新型的蓝牙协议栈Bluedroid的移植,可以增强Linux***对蓝牙移动设备的扩展和兼容能力。新版本蓝牙协议栈Bluedroid除驱动外,全部蓝牙协议完全在用户空间实现,提高了Linux内核的安全性。
附图说明
附图为实施例中安卓5.1.1中蓝牙子***整体框架图。
具体实施方式
一种Android Bluetooth向Mint***移植的方法,需要移除Linux中Bluez相关的模块,保留内核驱动,Bluedroid作为用户空进程。通过读写设备文件完成蓝牙硬件控制。具体包括以下步骤:
第一步,添加用户空间程序,调用HAL层蓝牙标准接口bt_interface_t使用蓝牙功能。
第二步,HAL,CORE STACK,HCI不需修改,将蓝牙核心协议栈直接移植到Mint17中。
第三步,厂商模块这一层往下,通过对接口bt_vendor_interface_t的实现,对op函数对应的不同操作进行编码,控制内核驱动,最终通过读写内核中的设备文件对硬件进行操作。
以高通蓝牙芯片的厂商模块支持为例,在安卓5.1.1官方源码中,对应的厂商模块代码只包含三个文件:
Bt_vendor_qcom.c
Hardware.c
Userial_vendor.c
Bt_vendor_qcom.c是对上面提到的厂商模块接口bt_vendor_interface_t的代码实现。
Hardware.c文件实现状态信息的读取、传递。
Userial_vendor.c文件则实现内核中蓝牙设备文件的打开操作。蓝牙支持两种数据的通信方式UART和SMD,高通对SMD进行支持,其中涉及到两个设备文件的读写:
其中/dev/smd3为指令,事件端口,/dev/smd2为数据收发端口。
libbt_vendor.so模块主要完成Linux内核中蓝牙相关的设备文件的打开和关闭,以及硬件设备的初始化和设置等工作。而蓝牙的指令传递,事件传递,数据传输等操作则是由HCI模块实现。厂商模块实现代码位于目录/hardware/qcom/bt/libbt_vendor/。在厂商模块中,打开文件操作
//打开设备文件
fd=open(s_pszDevSmd[chId],(O_RDWR|O_NOCTTY));
//打开主线设备
fd=open(bt_hci_transport_device.name,(O_RDWR|O_NOCTTY));
对文件的操作都是采用标准的***调用。
第四步,在Mint17内核中,蓝牙协议软硬件的接口是主机控制器接口,在/drivers/bluetooth路径下实现蓝牙的驱动程序部分;驱动程序中,HCI层对所有的外部蓝牙设备都抽象为一个结构体hci_dev,注册一个蓝牙设备需要调用hci_register_dev()函数,设备卸载调用hci_unregister_dev()函数,实现对内核中的蓝牙驱动部分的修改。
所有的蓝牙驱动都围绕hci_dev这个结构体,然后完成如下所示的操作:
hdev->open=hci_uart_open;
hdev->close=hci_uart_close;
hdev->flush=hci_uart_flush;
hdev->send=hci_uart_send_frame;
hdev->setup=hci_uart_setup;
蓝牙协议栈对底层设备一般是通过串口连接,两者之间通过HCI协议通信。要求实现一个tty串口驱动。对于Bluez而言,其上层是通过socket来发送、接收数据。因此,在蓝牙通信中,对上层应用是socket通信,对下层是tty驱动实现。Tty驱动在路径/drivers/Bluetooth/hci_ll.c和/drivers/Bluetooth/hci_ldis.c中。
hci_ldis.c实现了一个蓝牙专用的传输规范,其中对tty串口进行了一些设置,如下所示。
初始化实现:
所有的驱动都是在HCI层以下实现的,在HCI模块的代码部分,实现对内核中蓝牙驱动程序的调用和控制。
Claims (1)
1.一种安卓蓝牙协议栈向Mint17***移植的方法,其特征在于,包括以下步骤:
第一步,添加用户空间程序,调用HAL层蓝牙标准接口使用蓝牙功能;
第二步,HAL、CORE STACK、HCI不需修改,将蓝牙核心协议栈直接移植到Mint17中;
第三步,厂商模块这一层往下,通过对接口bt_vendor_interface_t的实现,对op函数对应的不同操作进行编码,控制内核驱动,最终通过读写内核中的设备文件对硬件进行操作;
第四步,在Mint17内核中,在/drivers/bluetooth路径下实现蓝牙的驱动程序部分;驱动程序中,HCI层所有的外部蓝牙设备抽象为一个结构体hci_dev,注册一个蓝牙设备需要调用hci_register_dev()函数,设备卸载调用hci_unregister_dev()函数,实现对内核中的蓝牙驱动部分的修改,蓝牙驱动部分的修改过程为:
hdev->open=hci_uart_open;//1
hdev->close=hci_uart_close;//2
hdev->flush=hci_uart_flush;//3
hdev->send=hci_uart_send_frame;//4
hdev->setup=hci_uart_setup;//5
其中,第一二三行代码分别是对uart的基本操作:打开,关闭,刷新;第四行代码完成对数据发送控制函数的设置;第五行完成对uart的基本设置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610194611.3A CN105893038A (zh) | 2016-03-30 | 2016-03-30 | 一种安卓蓝牙协议栈向Mint17***移植的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610194611.3A CN105893038A (zh) | 2016-03-30 | 2016-03-30 | 一种安卓蓝牙协议栈向Mint17***移植的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105893038A true CN105893038A (zh) | 2016-08-24 |
Family
ID=57014392
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610194611.3A Withdrawn CN105893038A (zh) | 2016-03-30 | 2016-03-30 | 一种安卓蓝牙协议栈向Mint17***移植的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105893038A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109167617A (zh) * | 2018-08-10 | 2019-01-08 | 深圳市智微智能科技开发有限公司 | 安卓***适配usb蓝牙适配器的方法及相关产品 |
CN109451472A (zh) * | 2018-10-08 | 2019-03-08 | 四川长虹电器股份有限公司 | Android智能设备上多蓝牙芯片的动态管理方法 |
CN110366039A (zh) * | 2019-07-12 | 2019-10-22 | 四川长虹电器股份有限公司 | 一种Android***下不同蓝牙模组的兼容方法 |
CN111427617A (zh) * | 2019-01-09 | 2020-07-17 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置及设备 |
CN111954039A (zh) * | 2020-07-02 | 2020-11-17 | 深圳市华曦达科技股份有限公司 | 机顶盒蓝牙配置方法、装置、电子设备及存储介质 |
CN113099433A (zh) * | 2021-04-14 | 2021-07-09 | 深圳泰科晶显科技有限公司 | 一种基于安卓***的动态的兼容不同厂商的wifi及蓝牙模块的方法 |
CN114860629A (zh) * | 2022-05-16 | 2022-08-05 | 哈尔滨国铁科技集团股份有限公司 | 基于usb虚拟化的计算机设备读取方法 |
WO2023284699A1 (zh) * | 2021-07-12 | 2023-01-19 | 北京字节跳动网络技术有限公司 | 基于Linux***的协议栈数据传输方法、计算机设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101924582A (zh) * | 2010-07-29 | 2010-12-22 | 上海慧翰信息技术有限公司 | 通信装置及其中间件 |
-
2016
- 2016-03-30 CN CN201610194611.3A patent/CN105893038A/zh not_active Withdrawn
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101924582A (zh) * | 2010-07-29 | 2010-12-22 | 上海慧翰信息技术有限公司 | 通信装置及其中间件 |
Non-Patent Citations (2)
Title |
---|
FLY123456789: "android bluetooth 移植相关注意事项", 《HTTP://BLOG.CHINAUNIX.NET/UID-20768928-ID-5674215.HTML》 * |
MANTEAU: "enable_native中的hci dev注册和up", 《HTTP://WWW.XUEBUYUAN.COM/1494166.HTML》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109167617A (zh) * | 2018-08-10 | 2019-01-08 | 深圳市智微智能科技开发有限公司 | 安卓***适配usb蓝牙适配器的方法及相关产品 |
CN109167617B (zh) * | 2018-08-10 | 2022-04-01 | 深圳市智微智能科技股份有限公司 | 安卓***适配usb蓝牙适配器的方法及相关产品 |
CN109451472A (zh) * | 2018-10-08 | 2019-03-08 | 四川长虹电器股份有限公司 | Android智能设备上多蓝牙芯片的动态管理方法 |
CN109451472B (zh) * | 2018-10-08 | 2021-04-06 | 四川长虹电器股份有限公司 | Android智能设备上多蓝牙芯片的动态管理方法 |
CN111427617A (zh) * | 2019-01-09 | 2020-07-17 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置及设备 |
CN111427617B (zh) * | 2019-01-09 | 2023-05-30 | 斑马智行网络(香港)有限公司 | 数据处理方法、装置及设备 |
CN110366039A (zh) * | 2019-07-12 | 2019-10-22 | 四川长虹电器股份有限公司 | 一种Android***下不同蓝牙模组的兼容方法 |
CN111954039A (zh) * | 2020-07-02 | 2020-11-17 | 深圳市华曦达科技股份有限公司 | 机顶盒蓝牙配置方法、装置、电子设备及存储介质 |
CN111954039B (zh) * | 2020-07-02 | 2022-07-01 | 深圳市华曦达科技股份有限公司 | 机顶盒蓝牙配置方法、装置、电子设备及存储介质 |
CN113099433A (zh) * | 2021-04-14 | 2021-07-09 | 深圳泰科晶显科技有限公司 | 一种基于安卓***的动态的兼容不同厂商的wifi及蓝牙模块的方法 |
WO2023284699A1 (zh) * | 2021-07-12 | 2023-01-19 | 北京字节跳动网络技术有限公司 | 基于Linux***的协议栈数据传输方法、计算机设备和存储介质 |
CN114860629A (zh) * | 2022-05-16 | 2022-08-05 | 哈尔滨国铁科技集团股份有限公司 | 基于usb虚拟化的计算机设备读取方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105893038A (zh) | 一种安卓蓝牙协议栈向Mint17***移植的方法 | |
CN104679513B (zh) | 一种智能终端中的设备驱动架构开发方法 | |
CN108023952A (zh) | 一种基于云雾结合的模块化物联网应用快速构建平台 | |
CN102902544B (zh) | 一种电话支付终端软件平台的实现方法 | |
CN102855143B (zh) | 一种scada***中通用通信框架 | |
CN103746746B (zh) | 一种网络设备的业务*** | |
CN108141733A (zh) | Nfc“拆分堆栈”体系架构 | |
US7469359B2 (en) | Method and apparatus for testing communication software | |
CN105933767A (zh) | 中间件装置、中间件实现方法和电视机 | |
EP4060588A1 (en) | Virtual electronic card management method and system, security chip, terminal, and storage medium | |
CN107122219A (zh) | 安装文件的获取方法和装置 | |
WO2024055757A1 (zh) | 驱动程序的硬件资源自动配置方法、装置、***及介质 | |
CN109358839A (zh) | 一种嵌入式单片机软件开发的方法及存储介质 | |
CN101800910B (zh) | 一种模拟***、pc侧模拟器及手机侧代理客户端 | |
CN105068910A (zh) | 一种智能卡的测试方法和装置 | |
CN106598647A (zh) | 一种智能装置开发平台 | |
CN102169447A (zh) | 一种自定义外壳程序的注册、注销方法及相应的*** | |
CN103024012B (zh) | 电脑与智能终端调制解调器之间的数据交互方法 | |
CN101840391B (zh) | 一种电子支付***双处理器子***间通信及其调用方法 | |
CN113099433A (zh) | 一种基于安卓***的动态的兼容不同厂商的wifi及蓝牙模块的方法 | |
CN104519011B (zh) | 半导体设备管理***及其协议转换模块、半导体设备管理方法 | |
US8844827B2 (en) | Chip card, and method for the software-based modification of a chip card | |
WO1998021862A1 (en) | Multi-layered interface for interconnecting application programs to system bus lines for electronic devices | |
CN101110031A (zh) | 用于灵活在线/离线部署n层软件应用程序的错接接口 | |
CN107181981A (zh) | 通过外部设备进行电视升级的方法、装置、电视及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20160824 |
|
WW01 | Invention patent application withdrawn after publication |