當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]基于BlueZ協(xié)議棧的嵌入式系統(tǒng)無線通信實現(xiàn)

1、引言
隨著科學技術(shù)發(fā)展和社會進步,嵌入式系統(tǒng)越來越多的應用到我們的實際生活中,極大的改變著我們的生活。開發(fā)低成本、高性能、高可靠性的嵌入式產(chǎn)品正在成為研究的熱點。尤其是隨著信息化網(wǎng)絡化的發(fā)展,越來越需要與外部世界進行信息交換,當前主流的數(shù)據(jù)交換方式都是有線的,但有線通信存在著諸多不足,而無線通信以其無法比擬的靈活性,可移動性和極強的可擴容性正得到越來越廣泛的應用。藍牙技術(shù)作為全球統(tǒng)一的無線通信標準,其目的在于建立通用的低功耗、低成本無線電空中接口及其控制軟件的公開標準,使通信和計算機進一步結(jié)合,使不同廠家生產(chǎn)的便攜式設備在沒有電線或電纜互相連接的情況下,能在近距離范圍內(nèi)具有互用、互操作的性能。而藍牙技術(shù)在多種智能設備無線互連,多媒體終端通信和家庭網(wǎng)絡等方面的應用也越來越廣泛,本文在對藍牙的官方協(xié)議棧 BlueZ進行深入研究的基礎上,在實驗開發(fā)平臺上實現(xiàn)了協(xié)議棧的移植和文件的傳輸功能。
2、BlueZ 的體系結(jié)構(gòu)
BlueZ由主機控制接口(Host Control Interface,HCI)、Bluetooth協(xié)議核心、邏輯鏈路控制和適配協(xié)議(Logical Link Control and Adaptation Protocol,L2CAP)、SCO音頻層、其它 Bluetooth服務、用戶空間后臺進程以及配置工具組成。它的完整結(jié)構(gòu)如圖 3.3所示(其中除應用程序和硬件外為 BlueZ提供的部分)。
500)this.style.width=500;" border="0" />


3、BlueZ協(xié)議的移植 [2]
本文涉及到的硬件平臺是三星公司的S3C2410a 開發(fā)板,軟件平臺是內(nèi)核版本為 2.4.20的Linux操作系統(tǒng), 為實現(xiàn)藍牙協(xié)議棧BlueZ的移植, 可進行以下步驟進行移植:[!--empirenews.page--]
(1) 生成交叉編譯器,創(chuàng)建交叉編譯環(huán)境
(2) 編譯、配置實驗開發(fā)平臺上的 Linux內(nèi)核
(3) 安裝 BlueZ 軟件包
(4) 編譯實驗開發(fā)平臺上的Linux內(nèi)核
(5) 向s3c2410a實驗平臺移植 通過上述步驟完成了藍牙協(xié)議棧 BlueZ的移植后,一個嵌入式藍牙應用開發(fā)平臺就搭建

 4、文件傳輸功能的實現(xiàn)
如上步驟成功移植藍牙協(xié)議棧BlueZ后,一個完整的嵌入式藍牙應用開發(fā)平臺就已經(jīng)搭建好了,本文將利用BlueZ提供的API函數(shù)在RFCOMM層上實現(xiàn)藍牙文件傳輸?shù)墓δ?,所采用的協(xié)議路徑為:射頻(RF)—基帶與鏈路控制(BB&LC)—主機控制接口(HCI)—邏輯鏈路與適配協(xié)議(L2CAP)—串口仿真(RFCOMM)—對象交換協(xié)議(OBEX)。它的實現(xiàn)分為客戶端程序和服務器端程序,流程圖如圖2所示。
500)this.style.width=500;" border="0" />

2反映了通過藍牙實現(xiàn)文件從客戶端傳輸一個文件到服務器的過程,其中用到的協(xié)議棧中的API函數(shù)以及針對藍牙通信的設置如下 : (1)int socket(int domain, int type,int protocol) 通過這個函數(shù)建立一個套接字,其中參數(shù) domain說明網(wǎng)絡程序所用的通訊協(xié)議族,本實驗中我們用的是藍牙官方協(xié)議棧BlueZ,所以我們的 domain取值AF_BLUETOOTH,type
我們采用可靠的面向連接的 SOCK_STREAM,protocol我們采用的代表串口仿真的 BTPROTO_RFCOMM。
(2) int bind(int sockfd, struct sockaddr *my_addr, int addrlen)
這個函數(shù)是服務器端的函數(shù),實現(xiàn)的是綁定端口功能。在我們的實驗中,參數(shù) my_addr代表的我們用的是一個結(jié)構(gòu)體,表示本地地址信息,它的 rc_family我們?nèi)?AF_BLUETOOTH,它的rc_bdaddr我們?nèi)】梢院腿我庵鳈C通信的 INADDR_ANY。

(3) int listen(int sockfd,int backlog)
這個函數(shù)是服務器端的函數(shù),實現(xiàn)監(jiān)聽端口功能,它和我們普通Linux下的使用方法完全一樣。

(4) int accept(int sockfd, struct sockaddr *addr,int *addrlen)
這個函數(shù)是服務器端的函數(shù),完成接受客戶端的鏈接請求,并建立與客戶端的鏈接的功能。 [!--empirenews.page--]

(5) int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)
這個函數(shù)是客戶端的函數(shù),完成向服務器端申請建立鏈接,與上面的綁定端口類似,參數(shù)my_addr代表的我們用的是一個結(jié)構(gòu)體,表示要申請鏈接的服務器地址信息,它的 rc_family我們?nèi)锳F_BLUETOOTH,它的rc_bdaddr我們?nèi)】梢院腿我庵鳈C通信的 INADDR_ANY。
 (6) ssize_t write(int fd,const void *buf,size_t nbytes) ssize_t read(int fd,void *buf,size_t nbyte)
這兩個函數(shù)完成文件讀寫的功能,也完成服務器端和客戶端通信功能。在完成服務器端與客戶端通信功能時,把前面建立的通道看成是文件描述符,只要往文件描述符里面讀寫信息就可以了,與向文件讀寫過程一樣。
以上是實現(xiàn)中用到的協(xié)議棧 BlueZ的主要庫函數(shù),它的客戶端核心代碼如下:
if((from_fd=open(argv[2],O_RDONLY))==-1) 

while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)) 
{  /* 一個致命的錯誤發(fā)生了 */  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); }
}
它的服務器端核心代碼如下: /*創(chuàng)建目標文件 */  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))  { /*一個致命錯誤發(fā)生了 */
    if((bytes_write==-1)&&(errno!=EINTR))break;/* 寫完了所有讀的字節(jié) */    else if(bytes_write==bytes_read) break; /*只寫了一部分 ,繼續(xù)寫 */     else if(bytes_write>0) { ptr+=bytes_write;
     bytes_read-=bytes_write;
 } }   /*寫的時候發(fā)生的致命錯誤 */ if(bytes_write==-1)break; /*這里讀完后必須把 buffer清空*/    memset(buf,0,sizeof(buf));
} else{  exit(1);  }
}
5、結(jié)束語
在目前,對于藍牙協(xié)議棧的移植已經(jīng)有非常深入的研究,但對基于藍牙協(xié)議棧 BlueZ的源代碼級的研究還不多。本文在 ARM9+Linux環(huán)境下構(gòu)建了的藍牙工作環(huán)境, 通過官方的藍牙協(xié)議棧 BlueZ提供的庫函數(shù)編程實現(xiàn)了藍牙的文件傳輸功能。利用嵌入式系統(tǒng)和無線傳輸實現(xiàn)文件傳輸,符合數(shù)字化、網(wǎng)絡化的發(fā)展趨勢。本文作者創(chuàng)新點 :在源代碼級別上借助藍牙協(xié)議棧 BlueZ實現(xiàn)了文件的傳輸功能。

 參考文獻:
[1]卜奎昊,基于 SAMSUNG S3C2410的嵌入式系統(tǒng)無線通信研究,安徽大學碩士畢業(yè)論文 2008
[2] 歐陽鑫,于紅巖,呂楊,藍牙協(xié)議棧 BlueZ的移植與開發(fā). 微計算機信息,200 7
[3] 梁軍學,郁濱 . Linux 藍牙協(xié)議棧的 USB 設備驅(qū)動. 計算機工程, 2008
[4] 金純,許光辰,孫睿 .藍牙技術(shù).〔M〕北京:電子工業(yè)出版社,2001
[5] www.bluez.org

好了,下面利用該平臺提供的藍牙函數(shù)庫,來進行文件傳輸功能的開發(fā)。
本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術(shù)
關閉
關閉