1. 程式人生 > >【ARM】嵌入式 ARM Linux 下移植 USB 藍芽、交叉編譯 bluez 各種版本

【ARM】嵌入式 ARM Linux 下移植 USB 藍芽、交叉編譯 bluez 各種版本

一、基本說明:

目前在嵌入式 Linux 下使用 USB 藍芽模組,比較好的解決方法就是使用 Linux 官方協議棧 bluez,這同時也是 PC 及 Android 手機上使用的藍芽協議棧,可以說還是比較靠譜的。

但是!不得不說,bluez 有多種版本,如 bluez-2.25、bluez-3.36、bluez-4.95、bluez-5.28 等,每個大版本從交叉編譯、使用方法到內部原理、配置方法都區別相當大!網上資料魚龍混雜,對於新手來說很混亂,而且還有一部分博主對關鍵點避而不談,造成明明編譯不過,一步略過,很讓人抓狂……因此博主盡力分析不同版本的差異,提供 bluez 不同版本的不同配置方法,旨在答疑解惑,或權當備份……

提示:遇到問題千萬要去 Google,不要百度!基本搜不出來有用的東西,Google 上都是寶貝……
 

二、專案需求:

目前博主需要在嵌入式 ARM Linux 上使用藍芽模組,開發板是“飛凌 OK6410”,藍芽模組是 RTL8723A,是一款 Wifi 藍芽二合一的模組。專案需要在開發板上移植藍芽,並通過手機 App 與開發板實現資料通訊。
 

三、Bluez 版本說明:

移植藍芽,博主選擇使用官方的 bluez,對於 bluez 的 4 個版本,博主都試著摸索了一遍,先說結論:bluez-4.95 目前配置成功,其他版本有各種各樣的問題。

注:這裡僅說明原始碼包都是什麼,以及交叉編譯需要哪些包,具體的步驟請參見本文附錄中的博文連結,用者自取。
 

1、bluez-2.25

配置結果:

編譯成功,使用基本成功,能通過嵌入式 Linux 的 bluez 連線電腦藍芽的藍芽串列埠服務,並通過串列埠傳送資訊,但是反過來沒成功……

需要的包:

  • bluez-libs-2.25.tar.gz
  • bluez-utils-2.25.tar.gz
  • bluez-pin-0.25.tar.gz

說明:

bluez-libs-2.25.tar.gz,官網提供,這是 bluez 庫檔案
bluez-utils-2.25.tar.gz,官網提供,這是 bluez 自帶的配置工具
bluez-pin-0.25.tar.gz,非官方,一個 GTK 的圖形化 pin 碼輸入介面,非必須
 

2、bluez-3.36

配置結果:

編譯成功,使用失敗,原始碼包自帶的配對程式僅支援“簡單配對模式(Simple Pairing)”,不支援“pin 碼配對(PIN Code Pairing)”,而博主的模組怎麼也調不出 pin 碼配對模式,導致使用失敗。

簡單概念說明:

早期藍芽模組只有 pin 碼配對,就是主機發出配對請求,從機要求主機輸入 pin 碼,然後從機和自己的比對,正確了就配對。

後期出現了簡單配對模式,就是主機不輸入 pin 了,僅僅生成一個隨機 6 位碼,問是否配對,從機也是,都認可了就配對。

而對於嵌入式來說,有時候輸入輸出都沒有,怎麼辦,這就要求 pin 碼寫死,或者自動應答配對請求,怎麼寫,寫在哪裡,怎麼自動應答,這就是不同版本的差異,幾乎一個版本一個樣……具體都怎麼用,參見附錄博文不同版本的 bluez 交叉編譯過程。

需要的包:

  • bluez-libs-3.36.tar.gz
  • expat-2.0.1.tar.gz
  • dbus-1.2.16.tar.gz
  • glib-2.22.4.tar.gz
  • libusb-0.1.12.tar.gz
  • bluez-utils-3.36.tar.gz

說明:

bluez-libs-3.36.tar.gz,官網提供,這是 bluez 庫檔案
expat-2.0.1.tar.gz,網上下載,用於解析 xml,編譯 bluez-utils-3.36.tar.gz 需要
dbus-1.2.16.tar.gz,網上下載,用於程序間通訊,編譯 bluez-utils-3.36.tar.gz 需要
glib-2.22.4.tar.gz,網上下載,編譯 bluez-utils-3.36.tar.gz 需要
libusb-0.1.12.tar.gz,網上下載,暫時貌似沒用到??沒注意……
bluez-utils-3.36.tar.gz,官網提供,這是 bluez 自帶的配置工具

依賴關係:

bluez-libs
bluez-utils ─┬─ dbus ─── expat
         └─ glib
 

3、bluez-4.95

配置結果:

編譯成功,使用成功!!可以配對,但是隻是簡單配對模式(Simple Pairing),pin 碼配對模式(PIN Code Pairing)還沒搞出來……

需要的包:

  • expat-2.0.1.tar.gz
  • dbus-1.4.1.tar.gz
  • glib-2.16.2.tar.gz
  • bluez-4.95.tar.gz
  • bluez-hcidump-2.5.tar

說明:

expat-2.0.1.tar.gz,網上下載,用於解析 xml,編譯 bluez-4.95.tar.gz 需要
dbus-1.4.1.tar.gz,網上下載,用於程序間通訊,編譯 bluez-4.95.tar.gz 需要
glib-2.16.2.tar.gz,網上下載,編譯 bluez-4.95.tar.gz 需要
bluez-4.95.tar.gz,官網提供,這是 bluez 庫檔案、自帶配置工具
bluez-hcidump-2.5.tar,官網提供,這是除錯 hci 包、事件的工具,非必須

依賴關係:

bluez ─┬─ dbus ─── expat
     └─ glib
bluez-hcidump
 

4、bluez-5.28

配置結果:

編譯失敗,編譯很複雜,最後 bluez make 時出錯,暫時沒有找到解決方法

需要的包:

  • expat-2.0.1.tar.gz
  • dbus-1.6.30.tar.gz
  • glib-2.28.6.tar.bz2
  • libical-1.0.tar.gz
  • ncurses-5.9.tar.gz
  • readline-6.3.tar.gz
  • bluez-5.28.tar

說明:基本同上,都是編譯 bluez-5.28.tar 依賴的包

依賴關係:

bluez ─┬─ dbus ─── expat
     ├─ glib
     ├─ libical
     └─ readline ─── ncurses
 

附錄:

1、bluez-2.25 交叉編譯及使用方法:
2、bluez-3.36 交叉編譯及使用方法:
3、bluez-4.95 交叉編譯及使用方法:http://blog.csdn.net/u011408697/article/details/44459239
4、bluez-5.28 交叉編譯及使用方法: