前言:
大部份的藍牙接收器都是使用相同的晶片,所以市面上買得到的藍牙接收器都可以在linux底下使用,這就有點像便宜的螃蟹卡晶片已經大量的佔據了所有低價網路卡的市場了,所以你去買一塊最便宜的網路卡時常會買到螃蟹卡,所幸螃蟹卡的品質還不算太差,也才能被市場接受。usb藍牙接收器大概也象這樣的情形。底下開始介紹怎樣在linux底下驅動藍牙接收器。
1 檢查系統
插上你的usb藍牙接收器之後請下此指令來看看系統是否有發現你的usb藍牙接收器
lsusb
在我的系統顯示了如下的訊息
Bus 006 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
因此我使用這個關鍵字”Cambridge Silicon Radio, Ltd Bluetooth Dongle”去網路上查到了這頁的資料,裡面有寫著module btusb有支援此driver,那我就猜想linux kernel 原生就有支援此藍牙接收器了。只要這麼做即可
sudo vim /etc/module
加上底下這兩行即可
#bluetooth
btusb
(純猜測:也許以上這動作可以省略不做)
若要看kernel是否有此檔或是否還有支援其它藍牙的drvier可下此指令
ls -al /lib/modules/3.2.0-4-amd64/kernel/drivers/bluetooth
註:中間那個路徑 3.2.0-4-amd64 請更換成你現在所使用的kernel版本號
2 安裝必備套件
由於系統已內定安裝 bluez 此套件,若你沒有的話,請自行安裝 bluez
aptitude install bluetooth
裝完上面這個套件之後,重開機理論上系統應該就可以正確的驅動你的藍牙接收器了,可以使用此指令來確認你的系統是否已經正確的驅動了你的藍牙接收器了。
指令: hcitool dev
顯示出來的結果
Devices:
hci0 00:15:83:07:C8:55
但實際上,重開機後,我的系統並不能找到我的藍牙接收器,開機後我還必須下一次這樣子的指令,才能使我的系統找到藍牙接收器
指令: /etc/init.d/bluetooth restart
猜測可能原因是 bluetooth 這個服務在module driver 還沒載入之前,bluetooth服務就先啟動了,故會找不到藍牙接收器。請接著看下一步怎麼解決這問題。
3 修正開機問題
由於在LMDE裡,bluetooth 服務沒有辦法正常啟動,每次開機後都要下一次這樣的指令 /etc/init.d/bluetooth restart 藍牙接收器才能正確被啟動,這樣很麻煩。底下是解法
指令:
insserv -r bluetooth
insserv bluetooth
這樣就可以了,猜測可能原因是 bluetooth 這個服務在module driver 還沒載入之前,bluetooth服務就先啟動了,故會找不到藍牙接收器,試著執行以上的指令調整啟動順序就行了。再不行的話,試試底下指令 (底下指令我沒試過,純猜測,因為我用上面的指令就解決問題了)
insserv -r bluetooth
update-rc.d bluetooth start 99 2 3 4 5 .
指令簡要說明:第一行指令,移除bluetooth開機啟動。第二行指令,重新設定bluetooth開機啟動,並將啟動值設為99意即最後一個啟動,要注意第二行指令最後面有一個小數點,那個小數點不能少。
其它參考資料:
幾個比較重要的BlueZ工具:
hcitool:
hcitool dev(顯示目前所有藍芽裝置及位置)
hcitool scan(掃描區域內所有藍芽裝置)<--常用
hcitool name [bdaddr](顯示Bluez硬體位置和名稱)
hcitool inq(查詢所有藍芽)<--包含
dsptool:
sdptool browse [bdaddr](查詢藍芽裝置內所有的服務)
l2ping [bdaddr](Ping L2CAP層的連線狀態)
參考資料:堯@部落格、help ubuntu、