bluez编译移植
glib库的交叉编译与移植
glib库的交叉编译与移植这里需要强调一下:libc、glibc、glib是不同的库!glibc和libc 都是Linux下的C 函数库,而glib是GTK+的基础库libc 是Linux下的ANSI C 函数库;glibc 是Linux 下的GUN C 函数库。
上位机环境:PC:win7,家庭普通版虚拟机:VMware® Workstation,版本:9.0.2 build-1031769FEDORA:14开发板环境:MYD-C287开发板:采用飞思卡尔imx.287 ARM 9芯片,Linux2.6.35内核版本,Uboot 2013.03,gcc-4.4.4交叉编译链我们最终目的是在我们的开发板上能够执行使用了glib库的可执行文件。
要达到这个目的我们需要几个步骤:1、需要使用交叉编译链交叉编译glib库;2、将生成的动态库加入到文件系统的lib目录中;3、使用交叉编译出来的glib库,交叉编译.c文件,然后在开发板中执行文件;安装前准备:glib源码包下载地址:/pub/gnome/sources/glib/2.24/这里我们使用的是glib-2.22.5.tar.gzlibffi源码包下载地址:https:///libffi/libffi是glib的依赖库,所以需要先交叉编译这个库,我们使用的是libffi-3.2.1.tar.gzpkg的安装:pkg-config是一个很好的文本替换命令,主要用于编译命令上,FEDORA中已安装过该命令。
第一步:交叉编译glib库在交叉编译glib前我们需要先交叉编译glib的依赖库libffi1、libffi的安装ffi是glib依赖的一个库,在交叉编译以前需要先交叉编译libffi将libffi-3.2.1.tar.gz甩入FEDORA的/home/embedclub/local/arm,目录中。
解压缩源码:tar zxvf libffi-3.2.1.tar.gz并建立安装路径: /home/embedclub/local/arm/glib在解压缩文件目录libffi-3.2.1中,直接开始配置操作键入命令:CC=arm-none-linux-gnueabi-gcc ./configure --prefix=/home/embedclub/local/arm/glib/ffi/--host=arm-none-linux-gnueabi应该不会遇到任何问题,然后就会生成我们需要的Makefile文件。
单片机移植minilzo算法
单片机移植minilzo算法关于单片机移植minilzo算法的文章。
一、介绍在嵌入式系统和单片机领域中,对于数据压缩算法的需求越来越高。
然而,由于资源受限,传统的压缩算法在单片机上的移植性能较低。
为满足单片机应用的需求,minilzo算法应运而生。
minilzo是一种轻量级的数据压缩算法,其特点在于高压缩比和低资源消耗。
本文将介绍如何在单片机上移植minilzo算法。
二、理解minilzo算法minilzo算法是由Mathias Svensson在2004年发布的一种压缩算法。
它基于LZO算法,但对于资源消耗更加友好。
minilzo算法的核心是实现了LZO算法的子集,主要包括LZO1X-1压缩和解压缩部分。
LZO1X-1是一种基于字典的压缩方法,它通过构建一个查找表和后缀链来实现数据的压缩和解压缩。
三、确定目标平台和开发环境在移植minilzo算法之前,首先需要确定目标平台和开发环境。
目标平台可能是某个具体型号的单片机,例如STC89C52或者AVR系列。
开发环境可以是Keil或者IAR等集成开发环境。
根据目标平台和开发环境的选择,可以确定所需的编译器、硬件资源和相应的库文件。
四、了解minilzo算法的实现细节移植minilzo算法之前,需要对其实现细节有所了解。
具体来说,需要了解LZO1X-1的压缩和解压缩算法以及数据结构的组织方式。
在了解了这些细节之后,可以开始进行移植工作。
五、单片机上的资源优化在单片机上移植算法时,资源消耗是一个非常重要的因素。
由于单片机的资源有限,需要对算法进行优化。
可以通过以下几个方面进行资源优化:1. 选择合适的数据结构:选择适合单片机的数据结构,以节省存储空间。
2. 优化算法实现:对算法进行优化,减少计算量和内存消耗。
3. 硬件加速:部分单片机具备硬件加速功能,可以利用硬件加速来提高算法的执行效率。
4. 缓冲区管理:合理管理缓冲区,避免频繁的内存分配和释放操作。
蓝牙bluez的编程CC++
蓝⽛bluez的编程CC++蓝⽛ bluez 的编程 C C++简介bluez⽬录有⼀个libbluetooth.a⽂件有⼀个⽬录 lib⽬录⾥⾯存储这⽹络连接的部分代码基于库的代码编程.在linux下如果⾃带了蓝⽛,可以通过gcc **.c -lbluetooth 直接编出⼀个可执⾏⽂件.参考⽂献下⾯的连接提供了⼀个测试代码.另外,关于 ble 使⽤库的⽅式⼀直出现失败的情况,是因为,没有设置ble的相关参数,具体可以参考中的enable_advertising函数int device_id = hci_get_route(NULL);int device_handle = 0;if ((device_handle = hci_open_dev(device_id)) < 0) {perror("Could not open device");exit(1);}le_set_advertising_parameters_cp adv_params_cp = { 0 };adv_params_cp.min_interval = htobs(advertising_interval);adv_params_cp.max_interval = htobs(advertising_interval);adv_params_cp.chan_map = 7;uint8_t status;struct hci_request rq = { 0 };rq.ogf = OGF_LE_CTL;rq.ocf = OCF_LE_SET_ADVERTISING_PARAMETERS;rq.cparam = &adv_params_cp;rq.clen = LE_SET_ADVERTISING_PARAMETERS_CP_SIZE;rq.rparam = &status;rq.rlen = 1;int ret = hci_send_req(device_handle, &rq, 1000);if (ret < 0) {hci_close_dev(device_handle);fprintf(stderr, "Can't send request %s (%d)\n", strerror(errno), errno);return (1);}le_set_advertise_enable_cp advertise_cp = { 0 };advertise_cp.enable = 0x01;memset(&rq, 0, sizeof(rq));rq.ogf = OGF_LE_CTL;rq.ocf = OCF_LE_SET_ADVERTISE_ENABLE;rq.cparam = &advertise_cp;rq.clen = LE_SET_ADVERTISE_ENABLE_CP_SIZE;rq.rparam = &status;rq.rlen = 1;ret = hci_send_req(device_handle, &rq, 1000);if (ret < 0) {hci_close_dev(device_handle);fprintf(stderr, "Can't send request %s (%d)\n", strerror(errno), errno);return (1);}。
Linux下Bluez的编程实现
(转自:/index.html)Linux下Bluez的编程实现1、蓝牙的各个协议栈的简介 (2)1.1、蓝牙技术 (2)1.1、蓝牙协议栈 (2)1.2、蓝牙技术的特点 (4)1.2.1、蓝牙协议栈体系结构 (4)1.2.2、蓝牙协议栈低层模块 (4)1.2.3、软件模块 (5)1.3、蓝牙的一些Profile (6)2、Bluez和D-Bus (7)2.1、Bluez和D-Bus体系结构 (7)2.2、D-Bus介绍 (9)2.3、Bluez的安全接口 (13)2.4、Bluez适配器接口 (15)2.5、Bluez配对 (16)2.6、Bluez绑定 (17)3、Bluez编程实现 (18)3.1、蓝牙开发关键技术剖析 (18)3.1.1、连接机制分析 (18)3.1.2、自动连接 (18)3.1.3、时钟设计 (19)3.1.4、配对列表管理 (20)3.1.5、蓝牙文件传输模式 (20)3.2、hci层介绍 (20)3.2.1、hci层介绍 (20)3.2.2、hci层编程 (21)3.3、L2CAP层编程 (25)3.3.1、L2CAP协议简介 (25)3.3.2、L2CAP编程方法 (26)3.4、SDP协议简介 (27)4、Openobex (28)4.1、Openobex简介 (28)4.2、Openobex与bluez编程实现 (29)5、Obexftp (32)5.1、obexftp简介 (32)5.2、基于Obexftp的应用程序开发 (32)6、参考资料 (32)1.1、蓝牙技术蓝牙(Bluetooth)技术是由Ericsson、IBM、Intel、Nokia和T oshiba公司于1998年5月共同提出开发的,并联合成立了蓝牙特殊利益小组(S IG),负责开发无线协议规范并设定交互操作的需求。
其本质是设备间的无线链接,意在于代替有线电缆。
1.1、蓝牙协议栈协议栈是指一组协议的集合,举个例子,把大象装到冰箱里,总共要3步。
Android上成功实现了蓝牙的一些Profile
Android上成功实现了蓝牙的一些Profile前段时间做蓝牙方面的开发,Google的Android只实现了Handset/Handfree和A2DP/AVRCP等Profile,而其它常用的Profile如HID/DUN/SPP/OPP/FTP/PAN等却没有实现,并且Google方面关于何时实现也没有一个时间表。
前段时间我实现了HID/DUN/SPP三个Profile,下一步实现OPP/FTP等Profile。
具体的开发其实也简单,我是参照A2DP的代码进行的相关Profile的实现。
Android的Handset/Handfree的实现方式和A2DP/AVRCP的方式有很大的不同,Handset/Handfree是直接在bluez的RFCOMM Socket上开发的,没有利用bluez的audio plugin,而A2DP/AVRCP是在bluez的audio plugin基础上开发的,所以大大降低了实现的难度。
其实bluez的audio plugin上也有Handset/Handfree的实现,但不知道为什么Google没有用它,而要在RFCOMM Socket上自己实现一个,这使得Handset/Handfree的实现显得比较复杂。
HID要用到bluez的input plugin,Android已经把它编译进去了,在system/lib/bluez-plugin/input.so下,与input.so一起的还有audio.so库,那是供A2DP/AVRCP用的。
参照frameworks/base/core/jni /android_server_BluetoothA2dpService.cpp,自己写一个HID用的的.cpp文件,其中跟A2DP一样利用 DBUS调用input.so库的CreateDevice/Connect/Disconnect 等函数,具体源码在external/bluez /utils/input/manager.c和external/bluez/utils/input/device.c 中。
bluez编译移植
Dbus移植步骤1.进入dbus的目录运行./configure --host=arm-linux--prefix=/bluetooth/dbus2.出现错误can not run test program while cross compiling[mystic@moolenaar]$ . checking for getpeereid... nochecking abstract socket namespace... configure: error: cannot run test program while cross compilingSee `config.log' for more details.执行./configure时要在宿主系统中运行一些测试程序,因为是交叉编译所以这个测试是一定通不过的。
不过没问题,我们可以在configure 时指定cache-file文件来屏障掉测试程序,在下面编译glib包时会遇到同样的问题。
处理方法:在源码包根目录下执行[mystic@moolenaar]$ echo ac_cv_have_abstract_sockets=yes >arm-linux.cache或者自己新建一个文件,vim arm-linux.cache在里面输入:ac_cv_have_abstract_sockets=yes[mystic@moolenaar]$ ./configure --host=arm-linux--prefix=/bluetooth/dbus --cache-file=arm-linux.cache参数解释:--prefix指定编译好的文件存放的路径,默认会放到/usr/bin下--host 指定编译器的类型,这里指定为arm-linux交叉编译,默认是本机的gcc编译--cache 指定测试的信息写的地方,这里是写到了arm-linux.cache里面一会会提示缺少xml库,下载libxlm2,解压后:./configure –-prefix=/bluetooth/libxml –-host=arm-linuxmake ->make install编译完成后一定要检查libxml/lib下的库文件的格式是否是ARM的,否则不能用。
PetaLinux操作系统在MicroBlaze系统中的移植解析
PetaLinux操作系统在MicroBlaze系统中的移植解析PetaLinux操作系统在MicroBlaze系统中的移植解析大多使用linux的人都对WINE程序比较熟悉,WINE程序是可以在不需要Windows的情况下使用Windows的软件。
下面是店铺整理的关于PetaLinux操作系统在MicroBlaze系统中的移植,希望大家认真阅读!FPGA生产商Xilinx公司提供了全面的嵌入式处理器解决方案,包括PowerPC、MicroBlaze和PicoBlaze三款RISC结构的处理器核。
其中,MicroBlaze是32位嵌入式软核处理器解决方案,支持CoreConnect总线的标准外设集合,具有兼容性、可配置性以及重复利用性,能够根据成本和性能要求提供高性价比的处理性能。
支持MicroBlaze处理器的嵌入式操作系统很多,比如uc/os—II、BuleCat ME Linux、RTA MB、ThreadX、PetaLinux等等。
本文介绍了PetaLogix公司发布的PetaLinux操作系统,并分析了Xilinx公司所使用BSP自动生成技术。
最后总结出PetaLinux操作系统在MicroBlaze平台上的移植方法和步骤。
1 PetaLinux操作系统介绍PetaLinux操作系统是面向MicroBlaze软核处理器的全功能嵌入式Linux操作系统。
其发布采用了“all inone”的整合方式,将针对MicroBlaze处理器定制的Linux2.4/z.6内核源码、U—boot源码、相关的开发工具以及开发板参考硬件平台配置,集成在一个压缩包内发行,极大地方便了开发人员的使用。
该操作系统主要具有以下几大特点:①针对FPGA嵌入式开发的特点采用了板级支持包。
②自动生成工具,可以根据用户定义的嵌入式硬件平台信息自动生成板级支持包,简化了操作系统的移植。
③PetaLinux发布的源码树中包含了部分常用IP核的驱动程序(如GPIO、EthernetLite、UartLite等),减少了用户移植、编写驱动程序的工作量。
基于BlueZ协议栈的蓝牙语音接入系统实现与性能分析
摘要 :根据 蓝牙“ 三合 一电话” 应用模 型要 求 , 通过 内核 配置 、 础库 和工具 集 的移植 以及 内核 烧 基
写等 步骤 , 蓝牙 B uZ协议 栈移植 到嵌 入 式 A M 平 台, 程 实现 了 T SB nr 将 l e R 编 C iay协议 , 制 完 研
成 了一种基 于嵌入 式蓝 牙协议栈 Bu Z 的语 音无 线接 入 系 统 , 括嵌 入 式 蓝牙 语 音 网关和 蓝牙 le 包
b s d o u Z r t c lsa k a e n Bl e p o o o t c
Ch n Fa g e n S n e h n S e a f n Hu Jn Xi ewe o g Tic e g h n Li n e g ig aW i i
维普资讯
பைடு நூலகம்
第3 8卷 第 4期
20 0 8年 7月
东 南 大 学 学 报 (自然科学版 )
J UR L OF S UT E S NI R I Y ( trl ce c dt n O NA O H A T U VE S T Na a S i eE io ) u n i
关 键词 : l Z; 入 式网关 ; 音接 入 ; Bu 嵌 e 语 话务 模 型
中图分 类号 : N 1 T 94
文献标 识码 : A
文章编 号 : 0 1 0 0 (0 8 0 -5 80 10 — 5 5 20 ) 40 5 -6
理解和使用蓝牙BlueZ中的FTP与PBAP协议
理解和使⽤蓝⽛BlueZ中的FTP与PBAP协议作者:刘旭晖 Raymond转载请注明出处Email:colorant@BLOG:/colorant/主页:/site/rgbbones在蓝⽛Bluetooth协议栈中,⽂件传输协议FTP(File Transfer Profile)和电话号码簿访问协议PBAP(Phonebook Access Profile)都是构建在对象交换协议OBEX的基础上(此外还有OPP和Synchronization),⽽在BlueZ的具体实现中,FTP和PBAP都是基于类似的底层API接⼝和调⽤路径实现的,两者在内部实现中有很⼤的相似之处。
因为在最近的⼯作中参与了PBAP的代码实现,所以在这⾥记录⼀下⾃⼰对这部分内容的理解和相关协议的使⽤⽅法。
1 相关说明1.1 相关⽹站资源BlueZ的官⽅⽹址:/ 这⾥提供最新的Release版本下载/ BlueZ 相关的⼏个Git代码仓库都放在这⾥,包括我们要⽤到的BlueZ,bluez-gnome,openobex和obexdBluez的Wiki:/wiki/ 这⾥提供Bluez相关的Howto等⽂档资源/wiki/VCard vCard格式等相关内容相关邮件列表:/vger-lists.html#linux-bluetooth Bluez开发者活动的地⽅,有什么Bug之类的怀疑,还有编程接⼝之类的问题,就发到这⾥吧。
IRC Channel:irc://freenode/obexdirc://freenode/bluez1.2 ⼯作环境因为在BlueZ中FTP的实现最近做了⼀些变更,⽽PBAP则是新实现的Profile,所以要让这两者能正常⼯作,需要使⽤⼤于4.22版本的BlueZ,同时,openobex和obexd需要使⽤2008/12/24⽇以后的版本。
按Release版本号来说,应该相应的会是1.5和0.9以后的版本(到今天2009/1/4为⽌,还没有正式发布版本:)2 基本⼯作原理2.1 代码框架基本上来说,openobex实现了obex protocol中相关的API接⼝,实现了对Connect / Disconnect / Get / Put / Setpath / Abort 等command的⽀持。
[ZZ]从hcid玩起
[ZZ]从hcid玩起hcid进展hcid -n 跟hcid -f /etc/bluetooth/hcid.conf出去配置⽂件外,执⾏的程序好像是⼀样的,主要区别是⼀个在后台运⾏,⼀个在前台运⾏。
由于开发板中没有syslog⽇⾄⽂件,只能⽤hcid -n来找错误了1、当不插⼊usb蓝⽛适配器时出现以下错误:# hcid -nhcid[79]: Bluetooth HCI daemonhcid[79]: syntax error line 4hcid[79]: syntax error line 6hcid[79]: Can't open system message bus connection: Failed to connect to socket/usr/local/var/run/dbus/system_bus_socket: No such file or directory但程序死在这⾥,不再执⾏,也就说程序也没有退出,猜测⼀下,是不是不插蓝⽛适配器时看似启动的hcid守护进程,也是在后台运⾏到这⾥⽽不退出,表⾯上看起来运⾏是对的假设我现在插⼊蓝⽛适配器会出现什么错误呢插⼊:# hcid -nhcid[79]: Bluetooth HCI daemonhcid[79]: syntax error line 4hcid[79]: syntax error line 6hcid[79]: Can't open system message bus connection: Failed to connect to socket/usr/local/var/run/dbus/system_bus_socket: No such file or directoryhub.c: USB new device connect on bus1/1, assigned device number 9hcid[79]: HCI dev 0 registeredhcid[79]: Registering DBUS Path: /org/bluez/Device/hci0process 79: arguments to dbus_connection_register_object_path() were incorrect,assertion "connection != NULL" failed in file dbus-connection.c line 5071.This is normally a bug in some application using the D-Bus library.D-Bus not built with -rdynamic so unable to print a backtraceSIGABRT结果插⼊后hcid进程收到⼀个SIGABRT信号⽽终⽌了程序,原来如此,也就是说后台运⾏的hcid守护进程同样会收到⼀个SIGABRT信号⽽终⽌程序,所以外在表现就是直接杀死了进程,也就是说程序中有问题,但是程序是官⽅⽹站下的,不可能出现太⼤的错误,到⽹上搜了搜,有的说dbus-dameon没有开启,个⼈认为可能是正确的,有⼈说要⽤hcid进程,必须开启dbus守护进程。
Android之蓝牙驱动开发总结
Android之蓝牙驱动开发总结二Android Bluetooth架构 (1)2.1 Bluetooth架构图 (1)2.2 Bluetooth代码层次结构 (3)三Bluetooth协议栈分析 (4)3.1 蓝牙协议栈 (4)3.2 Android与蓝牙协议栈的关系 (5)四Bluetooth之HCI层分析 (5)4.1 HCI层与基带的通信方式 (6)4.2 包的分析及研究 (7)4.3 通信过程的研究与分析 (8)五Bluetooth之编程实现 (8)5.1 HCI层编程 (8)5.2 L2CAP层编程 (10)5.3 SDP层编程 (12)六Bluetooth之启动过程实现 (13)6.1 Bluetooth启动步骤 (14)6.2 Bluetooth启动流程 (14)6.3 Bluetooth数据流向 (14)6.4 Bluez控制流程 (14)6.5 Bluetooth启动过程分析 (15)七Bluetooth之驱动移植 (15)7.1 android系统配置 (15)7.2 启动项修改 (16)7.3 电源管理rfkill驱动 (16)7.4 Rebuild Android image and reboot (16)7.5 实现BT睡眠唤醒机制 (16)7.6 系统集成 (17)八Bluetooth之调试与编译 (17)8.1 Bluetooth驱动调试 (17)九Bluetooth之应用程序开发 (18)9.1 Bluetooth的API开发 (18)9.2 The Basics开发 (18)9.3 Bluetooth Permissions开发 (19)9.4 Setting Up Bluetooth服务 (19)9.5 Finding Devices服务 (20)9.6 Connecting Devices服务 (22)9.7 Managing a Connection服务 (26)9.8 Working with Profiles服务 (28)十总结与疑问 (29)一Bluetooth基本概念蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。
蓝牙协议体系和蓝牙协议的实现方法
蓝牙协议体系和蓝牙协议的实现方法
余群;王群生
【期刊名称】《陕西理工学院学报(自然科学版)》
【年(卷),期】2004(020)001
【摘要】蓝牙技术是便携式电子设备和固定式电子设备之间代替电缆连接的短距离无线通信的标准.介绍了蓝牙的一些背景知识和协议体系,剖析了蓝牙技术的实现方法,对实现蓝牙所遇到的一些关键问题进行了一些探讨和研究.
【总页数】5页(P36-40)
【作者】余群;王群生
【作者单位】广州大学,信息与机电工程学院,广东,广州,510091;华南理工大学,电子与信息学院,广东,广州,510641
【正文语种】中文
【中图分类】TN914
【相关文献】
1.浅析基于蓝牙协议的生理电信号传输的实现 [J], 赵亚茹
2.一种新的轻量化 Android蓝牙协议栈的设计与实现 [J], 李满玲;周庆明
3.蓝牙协议栈BlueZ移植及GPS实现 [J], 郑春芳;郭秋丽
4.基于Linux蓝牙协议实现的设计接口 [J], 郭锐;宁禄乔
5.Windows CE下蓝牙协议栈驱动的实现 [J], 王洪杰;王金刚
因版权原因,仅展示原文概要,查看原文内容请购买。
安卓ROM移植教程(史上最精最全)
目录目录 (1)第三章制作第三方移植乐蛙ROM(高通篇) (3)一、选择合适的基础包 (3)1.1选择合适的第三方ROM包 (3)1.2选择合适的乐蛙OS刷机包 (3)二、移植之前的准备工作 (3)1.保证刷机脚本的通用性 (4)2.学习使用BeyondCompare (4)三、移植过程中所需要的操作 (4)1.移植乐蛙的应用层和framework框架层 (4)1.1应用层(system/app)移植 (5)1.2framework框架层(system/framework)移植 (7)2.移植lib层 (8)3.移植system/bin文件夹 (8)4.移植system/xbin文件夹 (9)5.移植system/media文件夹 (9)6.修改build.prop (9)四、移植完成后的工作 (9)1.压缩打包为zip刷机包 (9)2.使用Recovery输入ROM包进行测试 (10)3.测试过后出现Bug的反馈机制 (10)(高通篇)第三章制作第三方移植乐蛙ROMROM(高通篇)在本文中我们将会对市面上存在的高通、德州仪器、三星、tegra四种平台的机器的移植进行介绍,今天先给大家带来高通篇。
选择合适的基础包一、选择合适的基础包一、1.1选择合适的第三方ROM包市面上高通平台的手机众多,使用高通机器的手机也有着众多的ROM,这是我们需要选择一个合适的ROM作为基础包(这这里简称Base)。
首先,本篇中我们讲的是第三方ROM的移植,不包括官方ROM和官方ROM美化版,在第一章中我们也有所介绍,关于官方ROM的移植,我们后续文章中将会有所介绍。
在这里我们推荐选用CM的ROM作为base包,选取条件如下:1)首先要找到自己机型的CM的ROM;2)所选择的ROM要尽量功能完善;3)如果为自己机型开发的ROM并不多,则尽量选取使用同一厂商同一平台的其它机器的ROM,例如U8510就可以选用C8650的ROM。
Buletooth
作为一种通用的无线通信技术,规范自然是蓝牙技术的核心。
蓝牙规范可分为两个层次,如图1所示:图2 蓝牙核心规范4.0的模块由图2可知,蓝牙核心规范4.0的模块增加了以下几个蓝牙低功耗组件。
∙GATT表示服务器属性和客户端属性,描述了属性服务器中使用的服务层次,特点和属性。
BLE设备使用它作为蓝牙低功耗应用规范的服务发现。
∙ATT实现了属性客户端和服务器之间的点对点协议。
ATT客户端给ATT服务器发送请命令。
ATT服务器向ATT客户端发送回复和通知。
∙SMP用于生成对等协议的加密密钥和身份密钥。
SMP管理加密密钥和身份密钥的存储,它通过生成和解析设备的地址来识别蓝牙设备。
1.2 蓝牙应用规范[②]蓝牙SIG根据不同的应用场景定义了不同的蓝牙应用规范,截止到现在,发布了40个蓝牙应用规范。
本节介绍最常用的五个的蓝牙应用规范。
1.2.1 Advanced Audio Distribution ProfileAdvanced Audio Distribution Profile 简称为A2DP(高质量音频分发规范)定义了如何将立体声质量的音频通过流媒体的方式从媒体源传输到接收器上。
A2DP使用Asynchronous Connectionless Link (ACL,蓝牙异步传输)信道传输高质量音频内容,它依赖于Generic Audio/Video Distribution Profile(GAVDP,通用音频/视频分发规范)。
A2DP必须支持低复杂度及Sub-bandCodec(SBC,低带宽编解码),可选支持MPEG1,2音频,MPEG2、4AAC。
A2DP的应用场景如图4[1]所示:A2DP的应用场景如图3所示:图3 A2DP的应用场景由图3可知,A2DP有两种应用场景分别是播放和录音。
∙播放场景是具有蓝牙功能的播放器通过A2DP向蓝牙耳机或蓝牙立体声扬声器传送高质量音频。
∙录音场景是具有蓝牙功能的麦克风通过A2DP向蓝牙录音器传送高质量音频。
linux下bluez的移植
linux下bluez的移植~bluez的移植可以用两个字概括:麻烦!原因是它不是单纯的bluez的编译,它还需要其他很多的库的支持,下面先列举一下这些库的麻烦依赖关系吧:bluez-libs-3.36(不需要其他库)bluez-utils-3.36:glib-2.16.5dbus-1.0.2:libxml2-2.7.4libsndfile-1.0.17libusb-0.1.12前面两个必须的,后两个看你的配置,bluez4也一样;下面开始编译:Bluez移植到arm s3c2410上搞了好几天的蓝牙协议栈(bluez)的移植,现在终于有点小成就了,写下来和大家分享。
以下介绍Bluez移植的基本步骤。
一,linux内核的配置Linux 2.6版本之后的内核一般都有蓝牙模块的配置,所以你不用再打补丁了。
由于我也是处于摸索阶段,所以我暂时用的是开发板上自带的内核。
#tar zxvf linux.2.6.*解压缩内核,进入内核目录。
在名令行输入# make disclean/make clean/make rmproper,选择这三个中的任意一个对内核进行清理,关于这三个命令的区别你可以google一下,然后自己去区分。
#make menuconfig/make config /make oldconfig /make xconfig输入如这三个命令中的任何一个,对内核进配置,这几条命令的区别,请你自己google。
推荐使用make menuconfig 。
进入内核配置界面之后,根据你的自己的需要进行选择。
关于内核的配置请单独查看内核配置方面的文档。
#make zImage ARCH=arm CROSS_COMPILE=arm-linux-到此内核镜像就已经做好了。
二,编译bluez协议栈。
移植过蓝牙协议栈的人,肯定会觉得,Bluez协议栈的编译是最麻烦的一件事情。
其实,如果你能理清楚bluez-utils所依赖的一些库,你就能很快的cross-compile交叉编译出一套能在开发板上跑起来的程序。
蓝牙协议栈BlueZ的移植与开发
蓝牙协议栈BlueZ的移植与开发*欧阳鑫 于红岩 吕杨(昆明理工大学信息工程与自动化学院,昆明,650051)摘要:蓝牙技术是当前国内外科技界和产业界研究开发的热点技术,其应用范围包括手机、PDA、信息家电设备等领域,蓝牙技术在嵌入式系统上必将得到广泛的应用。
而要在嵌入式系统上提供蓝牙开发支持,蓝牙协议栈的移植是关键。
本文分析了蓝牙协议栈BlueZ体系结构,详细介绍了在S3C2410开发板上移植BlueZ的步骤,建立了嵌入式蓝牙应用开发平台,并提出了用BlueZ 开发蓝牙应用程序的思路。
关键字:蓝牙技术;蓝牙协议栈BlueZ;移植;S3C2410;Linux中图分类号:TP368.1 文献标识码:ABlueZ Porting and ProgrammingOu Yangxin,Yu Hongyan,Lv Yang(College of Information Engineering and Automation,Kunming University of Scienceand Technology,Kunming 650051,China)Abstract: Bluetooth technology is the focused on by the domestic and overseas research institutes. This technology is widely used in mobile phone, PDA, and Information Appliance devices. In the future,bluetooth technology will be widely used in embedded system. Built some bluetooth applications on embedded system,the key technology is porting bluetooth protocol suites to platform. In this paper,we study the BlueZ architecture,describe the steps of Porting BlueZ to S3C2410 Platform in detail,and build the embedded bluetooth application programming platform. In the end, we also give the idea of bluetooth programming.Keywords: bluetooth technology,bluetooth protocol suites BlueZ,porting, S3C2410, Linux1引言蓝牙技术是一项低价格、低功耗的射频技术,它能使蓝牙设备实现近距离无线通信。
Android蓝牙协议
Android蓝牙协议栈Android蓝牙协议栈使用的是BlueZ,支持GAP, SDP, and RFCOMM规范,是一个SIG认证的蓝牙协议栈。
Bluez 是GPL许可的,因此Android的框架内与用户空间的bluez代码通过D-BUS进程通讯进行交互,以避免专有代码。
Headset和Handsfree(v1.5)规范就在Android框架中实现的,它是跟Phone App紧密耦合的。
这些规范也是SIG认证的。
下面的图表提供了一个以库为导向的蓝牙栈视图。
实线框的是Android模块,红色虚线部分为合作伙伴指定模块(译者注:芯片商提供)。
下面的图表是以进程为导向视图:移植BlueZ是兼容蓝牙2.1的,可以工作在任何2.1芯片以及向后兼容的旧的蓝牙版本。
有要有两个方面:∙串口驱动 UART driver∙蓝牙电源开/关 Bluetooth Power On/Off串口驱动BlueZ核心子系统使用hciattach守护进程添加你的指定硬件串口驱动。
例如,MSM7201A,这个文件是在drivers/serial/msm_serial.c。
你还需要通过修改init.rc为hciattach来编辑命令行选项。
蓝牙电源开/关蓝牙芯片的电源开关方法1.0和Post 1.0是不同的,具体如下:∙ 1.0:Android框架写0或1到/sys/modules/board_[PLATFORM]/parameters/bluetooth_power_on∙Post 1.0:Android框架使用linux rfkill API,参考 arch/arm/mach-msm/board-trout-rfkill.c例子。
编译编译Android打开蓝牙支持,添加下面这行内容到BoardConfig.mk。
BOARD_HAVE_BLUETOOTH :=true解决问题调试调试你的蓝牙实现,可以通过读跟蓝牙相关的logs(adb logcat)和查找ERROR和警告消息。
蓝牙驱动及Bluez使用流程分析
Tech蓝牙驱动分析 及Bluez使用流程分析GuideRevision HistoryDate <01/11/2010> Issue <0.5> First draft Description Author Wylhistory目录1. 2. 3. ABSTRACT .................................................................................................................................................. 4 INTRODUCTION ........................................................................................................................................ 4 蓝牙驱动介绍 ............................................................................................................................................... 4 3.1 串口驱动介绍 ........................................................................................................................................ 5 32 初始化.................................................................................................................................................... 5 . 3.2.1 模块上电 ........................................................................................................................................ 5 3.2.2 PSKEY的设置 ................................................................................................................................. 6 3.3 HCIATTACH的工作原理 .......................................................................................................................... 7 3.3.1 Hci_uar和bcsp层的加入 ................................................................................................................. 9 3.3.2 hci层的加入.................................................................................................................................. 10 3.3.3 hci_attach的内核处理 .................................................................................................................. 11 4. 数据在驱动的传递流程.............................................................................................................................. 13 4.1 4.2 4.3 4.4 4.5 5. UART层的数据接收.............................................................................................................................. 13 HCI_UART的数据接收 .......................................................................................................................... 14 BCSP层的处理 ...................................................................................................................................... 15 HCI层及以上的处理............................................................................................................................. 15 数据流程的总结 .................................................................................................................................. 17扫描过程的分析 ......................................................................................................................................... 18 5.1 用户使用例子 ...................................................................................................................................... 18 5.2 用HCITOOL扫描时的逻辑 ..................................................................................................................... 18 5.2.1 上层逻辑 ...................................................................................................................................... 18 5.2.2 内核层逻辑 .................................................................................................................................. 19 5.3 通过DBUS触发的逻辑 .......................................................................................................................... 21 5.3.1 上层逻辑之adapter dbus方法的建立 ........................................................................................... 21 5.3.2 上层扫描方法的调用 ................................................................................................................... 22 5.3.3 Dbus触发的扫描对应于内核层的处理 ........................................................................................ 25 5.3.4 上层的扫描数据收集 ................................................................................................................... 26 5.3.5 Hci_send_frame的讨论 ................................................................................................................. 286.A2DP的使用过程........................................................................................................................................ 28 6.1 如何使用.............................................................................................................................................. 28 6.2 服务的激活 .......................................................................................................................................... 29 6.3 设备的创建 .......................................................................................................................................... 30 6.3.1 ............................................................................................................................................................. 33 6.3.2 ............................................................................................................................................................. 33 6.3.3 ............................................................................................................................................................. 33 6.3.4 ............................................................................................................................................................. 33 6.4 设备的连接 .......................................................................................................................................... 33 ©Tech, 2010-1-11 Page 2 of 466.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 7.L2cap的连接................................................................................................................................. 34 AVDTP_DISCOVER的发送逻辑................................................................................................... 35 AVDTP_GET_CAPABILITIES命令的发送.................................................................................... 36 AVDTP_SET_CONFIGURATION的逻辑 ...................................................................................... 37 AVDTP_OPEN函数逻辑 ............................................................................................................... 38 AVDTP_START的逻辑 .................................................................................................................. 40HANDSFREE的使用过程 .......................................................................................................................... 42 7.1 7.2 7.3 7.4 使用流程.............................................................................................................................................. 42 HEADSET的连接.................................................................................................................................... 42 SCO的打开 ........................................................................................................................................... 45 数据的流动 .......................................................................................................................................... 468. 9.总结 ............................................................................................................................................................. 46 未讨论 ......................................................................................................................................................... 46©Tech, 2010-1-11Page 3 of 461. 2.Abstract介绍一下bluez的驱动架构以及上层的使用流程.Introduction主要分成几个部分: Bluez驱动整体框架, 数据在驱动的传递流程, A2dp的上层逻辑, Handsfree的上层逻辑 主要软硬件配置如下: 内核:2.6.21 硬件:pxa310 蓝牙芯片:CSR BC4 BlueZ:3.223.蓝牙驱动介绍从整体上来说,我们的蓝牙是一个模块,它需要和CPU通讯以交换信息,所以它需要一个接口,在 我们的平台上它用的UART口, 当然还有USB接口的, 我没做过, 所以不讨论; 另外一方面蓝牙还要和modem 这边传递数据,比如传递语音,这也要一个接口才行,因为我们的蓝牙芯片只提供了PCM接口,所以或者 是modem的输出就是数字接口,或者就需要把modem输出的数字接口经过一定的转化,比如引入一个中间 的codec把模拟接口转化成数字接口,再接到我们的蓝牙芯片,我们的板子就是后一种实现方案;而蓝牙 驱动要做哪些事呢?在我刚接手的时候,也是一头雾水,蓝牙驱动这说法,太抽象了,因为我们用的是蓝 牙模块,并非是独立的芯片,它所该有的功能都有了;从协议层的角度来说radio层,BB层,LC,LM层, HCI层都不需要我们去管, 都应该是已经被实现在蓝牙模块里面了,需要我们关注的本质就是cpu和蓝牙模 块之间的接口, 以及在这个接口上传递的数据格式, 也就是说数据包的格式, 数据包的处理, 而后者在linux 驱动层里面是已经有完整实现的,只需要在配置的时候选上: HCI UART driver BCSP protocol support 就可以了,不过有时候模块供应商会做一些修改,也可以用他们已经修改过的代码; 对于前者,也就是接口的问题,对我来说本质上就是串口的驱动,这个显然linux的代码里面早就已经实现 了的,也不需要我去操心,看看下面这个图就明白了:©Tech, 2010-1-11Page 4 of 46上面写明了internal ROM,也即是说是蓝牙模块内部的事情了,那我也就不管了; 经过这一番分析之后,剩下的事情就是初始化蓝牙模块了,那肯定少不了的上电,然后是模块重启, 还缺点什么呢? 蓝牙驱动和别的驱动一样,也要设一些寄存器,差别在于,它的寄存器被称为PSKEY,也就是说有 一步是PSKEY设置,这步是通过bccmd来完成的; 好像完了,但是还差一步,这步估计不好想到,仔细想想,假设现在蓝牙模块以及就绪了,数据从 蓝牙模块通过串口传递到了主板,但是这些数据是如何传递到蓝牙的协议层的呢?有点奇怪啊?这步是通 过hciattach来完成的; 总结一下,蓝牙驱动的三个步骤: 1, 串口驱动必须要先就绪,这是cpu和蓝牙模块之间的桥梁,没有这步,后面的都无法进行,包括 PSKEY的设置,数据的传递都是通过串口的,所以这步是根本; 2, 初始化,包括模块上电,PSKEY的设置; 3, 通过hciattach建立串口和蓝牙协议层之间的数据连接通道; 下面分别介绍! 3.1串口驱动介绍串口驱动本身很复杂,请参阅附录里面的文档“串口驱动分析”,这里可以简单介绍一下: 从上到下就是: TTY层 Uart层 Uart对应的Port层 对蓝牙来说, 数据先从串口驱动上来通过ldisc进入到蓝牙的hci_uart层, 然后交给更上面的协议层了; 这个过程后面会详细介绍;32 .初始化模块上电在我们的平台上是通过一个GPIO来控制的,在函数lin2008_poweron_wifibt_board里面会进 ©Tech, 2010-1-11 Page 5 of 463.2.1行上电的操作以及对应的reset动作,当然这步得需要看spec,通常是先高再低再高; 函数如下: static int wifibt_power_status; int lin2008_poweron_wifibt_board(void) { if (!wifibt_power_status) { pxa3xx_mfp_set_configs(lin2008_wifibt_pins, ARRAY_SIZE(lin2008_wifibt_pins)); pxa3xx_gpio_set_direction(MFP_WIFI_V18_ENABLE, GPIO_DIR_OUT); pxa3xx_gpio_set_direction(MFP_WLAN_RESETN, GPIO_DIR_OUT); pxa3xx_gpio_set_level(MFP_WIFI_V18_ENABLE, 1); pxa3xx_gpio_set_level(BT_RESET_GPIO, 1); pxa3xx_gpio_set_level(MFP_WLAN_RESETN, 1); mdelay(1); pxa3xx_gpio_set_level(BT_RESET_GPIO, 0); pxa3xx_gpio_set_level(MFP_WLAN_RESETN, 0); // bt need > 5 ms to reset mdelay(5); pxa3xx_gpio_set_level(BT_RESET_GPIO, 1); pxa3xx_gpio_set_level(MFP_WLAN_RESETN, 1); wifibt_power_status++; return 0; } wifibt_power_status++; return 1; } 因为用的是wifi和蓝牙合体的模块,所以里面也包含了对wifi的初始化; 3.2.2 PSKEY的设置 它的原理就是通过串口(前面已经建立起来的)发送命令给蓝牙模块,对于串口必须要知道的是要 能通讯,必须得设好波特率,另外一方面蓝牙模块的晶振频率也必须要设,否则它不知道该怎么跳 了;当然不同的芯片可能初始化的过程也不一样,也许还要下载firmware等等;在我们的平台上这步 是通过bccmd来完成的,比如下面这些设置: // PSKEY_ANA_FREQ &01fe = 9C40 // PSKEY_UART_BAUD_RATE &01be = 0EBF关于pskey的设置,请看附录“pskeys.html”,里面有更加全面的介绍; 下面来看看bccmd的工作过程: 我们调用的命令为: bccmd -t bcsp -d /dev/ttyS1 psload -r csr.psr 它的流程如下:©Tech, 2010-1-11Page 6 of 46从这个图可以看出,它的原理就是打开/dev/ttyS1然后根据用户传入的命令调用不同的处理函数,比 如对于psload就是读入配置文件并解析,再根据蓝牙芯片所识别的包类型(在这里是bcsp)拼凑发送 给底层的数据包,最后通过ubcsp_poll函数把数据发送出去; 经过这步的设置基本上蓝牙模块以及可以正常工作了; 但是还没有和上面的协议层建立纽带关系,也就是说从uart1收到的数据还没有传给hci层;3.3Hciattach的工作原理如何把uart1也就是蓝牙模块传上来的数据交给hci层,在驱动里面是通过一个叫做disc的机制完成 的,这个机制本意是用来做过滤或者限制收上来的字符的,但是在蓝牙驱动里面则直接把数据传给了蓝牙 协议层,再也不回到串口的控制了; 调用的命令为: hciattach -s 921600 /dev/ttyS1 bcsp 921600 下面看看这句话到底是什么意思? 先看上层的使用逻辑:©Tech, 2010-1-11Page 7 of 46最最关键的就是这两个ioctl了,那就是参数为TIOCSETD和HCIUARTSETPROTO的ioctl,下面需要看看内核 里面对于这两个ioctl的处理逻辑, 不过看这个逻辑之前需要先理一下驱动的逻辑架构, 否则你就会晕头转向, 请看下图:©Tech, 2010-1-11Page 8 of 46这是数据的流动过程,最底层的也就是和硬件打交道的是uart层了,它的存在和起作用是通过串口 驱动来保证的,这个请参阅附录,但是其它的层我们都不知道什么时候work的,下面来看看: 3.3.1 Hci_uar和bcsp层的加入 如图所示:©Tech, 2010-1-11Page 9 of 46Hci_uart层做的事情其实很简单。
[BlueZ]2、使用bluetoothctl搜索、连接、配对、读写、使能notify蓝牙。。。
[BlueZ]2、使⽤bluetoothctl搜索、连接、配对、读写、使能notify蓝⽛。
星期三, 05. 九⽉ 2018 02:03上午 - beautifulzzzz⽬录1、前⾔上⼀篇讲了如何编译安装BlueZ-5,本篇主要在于玩BlueZ,⽤命令⾏去操作BLE设备:2、gatttool —— ⽼⼯具趟坑刚开始跟着操作gatttool,发现坑太多(主要原因是⼯具⽼了):采⽤sudo gatttool -b 4D:69:98:0E:91:5E -I 去连接发现会报错:Error: connect error: Connection refused (111)最终参考LINK-11发现需要加random选项():➜ ~ sudo gatttool -b 4D:69:98:0E:91:5E -I[4D:69:98:0E:91:5E][LE]> connectAttempting to connect to 4D:69:98:0E:91:5EError: connect error: Connection refused (111)[4D:69:98:0E:91:5E][LE]> exit➜ ~ sudo gatttool -t random -b 4D:69:98:0E:91:5E -I[4D:69:98:0E:91:5E][LE]> connectAttempting to connect to 4D:69:98:0E:91:5EConnection successful[4D:69:98:0E:91:5E][LE]>(gatttool:3104): GLib-WARNING **: Invalid file descriptor.过⼀回会10S⾃动断开,⽹上说这个⼯具⽼了,不建议⽤了():There are new tools to use with GATT, bluetoothctl/bluetoothd is the preferred since with that you have GAP, etc, but if want to use a stand alone tool then I suggest you use btgatt-client.3、bluetoothctl——NB的新⼯具命令⾏进⼊bluetoothctl操作环境():bluetoothctl我在⼿机上⽤lightblue模拟⼀个BLE设备ty_prod,之后对其service进⾏修改,调⽤scan on进⾏搜索还是⽼的,最终发现要先⽤remove移除之前的设备,之后再scan就会出现[NEW] Device 72:3B:E1:81:4E:4F ty_prod设备注:⽤lightblue模拟的设备的MAC不是固定的注:我发现在lightblue中⽆论怎么模拟BLE设备,⼀旦被连上搜索到的service都是IPone的[bluetooth]# devicesDevice 28:ED:6A:A0:26:B7 ty_prodDevice 58:71:33:00:00:24 Bluetooth KeyboardDevice 00:1A:7D:DA:71:0A SHEN-PCDevice 94:87:E0:B3:AC:6F Mi Phone[bluetooth]# remove 28:ED:6A:A0:26:B7...[bluetooth]# scan onDiscovery started[NEW] Device 72:3B:E1:81:4E:4F ty_prod[bluetooth]# scan off...Discovery stopped[bluetooth]# connect 72:3B:E1:81:4E:4FAttempting to connect to 72:3B:E1:81:4E:4F[CHG] Device 72:3B:E1:81:4E:4F Connected: yesConnection successful[ty_prod]索性就⽤IPhone⾃带的服务做测试了~[ty_prod]# infoDevice 28:ED:6A:A0:26:B7 (public)Name: tuya_mdev_testAlias: tuya_mdev_testAppearance: 0x0040Icon: phonePaired: yesTrusted: noBlocked: noConnected: yesLegacyPairing: noUUID: Fax (00001111-0000-1000-8000-00805f9b34fb)UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)UUID: Current Time Service (00001805-0000-1000-8000-00805f9b34fb)UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb)UUID: Battery Service (0000180f-0000-1000-8000-00805f9b34fb)UUID: Vendor specific (7905f431-b5ce-4e99-a40f-4b1e122d00d0)UUID: Vendor specific (89d3502b-0f36-433a-8ef4-c502ad55f8dc)UUID: Vendor specific (9fa480e0-4967-4542-9390-d343dc5d04ae)UUID: Vendor specific (d0611e78-bbb4-4591-a5f8-487910ae4366)[CHG] Device 28:ED:6A:A0:26:B7 ServicesResolved: no[CHG] Device 28:ED:6A:A0:26:B7 Connected: no我们⽤Current Time Service,列出所有attributes操作如下:[tuya_mdev_test]# menu gatt[tuya_mdev_test]# list-attributes 28:ED:6A:A0:26:B7...Primary Service/org/bluez/hci0/dev_47_B1_26_C1_81_18/service004100001805-0000-1000-8000-00805f9b34fbCurrent Time ServiceCharacteristic/org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char004500002a0f-0000-1000-8000-00805f9b34fbLocal Time InformationCharacteristic/org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char004200002a2b-0000-1000-8000-00805f9b34fbCurrent TimeDescriptor/org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042/desc004400002902-0000-1000-8000-00805f9b34fbClient Characteristic Configuration...上⾯Current Time Service对应的服务如下图:我们选择Current Time进⾏操作UUID:0x2A2B[ty_prod]# select-attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042[tuya_mdev_test:/service0041/char0042]# readAttempting to read /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042[CHG] Attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042 Value:e2 07 09 05 01 24 11 03 f1 02 .....$....e2 07 09 05 01 24 11 03 f1 02 .....$....[tuya_mdev_test:/service0041/char0042]# attribute-infoCharacteristic - Current TimeUUID: 00002a2b-0000-1000-8000-00805f9b34fbService: /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041Value:e2 07 09 05 01 2e 01 03 f5 02 ..........Notifying: yesFlags: readFlags: notify读出结果⼤致意思应该是:2018-9/5-1:36:17 周三读取⼀下0x180A的Device Information:[tuya_mdev_test:/service0006/char0007]# select-attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a [tuya_mdev_test:/service0047/char004a]# attribute-infoCharacteristic - Model Number StringUUID: 00002a24-0000-1000-8000-00805f9b34fbService: /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047Flags: read[tuya_mdev_test:/service0047/char004a]# readAttempting to read /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a[CHG] Attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a Value:69 50 68 6f 6e 65 36 2c 32 iPhone6,269 50 68 6f 6e 65 36 2c 32 iPhone6,2当然写、使能notify也很简单,看help即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Dbus移植步骤
1.进入dbus的目录运行./configure --host=arm-linux
--prefix=/bluetooth/dbus
2.出现错误can not run test program while cross compiling
[mystic@moolenaar]$ . checking for getpeereid... no
checking abstract socket namespace... configure: error: cannot run test program while cross compiling
See `config.log' for more details.
执行./configure时要在宿主系统中运行一些测试程序,因为是交叉编译所以这个测试是一定通不过的。
不过没问题,我们可以在configure 时指定cache-file文件来屏障掉测试程序,在下面编译glib包时会遇到同样的问题。
处理方法:
在源码包根目录下执行
[mystic@moolenaar]$ echo ac_cv_have_abstract_sockets=yes >
arm-linux.cache
或者自己新建一个文件,vim arm-linux.cache
在里面输入:ac_cv_have_abstract_sockets=yes
[mystic@moolenaar]$ ./configure --host=arm-linux
--prefix=/bluetooth/dbus --cache-file=arm-linux.cache
参数解释:--prefix指定编译好的文件存放的路径,默认会放到/usr/bin
下
--host 指定编译器的类型,这里指定为arm-linux交叉编
译,默认是本机的gcc编译
--cache 指定测试的信息写的地方,这里是写到了
arm-linux.cache里面
一会会提示缺少xml库,下载libxlm2,解压后:
./configure –-prefix=/bluetooth/libxml –-host=arm-linux
make ->make install
编译完成后一定要检查libxml/lib下的库文件的格式是否是ARM的,否则不能用。
查看的方式是file libxml.so.2.6.so(库名),出现ARM 表示是交叉编译的,出现i686等信息表示是本机编译的。
2. 编译dbus,cannot find -lX11
[mystic@moolenaar]$ make
arm-linux/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status
make[2]: *** [dbus-launch] error 1
make[2]: Leaving directory `/3.3.2/dbus-1.0.2/tools'
make[1]: *** [all-recursive] error 1
make[1]: Leaving directory `/3.3.2/dbus-1.0.2'
make: *** [all] error 2
在开发板上不需要X Server. configure直接屏蔽掉。
[mystic@moolenaar]$ ./configure --host=arm-linux --prefix=/bluez/dbus --cache-file=arm-linux.cache --without-x
文件编译完之后,进入到--prefix指定的目录/Bluetooth/dbus的lib下,把里面的所有动态库都拷贝到linux的根目录/usr/lib下,记得用cp
的时候加上-av参数。
还有把lib/pkgconfig下的dbus-1.pc拷贝到
/usr/lib/pkgconfig。
拷贝这些文件是为了后面的bluez编译的需要。
Glib移植文档
1.进入glib的目录运行./configure --host=arm-linux
--prefix=/bluetooth/glib
2.出现错误can not run test program while cross compiling,处理方法和上面的dbus一样。
vim arm-linux.cache,里面输入如下内容:
ac_cv_type_long_long=yes
glib_cv_stack_grows=no
glib_cv_uscore=no
ac_cv_func_posix_getpwuid_r=yes
ac_cv_func_posix_getgrgid_r=yes
3. 运行./configure --prefix=/bluetooth/glib --host=arm-linux
--cache-file=arm-linux.cache
Bluez编译步骤
1.以上的文件都编译好之后开始编译bluez ,运行./configure
--prefix=/bluetooth/bluez –-host=arm-linux
2 make ->make install
3 进入编译生成的目录/bluetooth/bluez,把目录bin和sbin下的内容拷贝到制作文件系统根目录下对应的目录,我的是cp
/bluetooth/bluez/bin/*
/home/hbuser/tools/busybox-1.14.1/_install/bin和
cp /Bluetooth/bluez/sbin/*
/home/hbuser/tools/busybox-1.14.1/_install/sbin/ 接着拷贝bluez里的命令所要使用的动态库。
Cp –av
/Bluetooth/bluez/lib/lib* /home/hbuser/tools/_install/lib 下。
4 把busybox-1.14.1/_install下的目录当成nfs系统的根目录,启动开发板,这里还需要配置内核保证对蓝牙设备的支持。
5 对内核进行配置:
Usb Bluetooth 设备的驱动程序选上(编译内核时)
蓝牙设备驱动,包括相关的USB驱动,在内核中已经集成,所以不需要编写,只需要进行相关配置即可。
具体步骤如下:
运行make menuconfig
进行如下配置。
Networking ---><*> Bluetooth subsystem support --->
--- Bluetooth subsystem support
<M> L2CAP protocol support
<M> SCO links support
<M> RFCOMM protocol support
[*] RFCOMM TTY support
<M> BNEP protocol support
[*] Multicast filter support
[*] Protocol filter support
<M> HIDP protocol support
Bluetooth device drivers --->
<*> HCI USB driver
<*> HCI SDIO driver
<M> HCI UART driver
[*] UART (H4) protocol support
[*] BCSP protocol support
[*] HCILL protocol support
<M> HCI BCM203x USB driver
<M> HCI BPA10x USB driver
<M> HCI BlueFRITZ! USB driver
<M> HCI VHCI (Virtual HCI device) driver
<>Marvel Bluetooth driver support
<>Atheros firmware download driver(NEW)
USB的选项为默认即可。
选好之后编译内核make zImage,然后把内核烧写到开发板上。
6 把蓝牙设备插到开发板上。
会显示如下表示识别设备成功。
7 识别后,使用如下命令:
Hciconfig hci0 up启动hci0(蓝牙设备)
Hciconfig hcio piscan(选择工作模式)
Hcitool scan 搜索对方
搜索到对方的设备后,就运行自己的程序。
所有的准备工作完成。
相关的网站:
/index.php?aid=53
/u2/88891/showart_174339 7.html。