当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于BlueZ协议栈的嵌入式系统无线通信实现

1、引言
随着科学技术发展和社会进步,嵌入式系统越来越多的应用到我们的实际生活中,极大的改变着我们的生活。开发低成本、高性能、高可靠性的嵌入式产品正在成为研究的热点。尤其是随着信息化网络化的发展,越来越需要与外部世界进行信息交换,当前主流的数据交换方式都是有线的,但有线通信存在着诸多不足,而无线通信以其无法比拟的灵活性,可移动性和极强的可扩容性正得到越来越广泛的应用。蓝牙技术作为全球统一的无线通信标准,其目的在于建立通用的低功耗、低成本无线电空中接口及其控制软件的公开标准,使通信和计算机进一步结合,使不同厂家生产的便携式设备在没有电线或电缆互相连接的情况下,能在近距离范围内具有互用、互操作的性能。而蓝牙技术在多种智能设备无线互连,多媒体终端通信和家庭网络等方面的应用也越来越广泛,本文在对蓝牙的官方协议栈 BlueZ进行深入研究的基础上,在实验开发平台上实现了协议栈的移植和文件的传输功能。
2、BlueZ 的体系结构
BlueZ由主机控制接口(Host Control Interface,HCI)、Bluetooth协议核心、逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol,L2CAP)、SCO音频层、其它 Bluetooth服务、用户空间后台进程以及配置工具组成。它的完整结构如图 3.3所示(其中除应用程序和硬件外为 BlueZ提供的部分)。
500)this.style.width=500;" border="0" />


3、BlueZ协议的移植 [2]
本文涉及到的硬件平台是三星公司的S3C2410a 开发板,软件平台是内核版本为 2.4.20的Linux操作系统, 为实现蓝牙协议栈BlueZ的移植, 可进行以下步骤进行移植:[!--empirenews.page--]
(1) 生成交叉编译器,创建交叉编译环境
(2) 编译、配置实验开发平台上的 Linux内核
(3) 安装 BlueZ 软件包
(4) 编译实验开发平台上的Linux内核
(5) 向s3c2410a实验平台移植 通过上述步骤完成了蓝牙协议栈 BlueZ的移植后,一个嵌入式蓝牙应用开发平台就搭建

 4、文件传输功能的实现
如上步骤成功移植蓝牙协议栈BlueZ后,一个完整的嵌入式蓝牙应用开发平台就已经搭建好了,本文将利用BlueZ提供的API函数在RFCOMM层上实现蓝牙文件传输的功能,所采用的协议路径为:射频(RF)—基带与链路控制(BB&LC)—主机控制接口(HCI)—逻辑链路与适配协议(L2CAP)—串口仿真(RFCOMM)—对象交换协议(OBEX)。它的实现分为客户端程序和服务器端程序,流程图如图2所示。
500)this.style.width=500;" border="0" />

2反映了通过蓝牙实现文件从客户端传输一个文件到服务器的过程,其中用到的协议栈中的API函数以及针对蓝牙通信的设置如下 : (1)int socket(int domain, int type,int protocol) 通过这个函数建立一个套接字,其中参数 domain说明网络程序所用的通讯协议族,本实验中我们用的是蓝牙官方协议栈BlueZ,所以我们的 domain取值AF_BLUETOOTH,type
我们采用可靠的面向连接的 SOCK_STREAM,protocol我们采用的代表串口仿真的 BTPROTO_RFCOMM。
(2) int bind(int sockfd, struct sockaddr *my_addr, int addrlen)
这个函数是服务器端的函数,实现的是绑定端口功能。在我们的实验中,参数 my_addr代表的我们用的是一个结构体,表示本地地址信息,它的 rc_family我们取为 AF_BLUETOOTH,它的rc_bdaddr我们取可以和任意主机通信的 INADDR_ANY。

(3) int listen(int sockfd,int backlog)
这个函数是服务器端的函数,实现监听端口功能,它和我们普通Linux下的使用方法完全一样。

(4) int accept(int sockfd, struct sockaddr *addr,int *addrlen)
这个函数是服务器端的函数,完成接受客户端的链接请求,并建立与客户端的链接的功能。 [!--empirenews.page--]

(5) int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)
这个函数是客户端的函数,完成向服务器端申请建立链接,与上面的绑定端口类似,参数my_addr代表的我们用的是一个结构体,表示要申请链接的服务器地址信息,它的 rc_family我们取为AF_BLUETOOTH,它的rc_bdaddr我们取可以和任意主机通信的 INADDR_ANY。
 (6) ssize_t write(int fd,const void *buf,size_t nbytes) ssize_t read(int fd,void *buf,size_t nbyte)
这两个函数完成文件读写的功能,也完成服务器端和客户端通信功能。在完成服务器端与客户端通信功能时,把前面建立的通道看成是文件描述符,只要往文件描述符里面读写信息就可以了,与向文件读写过程一样。
以上是实现中用到的协议栈 BlueZ的主要库函数,它的客户端核心代码如下:
if((from_fd=open(argv[2],O_RDONLY))==-1) 

while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)) 
{  /* 一个致命的错误发生了 */  if((bytes_read==-1)&&(errno!=EINTR)) break;   else if(bytes_read>0) { ptr=buffer;
   status=write(s,ptr,strlen(ptr));    memset(buffer,0,BUFFER_SIZE); }
}
它的服务器端核心代码如下: /*创建目标文件 */  memset(buf,0,BUFFER_SIZE); while(1) { bytes_read = read(client,buf,sizeof(buf));
  if(bytes_read>0)
{  ptr=buf; while(bytes_write=write(to_fd,ptr,bytes_read))  { /*一个致命错误发生了 */
    if((bytes_write==-1)&&(errno!=EINTR))break;/* 写完了所有读的字节 */    else if(bytes_write==bytes_read) break; /*只写了一部分 ,继续写 */     else if(bytes_write>0) { ptr+=bytes_write;
     bytes_read-=bytes_write;
 } }   /*写的时候发生的致命错误 */ if(bytes_write==-1)break; /*这里读完后必须把 buffer清空*/    memset(buf,0,sizeof(buf));
} else{  exit(1);  }
}
5、结束语
在目前,对于蓝牙协议栈的移植已经有非常深入的研究,但对基于蓝牙协议栈 BlueZ的源代码级的研究还不多。本文在 ARM9+Linux环境下构建了的蓝牙工作环境, 通过官方的蓝牙协议栈 BlueZ提供的库函数编程实现了蓝牙的文件传输功能。利用嵌入式系统和无线传输实现文件传输,符合数字化、网络化的发展趋势。本文作者创新点 :在源代码级别上借助蓝牙协议栈 BlueZ实现了文件的传输功能。

 参考文献:
[1]卜奎昊,基于 SAMSUNG S3C2410的嵌入式系统无线通信研究,安徽大学硕士毕业论文 2008
[2] 欧阳鑫,于红岩,吕杨,蓝牙协议栈 BlueZ的移植与开发. 微计算机信息,200 7
[3] 梁军学,郁滨 . Linux 蓝牙协议栈的 USB 设备驱动. 计算机工程, 2008
[4] 金纯,许光辰,孙睿 .蓝牙技术.〔M〕北京:电子工业出版社,2001
[5] www.bluez.org

好了,下面利用该平台提供的蓝牙函数库,来进行文件传输功能的开发。
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

美国纽约州阿蒙克2022年10月20日 /美通社/ -- IBM(NYSE: IBM)发布 2022 年第三季度业绩报告。 IBM 董事长兼首席执行官 Arvind Kri...

关键字: IBM 软件 BSP 云平台

成都2022年10月19日 /美通社/ -- 近期,平安养老险积极筹备个人养老金的产品设计和系统开发工作,发展多样化的养老金融产品,推动商业养老保险、个人养老金、专属商业养老保险等产品供给。 搭养老政策东风 ...

关键字: 温度 BSP 东风 大众

广东佛山2022年10月19日 /美通社/ -- 空间是人居生活的基础单元,承载着生存与活动的最基本功能。而对于理想空间的解构意义却在物理性容器之外,体现出人们对于空间和生活深层关系的思考,同时也塑造着人与空间的新型连接...

关键字: 温度 BSP 智能化 进程

上海2022年10月19日 /美通社/ -- 10月17日晚间,安集科技披露业绩预告。今年前三季度,公司预计实现营业收入7.54亿元至8.33亿元,同比增长60.24%至77.03%;归母净利润预计为1.73亿...

关键字: 电子 安集科技 BSP EPS

北京2022年10月19日 /美通社/ -- 10月18日,北京市经济和信息化局发布2022年度第一批北京市市级企业技术中心创建名单的通知,诺诚健华正式获得"北京市企业技术中心"认定。 北京市企业技...

关键字: BSP ARMA COM 代码

北京2022年10月18日 /美通社/ -- 10月14日,国际数据公司(IDC)发布《2022Q2中国软件定义存储及超融合市场研究报告》,报告显示:2022年上半年浪潮超融合销售额同比增长59.4%,近5倍于...

关键字: IDC BSP 数字化 数据中心

上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都银行集团成立60周年的纪念日。趁着首都银行集团成立60周年与首都银行(中国)在华深耕经营12年的“大日子”,围绕作为外资金融机构对在华战略的构想和业...

关键字: 数字化 BSP 供应链 控制

东京2022年10月18日  /美通社/ -- NIPPON EXPRESS HOLDINGS株式会社(NIPPON EXPRESS HOLDINGS, INC.)旗下集团公司上海通运国际物流有限公司(Nipp...

关键字: 温控 精密仪器 半导体制造 BSP

广州2022年10月18日 /美通社/ -- 10月15日,第 132 届中国进出口商品交易会("广交会")于"云端"开幕。本届广交会上高新技术企业云集,展出的智能产品超过140,...

关键字: 中国智造 BSP 手机 CAN

Lua RTOS 是一个实时操作系统,设计在嵌入式系统上运行,对 FLASH 和 RAM 内存的要求最低。目前 Lua RTOS 可用于 ESP32, ESP8266 和 PIC32MZ 平台,并可以轻松移植到其他32位...

关键字: Lua RTOS 操作系统 嵌入式系统

嵌入式教程

6897 篇文章

关注

发布文章

编辑精选

技术子站

关闭