在S3C2410上移植bluetooth(蓝牙)
发布时间:2021-06-07
发布时间:2021-06-07
在S3C2410上移植bluetooth(蓝牙)
最近两天在HHARM2410-R3上移植了USB蓝牙设备和BlueZ 蓝牙协议栈,呵呵,蓝牙果然是个很好的东西,协议栈内容很丰富,挂上去以后可以使用很多功能。我现在就可以用它来接收GPS数据以及和用手机上网。我是在做车载的,所以特别有用。积累了一些关于蓝牙的知识,但是算是初步的,把我的经验发上来,各位做过蓝牙的大哥请多指导。
先介绍一下硬件,我用的是电脑卖场里面随便买到的USB蓝牙适配器,价格在80元左右,应该是台产的,没有牌子,像一个小一点的U盘。买之前叫卖家在windows下测试一下,带一个带蓝牙的手机过去试试看,确认能用再买。
linux上的蓝牙协议栈有好几个,官方的蓝牙协议栈是Bluez,在上能找到所有的说明文档和源代码。我先是在自己的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的,于是到上下载了linux- 2.4.18.tar.bz2后到/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