㈠ 如何將freemodbus協議棧移植到linux下
(二)在HHARM2410-R3上的移植
完成了在普通red hat上的安裝,熟悉了藍牙協議棧一些基本的東西,下面的任務就是把協議棧搬到開發板上了。
第一步當然是內核了,由於華恆的內核代碼改過,我也不知道從bluez上下載的patch能不能使用,試試看了,只好。
# cd /HHARM2410/kernel
# gzip -dc ~/patch-2.4.18-mh15.gz | patch -p1
# find ./ -name '*rej'
./fs/cramfs/inode.c.rej
不好,有文件不能patch,看看是針對cramfs文件系統的patch,我也不清楚為什麼bluez的patch會修改到cramfs,不過我想 問題應該不大。內核源代碼關於bluetooth的部分華恆應該沒有改過,因此patch的主要部分應該是沒有問題的。如果內核編譯後發生問題,我想大概 也只有把內核代碼翻出來看了。
先就這樣了,用用試試看好了。與普通pc上的類似,只不過有些是m的現在統統為y了。我的配置關於Bluez的部分設置為:
#
# Bluetooth support
#
CONFIG_BLUEZ=y
CONFIG_BLUEZ_L2CAP=y
# CONFIG_BLUEZ_SCO is not set
CONFIG_BLUEZ_RFCOMM=y
CONFIG_BLUEZ_RFCOMM_TTY=y
CONFIG_BLUEZ_BNEP=y
CONFIG_BLUEZ_BNEP_MC_FILTER=y
CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
# CONFIG_BLUEZ_HIDP is not set
#
# Bluetooth device drivers
#
CONFIG_BLUEZ_HCIUSB=y
# CONFIG_BLUEZ_HCIUSB_SCO is not set
# CONFIG_BLUEZ_HCIUART is not set
# CONFIG_BLUEZ_HCIBFUSB is not set
# CONFIG_BLUEZ_HCIDTL1 is not set
# CONFIG_BLUEZ_HCIBT3C is not set
# CONFIG_BLUEZ_HCIBLUECARD is not set
# CONFIG_BLUEZ_HCIBTUART is not set
# CONFIG_BLUEZ_HCIVHCI is not set
device部分就設了個USB的,其他的就不設置了。
下面繼續make dep;make zImage的常規過程,OK,沒有發生編譯問題,可以稍微舒口氣了。
下面要移植Bluez的基礎庫了,在Redhat 9下執行
# ldd /usr/lib/libbluetooth.so.1.0.17
libc.so.6 => /lib/libc.so.6 (0x4002c000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
發現沒有依賴什麼莫名其妙的庫,應該換個編譯器就可以了,configure一下就可以了。我的配置命令很簡單:
# ./configure --host=armv4l --prefix=/HHARM2410/applications/bluezport/libs CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-cpp AR=/opt/host/armv4l/bin/armv4l-unknown-linux-ar STRIP=/opt/host/armv4l/bin/armv4l-unknown-linux-strip RANLIB=/opt/host/armv4l/bin/armv4l-unknown-linux-ranlib
LD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld
# make
# make install
OK了,到了/HHARM2410/applications/bluezport/libs下看看,我也不清楚為什麼,居然只有.a和.la的靜態庫,沒有動態庫。只好自己動手,到bluz-libs-2.17/src/下,自己編譯動態庫:
# /opt/host/armv4l/bin/armv4l-unknown-linux-gcc -shared -o libbluetooth.so.1.0.17 bluetooth.o hci.o sdp.o
再做兩個符號連接
# ln -s libbluetooth.so.1.0.17 libbluetooth.so
# ln -s libbluetooth.so.1.0.17 libbluetooth.so.1
好了,庫交叉編譯完畢,mv到/HHARM2410/application/bluezport/libs/lib文件夾下就可以了。
接著移植Bluez的工具集。與庫類似,先看一下各個程序需要用到什麼庫,比如:
#ldd /usr/sbin/hcid
libbluetooth.so.1 => /usr/lib/libbluetooth.so.1 (0x40035000)
libc.so.6 => /lib/libc.so.6 (0x40042000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
挨個試試需要用的工具,發現需要的庫華恆和Bluez都提供了,應該換個編譯器編譯一下就可以了。編譯之前我為了到板子上與我自己的手機連接方便修改 了bluez-utils-2.17/hcid/security.c文件,在init_security_data函數中的設置默認的密碼,非常簡單地 改了兩行:
strcpy(hcid.pin_code, "123");
hcid.pin_len = 3;
然後configure我想就行了,我的configure設置為:
# ./configure --prefix=/HHARM2410-R3/applications/bluezport/utils --includedir=/HHARM2410-R3/applications/bluezport/libs/include --libdir=/HHARM2410-R3/applications/bluezport/libs/lib --with-bluez=/HHARM2410-R3/applications/bluezport/libs --disable-test --disable-cups --disable-pcmia --host=armv4l CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-cpp AR=/opt/host/armv4l/bin/armv4l-unknown-linux-ar STRIP=/opt/host/armv4l/bin/armv4l-unknown-linux-strip RANLIB=/opt/host/armv4l/bin/armv4l-unknown-linux-ranlib LD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld
# make
我在這步make的時候出現了一點小錯誤,好像是說PATH_MAX沒有定義,這個是LINUX設置的存放路徑名緩沖區的最大長度。應該是少包含了一個頭文件造成的。我沒有去仔細考究,就在當前文件下的config.h中添加了三行:
#ifndef PATH_MAX
#define PATH_MAX 4095/* PAGE_SIZE - 1 */
#endif
採用簡單粗魯的添加定義的方式。再make,通過。
# make install
好了,工具集都在/HHARM2410-R3/applications/bluezport/util下了
最後,由於在PC的LINUX下的默認pin_helper /usr/bin/bluepin是用python寫的代碼,在2410上當然不能用了,所以要自己寫一個pin_helper的程序。翻翻 /usr/bin/bluepin的代碼以及hcid/security.c的代碼,事實上hcid進程在驗證PIN code的時候開了一個pipe指向pin_helper進程的標准輸出,pin_helper進程向用戶詢問PIN code,如果用戶輸入密碼XXXX就以"PIN:XXXX"的形式寫到標准輸出中去,如果用戶reject就寫個"ERR"回去。
我以一種最簡單的方式實現pin_helper程序,即固定地寫一個code回去,比如123,犧牲安全性。
用腳本實現就是:
#!/bin/sh
echo "PIN:123"
用C實現一個就是:
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("PIN:123");
}
交叉編譯成my_pin_helper再放到板子的/usr/bin下,那麼就可以把板子的hcid.conf修改成:
pin_helper /usr/pin/my_pin_helper
後來,我在板子上也用MiniGUI寫了一個pin_helper,也挺簡單的。
好了,一切准備完畢,做好ramdisk,記得在/dev下mknod幾個rfcomm,放到板子上,可以運行!
插上USB適配器,連模塊都不用probe
# hciconfig hci0 up
# hcid -f /etc/bluetooth/hcid.conf
# hciconfig -a
㈡ 怎樣在Linux中使用藍牙
方法如下:
1、終端使用命令lsusb
5、然後開始連接了,連接階段使用的主要命令是rfcomm:
運行rfcomm --help 可以查看用法
首先需要綁定目的藍牙設備:
sudo rfcomm bind /dev/rfcomm0 E0:A6:70:8C:A3:02
注意:上面的這個地址是目的藍牙設備的硬體地址。
接著連接:
sudo cat >/dev/rfcomm0
這是目的藍牙主機就會彈出一個對話框要求輸入pin碼,隨便輸入一個,然後主機就會彈出一個對話框,只要輸入的和剛才一致就可以通過驗證。之後我們發現我的手機已經顯示了成功配對的標記了。
㈢ Linux下如何使用藍牙
使用藍牙
在使用藍牙之前,先要確認你所使用的內核是否已經加入藍牙支持,各大Linux廠商的發行版的內核一般都帶有藍牙支持。
首先載入模塊:
#modprobe hci_usb (我這里使用的是usb介面的藍牙適配器)
#modprobe rfcomm
開啟藍牙服務
#/etc/rc.d/init.d/bluetooth start
打開設備介面:
#hciconfig hci0 up
查看設備狀態:
#hciconfig -a
hci0: Type: USB
BD Address: 00:10:60:A3:68:9F ACL MTU: 192:8 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN
㈣ Linux通過藍牙與手機配,網上說需要配置/etc/bluetooth/rfcomm.conf文件,可我的文件中只有個mian.conf。
你要自己安裝整個bluez吧,安裝後才會有。
Bluez的官方網址:http://www.bluez.org/
㈤ linux怎麼用藍牙適配器2014
直接通過該命令就可以連接。
連結後會有一個默認連接的資料庫。
mongodb常用命令:
查看資料庫命令:show dbs;
查看集合命令:show collections;
切換資料庫:use databaseName;
查詢數據:db.集合名.find()
插入數據:db.集合名.insert({name:'test',age:1});
刪除:db.test.remove();sql="db.test.insert({name:'test',age:1});"//定義執行的sqlecho "$sql"|/home/test/mongodb/mongodb-2.2.3/bin/mongo 127.0.0.1:8888/test --shell
注意,echo命令中的格式必須這樣寫,管線命令後面的是是資料庫安裝地址 然後是ip:埠號,斜線後是資料庫名稱,--shell表示通過shell交互!
㈥ 嵌入式linux 藍牙怎麼開發
一.Linux對於藍牙的支持
在Linux 2.6內核已經實現如下協議。
串口形式藍牙設備驅動(HCI UART driver)
USB藍牙棒驅動(HCI USB driver)
內核也實現了L2CAP,RFCOMM串口介面,以及SCO鏈路支持.
另外內核也直接支持BNEP(Bluetooth Network Encapsulation Protocol ),即把藍牙網路當成一個無線區域網操作。
Linux也帶了藍牙輸入設備的相關支持。
需要打開 HIDP 和HID2HCI兩個選項都要打開.
DUND 把藍牙網路當成一個撥號網路來處理。
2.藍牙協議棧
在實現了L2CAP後,也需要一個藍牙協議棧處理。它起什麼作用呢? 我的理解是內核封裝到RFCOMM的層次,即只負責的藍牙的包的封裝與收發。至於包收上來,在藍牙的四個階段,如何應用的狀態影響,以及如何響應正確的包,這一些事情由藍牙協議棧來完成的。
在Linux實現藍牙功能有多個互相競爭的藍牙協議棧,但是影響最大是bluez.幾乎已經成為Linux下的標准協議棧的代名詞。
還有一個協議棧是Affix 不過用的人比較少
在應用程序級,它主要由兩部分組成,一個是bluez的應用程序庫,主要負責與內核的bluez通信,和bluez-util工具。即完成藍牙四階段處理的一些命令行工具。
3.藍牙的概念。
配對由一方發起即可,如果本設備需要被其它設備搜索,需要有被發現功能。
二.Linux關於藍牙命令
-------------------------------------------------
在Linux使用藍牙最方便是使用bluez-util自帶向個命令來測試。
我們這里採用市面最容易找到的藍牙棒來做物理層設備與手機進行通訊測試。把藍牙棒插LINUX下的USB口後,在dmesg我們會看到提示
passkey 配置項指明請求聯接的設備的pin碼。當採用auto模式時,將採用這個密碼來聯接.
㈦ linux下有沒有用命令直接配對藍牙設備的命令的
運行hciconfig查看藍牙信息,
運行hcitool dev可以看到我們的藍牙設備的硬體地址
運行hcitoo --help 可以查看更多相關命令
然後我們激活它:sudo hciconfig hci0 up
然後我們開始掃描了:hcitool scan
運行rfcomm --help 可以查看用法
接著我們連接它:sudo cat >/dev/rfcomm0
http://www.linuxprobe.com/
㈧ 求助 linux下移植藍牙的問題!!!!
我和你一樣!目前項目需要增加一個新的特性就是藍牙耳機,真是一籌莫展啊!TI那邊說是負責給我在做驅動,我內核代碼裡面有一個串口驅動是留給藍牙和CPU通信的!但是真的怎麼把什麼bluez連接起來,以及怎麼和音頻用PCM介面真是不會啊!
㈨ 哪些usb 藍牙 可以用在linux
一,藍牙存儲設備
藍牙適配器: ISSC晶元, USB介面(市面上還有其他的一些品牌,大多沒有問題)
藍牙手機:索愛T628
藍牙耳機:Jabra BT250(大陸地區型號是FS258,大概照顧中國人對BT的特殊理解和258的吉利數字)
1,載入藍牙適配器
插入USB口之後,可以使用lsusb命令,看到:
Bus 004 Device 003: ID 1131:1001 Integrated System Solution Corp.
這是,運行hciconfig可以看到:
hci0: Type: USB
BD Address: 00:11:67:02:1A:03 ACL MTU: 678:8 SCO MTU: 48:5
DOWN
RX bytes:142289 acl:884 sco:0 events:823 errors:0
TX bytes:13302 acl:494 sco:0 commands:151 errors:0
運行:
hciconfig hci0 up
可以激活借口(這一步不做,hcitool scan無法運行)
3,配置bluez
默認的配置文件放在/etc/bluetooth目錄
hcid.conf和pin不需要修改,安全方式已經被設置成auto,這是為了方便連接,用戶可以自己修改,推薦不做修改,以防止有些設備連接不上。
4,重啟bluetooth服務。
/etc/rc.d/init.d/bluetooth stop
/etc/rc.d/init.d/bluetooth start
5,掃描設備
運行hcitool scan可以得到:
Scanning ...
00:01:EC:0C:D2:00 Tree's T628
6,修改配置文件:
修改/etc/bluetooth/rfcomm.conf
將裡面的:
device 11:22:33:44:55:66;
修改成hcitool scan的結果,也就是:
device 00:01:EC:0C:D2:00
保存退出。
7,創建設備:
運行
rfcomm_create_dev。
8,添加通道:
sdptool add --channel=1 DID SP DUN LAN FAX OPUSH FTP HS HF SAP NAP GN PANU HID CIP CTP A2SRC A2SNK SYNCML NOKID PCSUITE SR1
後面的參數不一定被支持,但是以防有些服務沒有被打開,所以,乾脆全部打開了。
rfcomm bind /dev/rfcomm0 電話的地址 通道(在rfcomm.conf中配置)
這里的命令應該寫成:
rfcomm bind /dev/rfcomm0 00:01:EC:0C:D2:00 1
9,連接手機:
hcitool cc 電話的地址
也就是
hcitool cc 00:01:EC:0C:D2:00
這時候,可以看到手機上的藍牙連接呈聯通狀態。
10,從計算機發送文件:
obex-send abc.jpg
操作系統會彈出提示框,讓你選擇要發送的目標。
同時可以看到手機會彈出提示框,詢問是否接受文件。
11,手機的配置:
需要在手機上進行一下配置:
連接->藍牙->匹配裝置->添加裝置。
會自動掃描到PC上的適配器。
如果需要填入識別碼就填寫123。上面已經設置了。
這時候,可以看到手機已經成功的添加藍牙裝置。
12,從手機發送文件。
在PC機上啟動obex-server,會看到系統托盤出現一個小圖標。
完成上面的工作後,可以進入手機的:
多媒體->我的影集
選擇一張圖片。
然後,「發送」->「通過藍牙」
看到有剛才掃描到的藍牙適配器。
然後,就可以發送文件了。
13,使用軟體管理手機信息。
參考gnokii軟體的文檔
二、藍牙耳機。
1,同時按住jabra 250上面的「電話鍵」和「音量增大鍵」,大約8秒,看到藍燈常亮
1,掃描耳機,得到bdaddress
hcitool scan
3,配置工作:
modprobe snd_bt_sco
hciconfig hci0 void 0x0060
btsco bdaddress (這里的bdaddress就是掃描出來的結果)
btsco運行後,會彈出對話框,要求輸入耳機的pin,jabra 250為0000,可以在說明書上找到。
4,建立聯接後,設備被映射成/dev/dsp1。
以beep為例,
插件->輸出,選擇使用alsa驅動,點開「首選項」,音頻設置部分就可以看到btsco:hw0,1之類的信息,選擇這個即可。
然後播放一首歌,嘗試一下無線的快樂吧。
然後適當的配置你所要使用的播放器之類的就可以了。
㈩ linux平台下的QT的藍牙使用~
檢查你的Qt安裝的時候是否選擇了bluez的支持。
如果你用的Linux系統默認Qt很可能沒有安裝,針對你的Linux版本,上網找找具體怎麼添加bluez模塊的支持。
Qt藍牙支持安裝:http://doc.qt.nokia.com/qtextended4.4/bluetooth.html
大概也就是自己編譯的時候使用-bluetooth選項等。
Qt的藍牙開發教程:http://doc.qt.nokia.com/qtextended4.4/bluetooth-bluetoothservice.html
我自己沒有用過Qt的藍牙支持,但是你說的問題聽起來應該是沒有打開藍牙支持。嘗試重新安裝Qt添加藍牙模塊,然後看看能不能行。我記得默認情況下很多Qt為了編譯速度和安裝包大小等,默認都是不包含藍牙的。