在嵌入式Linux上使用CF介面的藍芽模組__Linux

來源:互聯網
上載者: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.