在嵌入式Linux上使用CF介面的藍芽模組__Linux
最後更新:2018-07-26
來源:互聯網
上載者:User
隨著各種支援藍芽通訊技術的裝置的出現, 藍芽通訊變得越來越普及和廣泛. 因此在嵌入式裝置上整合藍芽模組的需求變得越來越普遍. 本文以Anycom公司的CF介面的 LSE139藍芽模組為例, 介紹了如何配置使其在具有CF插槽的嵌入式arm-linux上工作.
1. 配置環境
作業系統: arm-linux
核心: 2.4.19
2. 核心/驅動支援
為了使核心支援藍芽, 需要給核心打補丁: 我使用的是 http://www.holtmann.org/linux/kernel/patch-2.4.19-mh18.gz 這裡需要根據你的核心版本下載不同的補丁. 裝置驅動方面, 這個就要看你的運氣了, 因為不同版本的核心對藍牙裝置的支援是不一樣的. 低版本的核心支援的藍牙裝置要少一些. 我使用的這款藍芽模組直到核心2.6.6-rc2才得以支援. 所以我不得不更改驅動KERNEL_SOURCE_DIR/drivers/bluetooth/bluecard_cs.c, 使得LSE139在2.4的核心上也可以正常工作. 如果你需要這個Patch, 可以給我發訊息或者寫信. 我的Email地址是lijinlei1@hotmail.com.
然後對核心作出以下配置:
#
# Bluetooth support
#
CONFIG_BLUEZ = m
CONFIG_BLUEZ_L2CAP = y
CONFIG_BLUEZ_SCO = y
CONFIG_BLUEZ_RFCOMM = m
CONFIG_BLUEZ_RFCOMM_TTY = y
CONFIG_BLUEZ_BNEP = m
CONFIG_BLUEZ_BNEP_MC_FILTER = y
CONFIG_BLUEZ_BNEP_PROTO_FILTER = y
#
# Bluetooth device drivers
#
CONFIG_BLUEZ_HCIUSB = n
CONFIG_BLUEZ_HCIUART = n
CONFIG_BLUEZ_HCIUART_H4 = n
CONFIG_BLUEZ_HCIDTL1 = n
CONFIG_BLUEZ_HCIBT3C = n
CONFIG_BLUEZ_HCIBLUECARD = m
CONFIG_BLUEZ_HCIBTUART = n
CONFIG_BLUEZ_HCIVHCI = n
CONFIG_BLUEZ_HCIUSB_SCO = n
CONFIG_BLUEZ_HCIUART_BCSP = n
CONFIG_BLUEZ_HCIBFUSB = n
注意CONFIG_BLUEZ_HCIBLUECARD是對"CF"介面的藍牙裝置的支援.
重新編譯核心和模組, 然後安裝到裝置上並重新啟動裝置. 如果你不知道怎樣編譯核心和模組, 請參閱其他文獻.
2. pcmcia_cs的修改
由於CF卡通過PCMCIA匯流排工作, 所以對pcmcia裝置的配置也必須修改, 以保證cardmgr能夠正確識別新裝置並裝載正確的Driver. 以下必須手工修改: /etc/pcmcia/config:
--- config . orig 2007 - 09 - 28 16 : 18 : 54.000000000 + 0200
+++ config 2007 - 09 - 28 16 : 17 : 40.000000000 + 0200
@@ - 23 , 6 + 23 , 9 @@
device " serial_cs "
class " serial " module " serial_cs "
+ device " bluecard_cs "
+ class " bluetooth " module " bluecard_cs "
+
# dummy drivers
device " dummy_cs " module " dummy_cs "
@@ - 52 , 3 + 55 , 8 @@
card " Serial or Modem "
function serial_port
bind " serial_cs "
+
+ card " Anycom LSE139 Bluetooth Compact Flash Card "
+ version " BTCFCARD " , " LSE139 "
+ bind " bluecard_cs "
+
注意其中增加(前面帶+的)的部分. 做了這部分的修改後, 必須重新啟動cardmgr. 然後插入藍芽模組, 這時cardmgr應該可以正確的識別藍芽模組並裝載bluecard_cs.o. 如果一切正常應該沒有任何警告和錯誤訊息出現. 如果出現類似"收到不能識別的資料包" 之類的錯誤, 八成是驅動有問題了.
3. 安裝 bluez
需要交叉編譯並安裝到裝置上的包有:
bluez-libs_2.21
bluez-utils_2.21
如果你安裝高版本的bluez, 那麼你可能還需要DBUS, 在這裡不帶DBUS功能的bluez於我的嵌入式裝置已經夠用, 所以我選擇了一個低版本的Bluez. 當我編譯bluez的時候編譯器抱怨PATH_MAX未定義, 這個時候在出錯的C檔案頭部加上#include <linux/limits.h>
4. 啟動藍牙裝置
root@ereader:~ #/ etc / init . d / bluetooth start 如果你沒有這個指令碼, 從其他Linux電腦上拷貝一個稍微修改一下就可以用了.
運行這個指令碼後, 確保hcid 和 krfcommd這兩個後台進程已經跑起來了.
然後可以運行hciconfig hci0, 可以看到藍芽模組已經成功被初始化, 而且會顯示正確的BD地址.
5. 掃描周圍的藍芽模組
root@ereader:~ # hcitool scan
Scanning ...
00 : 12 : 37 : 95 : 57 :C9 Alex Henzen
00 :0C: 76 : 47 : 33 :2F edbuntu- 0
00 : 17 :B0 :4C :B0 : 71 Nokia 6021
00 : 16 : 41 :F6:E0:E0 NB003
00 : 16 : 41 :D7 : 84 :D7 NB024
00 : 16 : 41 :D9 :1A:1C jinlei-Windows 現在可以說你的藍牙裝置已經可以正常工作了. 但如果我們想利用藍芽通訊協助我們做一點事情, 還有很多其他工作要做. 下面我們舉兩個應用情境.
應用情境1: 通過藍芽手機撥接
首先你需要一個可以上網的手機, 支援資料業務, 支援藍芽通訊, 並正確的配置好. 然後在裝置上使用modprobe rfcomm插入rfcomm.o模組.
第一步, 掃描手機提供的藍芽服務類型
root@ereader:~ # sdptool browse 00 : 12 :D2:CE :6C :A1
Browsing 00 : 12 :D2:CE :6C :A1 ...
Service Name: Headset Audio Gateway