嵌入式藍牙網(wǎng)關中藍牙驅(qū)動層研究與實現(xiàn)
關鍵字:嵌入式;藍牙網(wǎng)關;tty設備;虛擬串口
Abstract: At present,the bluetooth technology is one of main ways which resolve the intelligent terminals interconnect and visit Internet expediently under the family and the work environment.Therefore ,we developed the Embedded Bluetooth Gateway ,and launched the discussion to key technologies .Firstly, the hardware composition structure and the software system construction of the Embedded Bluetooth Gateway are presented . Then, proposed an improvement program which based on the TTY(Teletype)driver model. Finally, test system of Embedded Bluetooth Gatway confirmed the bluetooth driver architecture which designed based on the TTY driver model is effective.
Key words:Embedded;Bluetooth Gateway;tty Device;Virtual Serial Port
0.引言
隨著智能終端設備的不斷增多,用來連接各種筆記本、PDA、臺式電腦等設備的電纜布線會越來越復雜,它不僅影響了美觀性,還增加了安裝、維護的費用和難度,藍牙技術是解決上述問題的有效途徑之一[1],家庭或辦公室中的筆記本、PC機等只要安裝上藍牙適配器就成為具有了藍牙連接功能的數(shù)據(jù)終端(DT),彼此之間可以方便地實現(xiàn)互連互通。目前,具有藍牙功能的筆記本、PDA、手機等終端設備越來越多,而藍牙終端設備與互聯(lián)網(wǎng)之間的互連互通則成了制約其應用的一大瓶頸[2]。藍牙網(wǎng)關正是為這些藍牙終端設備(包括藍牙PDA、藍牙筆記本電腦、藍牙PC等)創(chuàng)建一個到本地網(wǎng)絡的無線連接通訊鏈路,使之能夠訪問本地網(wǎng)絡及Internet。目前,藍牙網(wǎng)關大多是基于PC機上的windows或linux平臺開發(fā)的,體積、成本、易用性等因素在一定程度上制約了藍牙網(wǎng)關的推廣[3]??紤]以上各因素,筆者研制了一種嵌入式藍牙網(wǎng)關,與基于PC的藍牙網(wǎng)關相比在成本、易用性、體積等方面都具有一定的優(yōu)勢。本文主要針對嵌入式藍牙網(wǎng)關中藍牙硬件模塊驅(qū)動層框架設計及具體實現(xiàn)給予詳細闡述,并提出一種管理藍牙虛擬串口設備的方案,在此基礎上實現(xiàn)了一個以MIPS內(nèi)核嵌入式微處理器Au1000為硬件平臺的嵌入式藍牙網(wǎng)關[4]。
1.嵌入式藍牙網(wǎng)關的硬件結(jié)構
藍牙是一種開放性的、短距離無線數(shù)據(jù)和語音通信的全球規(guī)范。藍牙規(guī)范的動機是通過合理地選擇鏈路的傳輸速度、通訊距離和傳輸功率來實現(xiàn)一種成本低、效率高、單芯片方式的通信收發(fā)設備,而嵌入式藍牙網(wǎng)關正是一種藍牙應用規(guī)范中LAP(局域網(wǎng)接入應用模型)的典型應用[5] [6]。
一般來說,嵌入式藍牙網(wǎng)關硬件主要由微處理器、內(nèi)嵌式藍牙硬件模塊及其他接口電路、存儲器件等組成??紤]到系統(tǒng)的性價比等諸多因素,在本文中,筆者采用AMD的MIPS內(nèi)核的嵌入式微處理器Au1000作為微處理器平臺,同時在處理器豐富資源的基礎上,還進行了相關的配置和擴展,平臺配置了Intel 16Mbyte的E28F128J3 FLASH芯片和Hynix 32Mbyte 的HY57V561620 SDRAM芯片。通過SMSC公司的LAN91C11 10/100M型以太網(wǎng)控制芯片擴展了一個網(wǎng)絡接口。藍牙模塊采用CSR BlueCore02芯片的增強型藍牙模塊,兼容藍牙1.2規(guī)范,最大發(fā)射距離達到100米,最大數(shù)據(jù)傳輸率可達到1.384Mbps,支持低功耗工作模式/高速工作模式,支持安全認證、數(shù)據(jù)加密,該模塊通過UART口與Au1000微處理器通信。
2.嵌入式藍牙網(wǎng)關的軟件體系架構
在嵌入式系統(tǒng)的開發(fā)過程中,嵌入式操作系統(tǒng)平臺的選擇是關鍵點之一。目前,常見的嵌入式操作系統(tǒng)有Vxworks、Win CE、pPOS、palm OS、Nucleus、QNX,嵌入式linux等,針對不同的應用需求,它們各有特點。在嵌入式藍牙網(wǎng)關的開發(fā)中,我們選用MIZI公司的嵌入式Linux操作系統(tǒng)來構建嵌入式藍牙網(wǎng)關的軟件平臺,其原因主要有三:一方面,它是一種開放源碼的操作系統(tǒng),并且MIZI-Linux已經(jīng)成為嵌入式領域很受歡迎的操作系統(tǒng)之一[7];另一方面,Linux下的軟件幾乎都遵循GPL版權協(xié)議,可以利用Linux操作系統(tǒng)上的mgetty+AutoPPP快速搭建嵌入式藍牙網(wǎng)關端的撥號服務器應用程序,從而不必自己開發(fā)撥號服務器應用程序;據(jù)此,筆者設計的嵌入式藍牙網(wǎng)關中的軟件體系架構如圖1所示。
圖1 嵌入式藍牙網(wǎng)關軟件的體系架構圖
本文主要是對該軟件體系架構中的藍牙驅(qū)動層框架及實現(xiàn)給予闡述,并提出一種管理藍牙虛擬串口設備的方案,在此基礎上實現(xiàn)了一個以Au1000為硬件平臺的嵌入式藍牙網(wǎng)關。
3.藍牙硬件模塊驅(qū)動層框架的設計與實現(xiàn)
在開發(fā)嵌入式藍牙網(wǎng)關過程中,為了縮短開發(fā)周期,減少開發(fā)成本,筆者利用了Linux下現(xiàn)有的撥號服務器程序來實現(xiàn)與藍牙設備的互連,為此,筆者實現(xiàn)了藍牙虛擬串口設備ttyBT。對于用戶使用來說,該虛擬串口和系統(tǒng)真實串口tty沒有任何區(qū)別。同時,為了更好地管理虛擬串口以及實現(xiàn)與藍牙協(xié)議模塊進行交互,筆者對于以往的tty驅(qū)動模型進行了改進,即在藍牙協(xié)議模塊和ttyBT設備之間設計了一個ttyBTmgr模塊。下面將詳細描述藍牙驅(qū)動硬件模塊的驅(qū)動層框架和驅(qū)動層框架中的各函數(shù)的實現(xiàn)過程。
3.1 藍牙硬件模塊驅(qū)動層框架
tty設備是一種字符設備, 在MIZI-Linux操作系統(tǒng)中,串行通信端口設備被實現(xiàn)為tty設備,即ttySx [8]。筆者在設計嵌入式藍牙網(wǎng)關時,將其中的藍牙硬件模塊設計成一種tty類型設備,即通過藍牙虛擬串口設備ttyBT實現(xiàn)與MIZI-Linux操作系統(tǒng)的互連。遵循tty設備驅(qū)動規(guī)范,藍牙虛擬串口設備ttyBT驅(qū)動層框架如圖2所示:
圖 2 藍牙硬件模塊驅(qū)動層框架
從圖2可以看出, ttyBT設備驅(qū)動程序由三部分構成,第一部分是tty核心,負責與嵌入式Linux操作系的接口,這對所有的tty設備都是一樣的;第二部分是ttyBT鏈路規(guī)程,它的作用是使用特殊的方法,把從用戶或硬件那里傳遞來的數(shù)據(jù)格式化,這種格式化通常使用一些協(xié)議來完成轉(zhuǎn)化,比如PPP協(xié)議或者藍牙協(xié)議;第三部分是ttyBT驅(qū)動程序,完成藍牙硬件模塊輸入/輸出隊列的讀寫操作。
整個ttyBT設備驅(qū)動程序的數(shù)據(jù)流向為:tty核心從用戶那里得到將要發(fā)往藍牙硬件模塊的數(shù)據(jù),然后把數(shù)據(jù)發(fā)送給ttyBT鏈路規(guī)程,該鏈路規(guī)程把數(shù)據(jù)在傳遞給ttyBT驅(qū)動程序;ttyBT驅(qū)動程序?qū)?shù)據(jù)進行格式化后,然后發(fā)送給藍牙硬件模塊;從藍牙硬件模塊那里接收到的數(shù)據(jù)將回溯至ttyBT驅(qū)動程序,然后流入ttyBT鏈路規(guī)程,接著是流入tty核心,最后,用戶從tty核心那里得到數(shù)據(jù)。此外,tty設備可以很方便地和PPP模塊鏈接起來,是因為能通過將tty設備的行為注冊為PPP來實現(xiàn)。這個特性對于快速構建嵌入式藍牙網(wǎng)關的應用程序來說是非常必要的。這也是筆者將這種設備實現(xiàn)為一種tty設備,即ttyBT的原因之一。
3.2藍牙硬件模塊驅(qū)動程序實現(xiàn)
如圖3所示,藍牙硬件模塊驅(qū)動層主要包括tty核心層、ttyBT鏈路規(guī)程層和ttyBT驅(qū)動程序?qū)訕嫵?,下面分別將其實現(xiàn)過程介紹如下。
(1)tty核心層 其負責與嵌入式Linux操作系的接口,實現(xiàn)的關鍵是如何定義一個tty_driver結(jié)構,該結(jié)構用來向tty核心注冊一個ttyBT驅(qū)動程序。藍牙驅(qū)動層框架中的tty核心層使用終端設備數(shù)據(jù)結(jié)構tty_struct保存ttyBT端口的狀態(tài),同時賦予鏈路規(guī)程識別并向串行接口發(fā)送和接收4種藍牙HCI數(shù)據(jù)包: HCI Command Packet,HCI Event Packet,HCI ACL Data Packet和HCI SCO Data Packet,同時完成向高層協(xié)議提供標準發(fā)送接收過程[9]。
(2)藍牙硬件模塊鏈路規(guī)程 鏈路規(guī)程對于TTY驅(qū)動程序來說是不透明的,驅(qū)動程序不能直接與鏈路規(guī)程通信,在Linux系統(tǒng)中使用終端鏈路規(guī)程把具體的終端設備和輸入/輸出隊列相關聯(lián),使得操作系統(tǒng)對所有的終端都視為標準的流操作[10]。
(3)ttyBT設備驅(qū)動函數(shù) 實現(xiàn)把藍牙硬件模塊接收到的字符遞送給ttyBT鏈路規(guī)程的輸入隊列和輸出隊列,發(fā)送到藍牙硬件的同時完成對輸入隊列和輸出隊列的監(jiān)測功能以及硬件中斷過程。
4.藍牙虛擬串口設備的管理
在實現(xiàn)藍牙驅(qū)動層框架的過程中,為了便于管理ttyBT設備驅(qū)動層中的虛擬串口設備并使之和ttyBT鏈路規(guī)程層中的藍牙協(xié)議模塊進行交互,筆者提出了一種基于tty驅(qū)動模型的改進方案,即ttyBT設備不是和藍牙協(xié)議模塊直接通信的,而是在藍牙協(xié)議模塊和ttyBT設備之間增加了一個ttyBTmgr的字符設備。這個字符設備在藍牙協(xié)議模塊啟動時,由協(xié)議模塊打開。ttyBTmgr和藍牙協(xié)議模塊、ttyBT設備的消息通信機制如圖3所示。
圖3 ttyBTmgr的消息通信機制
(1)ttyBT設備發(fā)送消息 當一個ttyBT設備被打開、關閉、寫數(shù)據(jù)等的時候,它要向藍牙協(xié)議模塊發(fā)送消息。在筆者的設計中,ttyBT設備不是和藍牙協(xié)議模塊直接通信的,而是通過ttyBTmgr設備和藍牙協(xié)議模塊通信的。在ttyBT設備的數(shù)據(jù)結(jié)構中,維護了一個消息鏈表,所有的ttyBT設備要向協(xié)議模塊發(fā)送的消息都要先插入到這個消息鏈表中 。
(2)ttyBT設備接收消息 當藍牙協(xié)議模塊給ttyBTmgr設備發(fā)送了消息,則ttyBTmgr設備需要將這些消息轉(zhuǎn)發(fā)給ttyBT設備。由于ttyBTmgr設備和ttyBT設備的驅(qū)動程序都是編譯成內(nèi)核模塊,運行在內(nèi)核空間,它們可以共享那些全局變量,這樣ttyBTmgr直接修改 ttyBT的全局變量就實現(xiàn)了消息的轉(zhuǎn)發(fā)。
(3)藍牙協(xié)議模塊發(fā)送消息 如果藍牙協(xié)議模塊要向虛擬串口設備發(fā)消息,它使用ioctl( )系統(tǒng)調(diào)用發(fā)送消息。這個ioctl命令是自定義的,其類型是W32IF_FROM_RFCOMM,在這里面有三種消息:DRV2UI_OPEN_RESULT_IND 指示串口設備打開結(jié)果
DRV2UI_SEND_DATA_COMPLETE 指示數(shù)據(jù)發(fā)送完畢
DRV2UI_REMOTE_DATA_IND 指示收到遠程數(shù)據(jù)
(4)藍牙協(xié)議模塊接收消息 在藍牙協(xié)議模塊中,專門有一個線程來接收來自驅(qū)動程序的消息。前面講過,這些消息不是直接來自ttyBT設備而是來自ttyBTmgr。協(xié)議模塊用select( )系統(tǒng)調(diào)用來等待消息,如果當前消息隊列里有消息,或一旦有消息被添加到消息隊列,則select( )系統(tǒng)調(diào)用會成功返回。然后協(xié)議模塊調(diào)用read( )系統(tǒng)調(diào)用將消息從ttyBTmgr設備中讀出,然后根據(jù)消息類型進行相應的處理。
5.測試實驗
為了驗證本文的藍牙驅(qū)動層框架是有效的,魯棒的,筆者搭建了嵌入式藍牙網(wǎng)關的測試系統(tǒng),由筆者研發(fā)出的嵌入式藍牙網(wǎng)關和藍牙數(shù)據(jù)終端組成。藍牙數(shù)據(jù)終端是由PC機、USB藍牙適配器、BlueSoleil組成的藍牙PC。依據(jù)本文提出的藍牙驅(qū)動層框架所編寫的嵌入式藍牙網(wǎng)關端的藍牙驅(qū)動程序,實現(xiàn)了藍牙硬件模塊和藍牙主機(Au1000硬件平臺)之間HCI傳送功能,使該嵌入式藍牙網(wǎng)關實現(xiàn)了局域網(wǎng)接入訪問服務。試驗結(jié)果表明,藍牙PC能成功連接到嵌入式藍牙網(wǎng)關,并能搜索到嵌入式藍牙網(wǎng)關提供的藍牙網(wǎng)絡接入服務,從而使藍牙PC能通過該嵌入式藍牙網(wǎng)關訪問Internet和局域網(wǎng)。
6.結(jié)束語
本文針對基于MIZI-linux操作系統(tǒng)的嵌入式藍牙網(wǎng)關中藍牙驅(qū)動層框架設計給予詳細闡述,并描述了驅(qū)動層框架的函數(shù)實現(xiàn)方法,同時,對以往tty驅(qū)動模型提出了相應的改進措施,達到了便于管理藍牙虛擬串口設備以及與藍牙協(xié)議模塊進行交互的目的。實驗證明,基于上述技術所研制的嵌入式藍牙網(wǎng)關是有效的,魯棒的。
7.參考文獻
[1] 李遠偉,姜雪輝等.應用藍牙技術組建家庭無線局域網(wǎng)[J].中國科技信息,2006-05:109.
[2] 馮慶勝,李紅等.基于藍牙技術組建無線家庭網(wǎng)絡[J].微計算機信息,2006-08:59.
[3] 袁宇恒,葉芝慧等.基于藍牙技術的家庭網(wǎng)絡控制子網(wǎng)設計與研制[J].東大學報,2006-01.
[4] NicolasRouhana,Eric Horlait.Bluetooth Web Internet Gateway[J]. Proceedings of Seventh International Symposium on Computers and Communications, July 2002:679-684.
[5] 馬建倉,羅亞軍等.藍牙核心技術及應用[M].北京:科學出版社,2003:99-103.
[6] David Johnson.Hardware and Software Implications of Creating Bluetooth Scatternet Devices[J].AFRICON Conference in Africa,Volume 1,2004:211- 215.
[7] 鄭靈翔.嵌入式系統(tǒng)設計與應用開發(fā)[M].北京:北京航空航天大學出版社,2006:78-82.
[8] Jonatban Corbet, Alessandro Rubini.Linux Device Drivers[M].南京:東南大學出版社,2005:538-566.
[9] David Kammert等著,李靜等譯.藍牙應用開發(fā)指南.北京:科學出版社,2003:130-159.
[10] Robert Love.Linux Kernel Development[M].2nd Edition.Novell Press,2005.
基金編號:江蘇省高校自然科學計劃項目 06KJD520037