linux 蓝牙模块,蓝牙模块在HHARM2410上的移植

news/2025/1/12 3:02:21/

最近两天在HHARM2410-R3上移植了 USB蓝牙设备和 BlueZ 蓝牙协议栈,呵呵,蓝牙果然是个很好的东西,协议栈内容很丰富,挂上去以后可以使用很多功能。我现在就可以用它来接收 GPS 数据以及和用手机上网。我是在做车载的,所以特别有用。积累了一些关于蓝牙的知识,但是算是初步的,把我的经验发上来,各位做过蓝牙的大哥请多指导。

一切版权归bluez的作者---同济大学高性能计算中心 Dennis

欢迎各位发邮件给我和我讨论 dennis.he.2005@gmail.com

先介绍一下硬件,我用的是电脑卖场里面随便买到的 USB 蓝牙适配器,价格在80元左右,应该是台产的,没有牌子,像一个小一点的U盘。买之前叫卖家在windows下测试一下,带一个带蓝牙的手机过去试试看,确认能用再买。

linux上的蓝牙协议栈有好几个,官方的蓝牙协议栈是Bluez,在www.bluez.org上能找到所有的说明文档和源代码。我先是在自己的pc上安装了bluez的协议栈,然后又把它移植到了华恒HHARM2410-R3上。

(一) 在Red hat 9上安装Bluez

在pc上的安装我参考了O'Reilly的Linux Unwired一书,chapter 7中详细地介绍了linux下的bluetooth的基础知识、安装、配置和使用。安装前必须了解一下bluez的基本结构,直接位于发射传输协议之上的 协议是HCI(host control interface),我的手机和蓝牙GPS用到的高层协议是服务发现协议SDP和模拟串口的协议RFCOMM,中间那一层协议是L2CAP,应该是处理 逻辑链路的吧,我并不是很清楚,请参考bluez的官方文档。

HHARM2410-R3上用到内核版本是2.4.18,于是我在pc上安装 bluez时也使用了2.4.18的内核。使用bluez必须要对内核打patch的,于是到www.kernel.org上下载了linux- 2.4.18.tar.bz2后到http://www.bluez.org/patches.html上下载针对2.4.18的 patch,patch-2.4.18-mh15.gz。于是,解压,打patch:

# tar xjvf linux-2.4.18.tar.bz2

# cd linux/

# gzip -dc ../patch-2.4.18-mh15.gz | patch -p1

注意一下这时的patch的输出,在源代码方面的patch是针对driver/、include/、net/目录下的代码的修改,并没有修改到内核部分的内容,应该没有修改到linux核心的东西,在移植到S3C2410时应该不会有太大的问题。

下面就是编译内核,在config的时候关于bluez我的配置是这样的:

#

# Bluetooth support

#

CONFIG_BLUEZ=m

CONFIG_BLUEZ_L2CAP=m

CONFIG_BLUEZ_SCO=m

CONFIG_BLUEZ_RFCOMM=m

CONFIG_BLUEZ_RFCOMM_TTY=y

CONFIG_BLUEZ_BNEP=m

CONFIG_BLUEZ_BNEP_MC_FILTER=y

CONFIG_BLUEZ_BNEP_PROTO_FILTER=y

#

# Bluetooth device drivers

#

CONFIG_BLUEZ_HCIUSB=m

# CONFIG_BLUEZ_HCIUSB_SCO is not set

CONFIG_BLUEZ_HCIUART=m

CONFIG_BLUEZ_HCIUART_H4=m

CONFIG_BLUEZ_HCIUART_BCSP=m

# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set

# CONFIG_BLUEZ_HCIBFUSB is not set

CONFIG_BLUEZ_HCIDTL1=m

CONFIG_BLUEZ_HCIBT3C=m

CONFIG_BLUEZ_HCIBLUECARD=m

CONFIG_BLUEZ_HCIBTUART=m

CONFIG_BLUEZ_HCIVHCI=m

供大家参考,Linux Unwired一书中有详细的说明,注意如果使用make menuconfig,一定要打开一下.config文件看看CONFIG_BLUEZ_RFCOMM_TTY=y,不能为n或者m。还有注意 CONFIG_USB_BLUETOOTH一定不能选(在USB support下),否则会影响到bluez的运行的。

内核编译好了就开始 准备bluez的库和工具了。到http://www.bluez.org/download.html上下载最新的bluez程序包,我只下载了 bluez-libs-2.20.tar.gz,bluez-utils-2.20.tar.gz,bluez-pin-0.25.tar.gz三个包, 分别是库,工具集和由bluez提供的一个 pin_helper。由于在pc下,安装的过程没什么好说的,解压,./configure,make,make install。

然后就 是注意一下默认配置目录/etc/bluetooth/下的hcid.conf配置文件,这是用来配置后台daemon进程hcid的。如果把这台pc机 器+蓝牙适配器看成是一个蓝牙设备的话,进程hcid就管理这个蓝牙设备的基本配置信息,例如名称,class,地址,feature等等。还有当设备与 其他蓝牙设备Bonding/Pairing即所谓的配对时,处理PIN code的程序也是hcid,而在hcid.conf脚本中比较重要的一项就是pin_helper,默认的配置是pin_helper=/usr /bin/bluepin,这个是python写的用来读取用户输入的PIN code的程序,安装bluez-pin包的时候装在/usr/bin下的。

这里有必要了解一下配对的过程,我感觉就是两个设备互相通密码建 立相互之间连接的过程。我看了hcid部分的代码,了解的大致是这样:比如两个蓝牙设备A和B,A先发送要求配对的请求给B,B由用户设置好配对的密码即 PIN code,然后回一个消息给A,说你想配对可以呀,知道我的密码吗?然后A就发送PIN code过去,B看和自己的密码相符合,就发送一个replyOK的消息给A,这样两者就建立起来了信任关系。

在pc+蓝牙适配器这个蓝牙设 备A上,如果这个设备先发送配对请求给另一个远程设备B,那么当B发送询问密码请求过来时,在A上运行的hcid后台进程就通过一个pin_helper 的程序读取PIN code,并发送回给B;如果远程设备B先发送配对请求给A,hcid上用作验证的PIN code就是/etc/bluetooth/pin的内容,如果读取失败程序在启动的时候会默认地设置一个密码的,代码在bluez-utils /hcid/security.c中的init_security_data函数中,默认的是BlueZ。为了和我的手机相配,我把它改成了123,手机 只能输入数字。

关于其他hcid.conf的设置,请man hcid.conf。

设置好以后,换上新内核,启动 linux。插入USB蓝牙适配器,# dmesg | tail会发现有usb.c: USB device 2 (vend/prod 0x1131/0x1001) is not claimed by any active driver.这个问题,不管它,只要有usb.c: registered new driver hci_usb的消息就可以,然后 # lsmod 会发现hci_usb的模块被安装了,再# modprobe rfcomm,这样基本上所有的模块都安装齐了。


http://www.ppmy.cn/news/637118.html

相关文章

GNSS/GPS现状,什么是GPS抗干扰器

背景 为了满足全球范围内对一致性、准确性日益增长的需求,当今所有同步应用都依赖于GPS和GNSS,尽管这种依赖一直具有一定脆弱性,但GPS和GNSS所带来的大规模成本降低和准确性也无法被取代。 GNSS的脆弱性是众所周知的,例如&#…

产品开发专用的GPS超小型模块

产品开发专用的GPS超小型模块 GPS卫星定位模块是开发GPS相关产品的必备器件,站长在开发GPS产品中也逐步熟悉这类器件。 产品1:全新SIRF第三代高灵敏度引线式GPS接收模块 产品清单如下:每套189元 1。引线式GPS模块一个 2。GPS磁性接收天…

STM32+果云GA6-GPRS/GSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位

一、环境介绍 MCU: STM32F103C8T6 GSM模块: GA6--果云 开发软件: Keil5 完整源码下载: https://download.csdn.net/download/xiaolong1126626497/18245590 其他参考文章: STM32ESP8266使用MQTT协议连接阿里云物联网服务器 其他参考文章:STM32ESP…

定位型与授时型GPS模块(BD/…

原文地址:定位型与授时型GPS模块(BD/GLONASS/GALILEO)的差异 作者:寰亚翔宇 尽管很多GPS/GLONASS/BD模块都宣称兼具定位授时功能,但是其中有些差异还是比较明显的。 最重要的两个是有无保持(定点授时)模式&…

GPRS/GPS模块组学习—硬件准备篇

在使用每一块芯片时候都应该优先考虑电源的问题,然后是控制指令。 -电:尤其是这种大功耗,长期工作的硬件模块,我们应该从电源,功耗,后续能源,价格考虑。然后才选择操作,控制的可行便…

51、基于51单片机的GPS定位系统(GSM短信)

毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、程序 六、资料包括 摘要 1978年2月22日第一颗GPS试验卫星的入轨运行,开创了以导航卫星为动态已知点的无线电导航定位的…

GPS北斗定位模块如何购买到好用的

内卷,在我国似乎体现在了每一行业,哪怕只是小小的GPS北斗定位模块,产品类型都有上百上千种,哪怕是同一个厂家生产的也有N多不同型号,如何选购就能了个问题。 要想选择性价比和价格都满足的定位模块,需要从…

【物联网】23.物联网开发之感测系统 - GPS(GNSS)

“定位”就是测定位置。“卫星定位系统”这个词听上去给人感觉很生硬也很复杂,换成GPS(Global Positioning System,全球卫星定位系统)这个说法,想必大家就不陌生了。GPS 传感器在车载导航系统和智能手机上也有所应用&a…