Linux無線網(wǎng)絡(luò)技術(shù):Bluetooth

相關(guān)專題: 無線 芯片
Sreekrishnan Venkateswaran




  Linux Bluetooth



  Bluetooth 是用于替換電纜的短程無線技術(shù),支持 723 kbps(不對(duì)稱)和 432 kbps(對(duì)稱)的速度,可以傳輸數(shù)據(jù)和語音。Bluetooth 設(shè)備的傳輸范圍大約 10 米(30 英尺)。



  BlueZ 是官方 Linux Bluetooth 棧,由主機(jī)控制接口(Host Control Interface ,HCI)層、Bluetooth 協(xié)議核心、邏輯鏈路控制和適配協(xié)議(Logical Link Control and Adaptation Protocol,L2CAP)、SCO 音頻層、其他 Bluetooth 服務(wù)、用戶空間后臺(tái)進(jìn)程以及配置工具組成。



  Bluetooth 規(guī)范支持針對(duì) Bluetooth HCI 數(shù)據(jù)分組的 UART(通用異步接收器/傳送器)和 USB 傳輸機(jī)制。BlueZ 棧對(duì)這兩個(gè)傳輸機(jī)制(drivers/Bluetooth/)都支持。BlueZ BNEP(Bluetooth 網(wǎng)絡(luò)封裝協(xié)議)實(shí)現(xiàn)了 Bluetooth 上的以太網(wǎng)仿真,這使 TCP/IP 可以直接運(yùn)行于 Bluetooth 之上。BNEP 模塊(net/bluetooth/bnep/)和用戶模式 pand 后臺(tái)進(jìn)程實(shí)現(xiàn)了 Bluetooth 個(gè)人區(qū)域網(wǎng)(PAN)。BNEP 使用 register_netdev 將自己作為以太網(wǎng)設(shè)備注冊(cè)到 Linux 網(wǎng)絡(luò)層,并使用上面為 WLAN 驅(qū)動(dòng)程序描述的 netif_rx 來填充 sk_buffs 并將其發(fā)送到協(xié)議棧。BlueZ RFCOMM(net/bluetooth/rfcomm/) 提供 Bluetooth 上的串行仿真,這使得串行端口應(yīng)用程序(如 minicom)和協(xié)議(如點(diǎn)對(duì)點(diǎn)協(xié)議(PPP))不加更改地在 Bluetooth 上運(yùn)行。RFCOMM 模塊和用戶模式 dund 后臺(tái)進(jìn)程實(shí)現(xiàn)了 Bluetooth 撥號(hào)網(wǎng)絡(luò)。下面的列表給出了配置 Bluetooth 上的各種協(xié)議服務(wù)所必需的 BlueZ 模塊、實(shí)用程序、后臺(tái)進(jìn)程以及配置文件。



  下一步,考慮 Bluetooth CF 卡、Bluetooth USB 適配器、具有內(nèi)置 CSR Bluetooth 芯片組的設(shè)備以及 Sony Bluetooth 耳機(jī)的示例,了解它們?cè)?Linux 下是如何工作的。



  Sharp Bluetooth CF 卡



  Sharp Bluetooth CF 卡使用 UART 傳輸器來傳送 HCI 數(shù)據(jù)分組。除了 serial_cs 是與 Linux PCMCIA 核心交互的卡服務(wù)驅(qū)動(dòng)程序之外,Linux PCMCIA/CF 層與 Sharp 卡的其他操作系統(tǒng)的交互類似于針對(duì) Intersil WLAN CF 卡所解釋的交互。serial_cs 驅(qū)動(dòng)程序(將在下面的 “GSM 上的 Linux GPRS 和數(shù)據(jù)”一節(jié)中做進(jìn)一步解釋)模擬了 Sharp CF 卡上的串行端口。BlueZ hci_uart 鏈接驅(qū)動(dòng)程序與 Bluetooth UART 通道交互并將模擬的串行端口連接到 BlueZ 棧。



  下面的列表給出了當(dāng)卡插入時(shí)必須加載的模塊。其他的 Bluetooth CF 卡,例如 Pretec CompactBT 卡和 Socket Bluetooth 卡,具有 UART 接口,但是又有各自的卡服務(wù)驅(qū)動(dòng)程序(分別是 drivers/bluetooth/dtl1_cs.c 和 drivers/bluetooth/btuart_cs.c)。在本文后面,您將發(fā)現(xiàn)更多關(guān)于 Bluetooth UART 傳輸器的信息。



  /etc/pcmcia/config 中針對(duì) Sharp Bluetooth CF 卡的條目:


  card "SHARP Bluetooth Card"


  version "SHARP", "Bluetooth Card"


  bind "serial_cs"



  將要加載的必需的內(nèi)核模塊:



  insmod serial_cs



  insmod bluez



  insmod l2cap



  insmod hci_uart



  insmod bnep (for pand)



  insmod rfcomm (for dund)



  BlueZ 用戶空間后臺(tái)進(jìn)程、實(shí)用程序以及配置文件:



  hciattach ttySx any [baud_rate] [flow]



  hciconfig -a:檢查 HCI 接口。



  hcitool -a hci0 scan 'flush:發(fā)現(xiàn)其他設(shè)備。



  hcidump:HCI 嗅探器。



  hcid:HCI 后臺(tái)進(jìn)程。



  /etc/bluetooth/hcid.conf:hcid 所用的 HCI 后臺(tái)進(jìn)程配置文件,它指定了鏈接模式(主或從)、鏈接策略、詢問和掃描模式,等等。



  /etc/bluetooth/pinDB:BlueZ PIN 數(shù)據(jù)庫。



  hcidump:Service Discovery Protocol 后臺(tái)進(jìn)程。



  pand:在 Bluetooth 上運(yùn)行 TCP/IP(--listen 用于服務(wù)器,--connect 用于客戶機(jī))。



  /etc/bluetooth/pan/dev-up:pand 在激活 TCP/IP 時(shí)調(diào)用此腳本。此腳本能夠包含一個(gè)類似于 ifconfig bnep0 的命令,用以為 Bluetooth 接口配置 IP 地址。



  hcidump:在 Bluetooth RFCOMM 上運(yùn)行 PPP(--listen 用于服務(wù)器,--connect 用于客戶機(jī))。



  Belkin Bluetooth USB 適配器



  Belkin Bluetooth USB 適配器擁有一個(gè) Bluetooth CSR 芯片組,并使用 USB 傳輸器來傳輸 HCI 數(shù)據(jù)分組。因此,Linux USB 層、BlueZ USB 傳輸器驅(qū)動(dòng)程序以及 BlueZ 協(xié)議棧是使設(shè)備工作的主要內(nèi)核層,F(xiàn)在,您將了解到三層之間如何交互以使 Linux 網(wǎng)絡(luò)應(yīng)用程序在這個(gè)設(shè)備上運(yùn)行。



  Linux USB 子系統(tǒng)類似于 PCMCIA 子系統(tǒng),它們都有與移動(dòng)設(shè)備交互的主機(jī)控制器設(shè)備驅(qū)動(dòng)程序,并且都包含一個(gè)向主機(jī)控制器和單個(gè)設(shè)備的設(shè)備驅(qū)動(dòng)程序提供服務(wù)的核心層。USB 主機(jī)控制器遵循兩個(gè)標(biāo)準(zhǔn)之一:UHCI(通用主機(jī)控制器接口)或 OHCI(開放式主機(jī)控制器接口)。由于具有 PCMCIA,單個(gè) USB 設(shè)備的 Linux 設(shè)備驅(qū)動(dòng)程序不依賴于主機(jī)控制器。經(jīng)由 USB 設(shè)備傳輸?shù)臄?shù)據(jù)分為四種類型(或管道):



  Control



  Interrupt



  Bulk



  Isochronous



  前兩個(gè)通常用于小型消息而后兩個(gè)則用于較大型的消息。



  USB 設(shè)備插入時(shí),主機(jī)控制器使用控制管道來枚舉它并給它分配設(shè)備地址(1 到 127)。主機(jī)控制器設(shè)備驅(qū)動(dòng)程序讀取的設(shè)備描述符包含關(guān)于設(shè)備的信息,例如 class、subclass 和 protocol。Linux 的 usbcore 內(nèi)核模塊支持 USB 主機(jī)控制器和 USB 設(shè)備。并包含 USB 設(shè)備驅(qū)動(dòng)程序可以使用的函數(shù)和數(shù)據(jù)結(jié)構(gòu)。USB 驅(qū)動(dòng)程序利用 usbcore 及自己的 class/subclass/protocol 信息(請(qǐng)參閱 include/linux/usb.h 中的 struct usb_driver)注冊(cè)了兩個(gè)入口點(diǎn):probe 和 disconnect。當(dāng)相應(yīng)的 USB 設(shè)備被附加時(shí),usbcore 用枚舉期間從設(shè)備配置描述符中讀取的 class 信息來匹配已注冊(cè)的 class 信息,并將設(shè)備與相應(yīng)的驅(qū)動(dòng)程序綁定。這個(gè)核心使用一種叫做 USB Request Block 或 URB(在 include/linux/usb.h 中定義)的數(shù)據(jù)結(jié)構(gòu),來異步地管理主機(jī)和設(shè)備之間的數(shù)據(jù)傳輸。設(shè)備驅(qū)動(dòng)程序使用這些例程來請(qǐng)求各種類型的數(shù)據(jù)傳輸(control、interrupt、bulk 或 isochronous)。傳送請(qǐng)求完成后,核心會(huì)使用以前注冊(cè)的回調(diào)函數(shù)來通知驅(qū)動(dòng)程序。



  針對(duì) Bluetooth USB 設(shè)備而言,HCI 命令使用 Control 管道傳輸,HCI 事件使用 Interrupt 管道,Asynchronous (ACL) 數(shù)據(jù)使用 Bulk 管道,而 Synchronous (SCO) 音頻數(shù)據(jù)使用 Isochronous 管道。Bluetooth 規(guī)范為 Bluetooth USB 設(shè)備定義了 class/subclass/protocol 代碼 0xE/0x01/0x01。BlueZ USB 傳輸驅(qū)動(dòng)程序(drivers/bluetooth/hci_usb.c)將該 class/subclass/protocol 信息注冊(cè)到 Linux USB 核心。Belkin USB 適配器插入時(shí),主機(jī)控制器設(shè)備驅(qū)動(dòng)程序會(huì)枚舉它。因?yàn)樵诿杜e期間從適配器讀取的設(shè)備描述符與 hci_usb 驅(qū)動(dòng)程序注冊(cè)到 USB 核心的信息相匹配,所以這個(gè)驅(qū)動(dòng)程序可附加到 Belkin USB 設(shè)備。由 hci_usb 驅(qū)動(dòng)程序從以上描述的各個(gè)端點(diǎn)讀取的 HCI、ACL 和 SCO 數(shù)據(jù)被透明傳送到 BlueZ 協(xié)議棧。一旦做完這些,通過使用以上描述的 BlueZ 服務(wù)和工具,Linux TCP/IP 應(yīng)用程序就可以運(yùn)行在 BlueZ BNEP 上,而串行應(yīng)用程序則可以運(yùn)行在 BlueZ RFCOMM 上。



  具有內(nèi)置 CSR Bluetooth 芯片組的母板



  現(xiàn)在,關(guān)注一下具有內(nèi)置 Bluetooth 芯片組的設(shè)備上的 Bluetooth 網(wǎng)絡(luò)數(shù)據(jù)流?紤]一種擁有內(nèi)置 CSR Bluetooth 芯片組的手持設(shè)備與使用 UART 接口的系統(tǒng)的連接。針對(duì) UART 接口而言,在 Bluetooth 設(shè)備和系統(tǒng)之間傳輸 HCI 數(shù)據(jù)分組的可用協(xié)議有 BlueCore Serial Protocol (BCSP)、H4/UART 和 H3/RS232。而 H4 充當(dāng)通過 UART 傳輸 Bluetooth 數(shù)據(jù)的標(biāo)準(zhǔn)方法。UART 是在規(guī)范中定義的來自 CSR 的專有 BCSP 協(xié)議,支持錯(cuò)誤校驗(yàn)和重傳。BCSP 用在基于 CSR BlueCore 芯片的非 USB 設(shè)備上,包括 PCMCIA 和 CF 卡。BlueZ 支持 BCSP 和 H4。



  這個(gè)母板的 UART 通道使用的傳統(tǒng)串行驅(qū)動(dòng)程序可以從 BlueZ UART 傳輸驅(qū)動(dòng)程序上收發(fā)數(shù)據(jù)。如果使用 BSCP 協(xié)議將 CSR 芯片設(shè)計(jì)為封裝 HCI 數(shù)據(jù)分組,您必須使用 hciattach (hciattach ttySx bcsp) 通知 BlueZ 鏈接驅(qū)動(dòng)程序,在這里 x 是連接到 CSR 芯片組的 UART 通道號(hào)。現(xiàn)在 hci_uart 與 CSR 芯片交互并且傳送 Bluetooth 數(shù)據(jù)往返于 BlueZ 棧。



  Sony HBH-30 Bluetooth 耳機(jī)



  前面的 Bluetooth 設(shè)備示例展示了網(wǎng)絡(luò)數(shù)據(jù)流,F(xiàn)在,通過查看 Sony Ericsson Bluetooth 耳機(jī)來考慮 Bluetooth 音頻 (SCO) 數(shù)據(jù)的傳輸。在耳機(jī)可以開始與 Linux 設(shè)備通信以前,它必須被 Linux 設(shè)備上的 Bluetooth 鏈路層檢測(cè)出來。因此,您必須將耳機(jī)置于發(fā)現(xiàn)模式(通過按下耳機(jī)上的一個(gè)按鈕)。另外,您需要通過 Linux 設(shè)備上的 BlueZ 配置耳機(jī)的 PIN。Linux Bluetooth 設(shè)備上使用 BlueZ SCO API 的應(yīng)用程序現(xiàn)在可以發(fā)送音頻數(shù)據(jù)到耳機(jī)上。音頻數(shù)據(jù)應(yīng)當(dāng)是耳機(jī) 可以理解的格式(例如,Sony 耳機(jī)的 A-law PCM [Pulse Code Modulation] 格式)。有些公共主域?qū)嵱贸绦蚩梢詫⒁纛l(甚至文本文件)轉(zhuǎn)換為各種 PCM 格式。



  Bluetooth 芯片組除擁有 HCI 傳輸接口以外還有 PCM 接口 PIN。例如,如果設(shè)備同時(shí)支持 GSM 和 Bluetooth,GSM 芯片組的 PCM 線路可以直接與 Bluetooth 芯片的 PCM 音頻線路連接。然后,您可能不得不在 Linux 設(shè)備上配置 Bluetooth 芯片組,以通過 HCI 傳輸接口而不是 PCM 接口收發(fā) SCO 音頻數(shù)據(jù)分組。




摘自 賽迪網(wǎng)
   

微信掃描分享本文到朋友圈
  • ←←微信掃描二維碼,即可將本文分享到朋友圈
  • 版權(quán)申明:部分文章轉(zhuǎn)載或來源于投稿,不代表本站贊同其觀點(diǎn),如有異議,請(qǐng)聯(lián)系我們。
  • 上篇文章:WiMAX技術(shù)面面觀
  • 下篇文章:EDGE技術(shù)詳解
  • 無線 芯片
掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
  • 1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書
  • 2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書-2022_03-21
  • 3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國移動(dòng):6G至簡無線接入網(wǎng)白皮書
  • 4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國聯(lián)通5G終端白皮書》
  • 5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國電信5GNTN技術(shù)白皮書
  • 6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解
  • 7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國移動(dòng)算力并網(wǎng)白皮書
  • 8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《R1623501-g605G的系統(tǒng)架構(gòu)1
  • 本周熱點(diǎn)本月熱點(diǎn)

     

      最熱通信招聘

    業(yè)界最新資訊


      最新招聘信息

    最新論壇貼子