1. 怎樣在linux中使用藍牙
方法如下:
1、終端使用命令lsusb
5、然後開始連接了,連接階段使用的主要命令是rfcomm:
運行rfcomm --help 可以查看用法
首先需要綁定目的藍牙設備:
sudo rfcomm bind /dev/rfcomm0 E0:A6:70:8C:A3:02
注意:上面的這個地址是目的藍牙設備的硬體地址。
接著連接:
sudo cat >/dev/rfcomm0
這是目的藍牙主機就會彈出一個對話框要求輸入pin碼,隨便輸入一個,然後主機就會彈出一個對話框,只要輸入的和剛才一致就可以通過驗證。之後我們發現我的手機已經顯示了成功配對的標記了。
2. 藍牙4.0協議棧與藍牙4.1協議棧有什麼區別
藍牙4.0協議棧與藍牙4.1協議棧的最大區別在藍牙4.1可以支持多線程連接並且支持主機與從機同時連接的特性。藍牙4.1相比藍牙4.0功耗更低,藍牙4.1這些特性包括提升了對LTE和批量數據交換率共存的支持。升潤科技在藍牙4.0/4.1協議棧技術方面研究頗深。我們公司之前有開發過一款血糖儀就是採用升潤科技的藍牙4.1解決方案。
3. Linux 下面 支持 藍牙 協議嗎
linux內核從2.4其就原生藍牙協議棧(感謝高通貢獻的bluez實現)非常完整。各種藍牙profile都支持。只要你的硬體dongle支持,包括avp都是可以的。
4. 嵌入式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模式時,將採用這個密碼來聯接.
5. bluedroid是什麼藍牙適配器嗎
是一個藍牙版塊,bluedroid是在安卓上替代bluez的一個藍牙協議棧。
android 4.2之前,Google一直使用的是Linux官方藍牙協議棧BlueZ。BlueZ實際上是由高通公司在2001年5月基於GPL協議發布的一個開源項目,做為Linux 2.4.6內核的官方藍牙協議棧。
隨著Android設備的流行,BlueZ也得到了極大的完善和擴展。例如Android 4.1中BlueZ的版本升級為4.93,它支持藍牙核心規范4.0,並實現了絕大部分的Profiles。
從Android 4.2開始,Google便在Android源碼中推出了它和博通公司一起開發的BlueDroid以替代BlueZ。BlueZ的創始者,高通公司也將在基於其晶元的Android參考設計中去除BlueZ,支持BlueDroid。
相比BlueZ,BlueDroid最值得稱道的地方就是其框架結構變得更為簡潔和清晰。
藍牙適配器指數碼產品適用藍牙設備的介面轉換器。
藍牙適配器採用了全球通用的短距離無線連接技術,使用與微波、遙控器以及有些民用無線通訊器材相同的2.4GHz附近免付費、免申請的無線電頻段,為避免此頻段電子裝置眾多而造成的相互干擾,因而以1600次高難度跳頻以及加密保密技術。
6. 如何在Linux上通過藍牙發送聲音
為了通過A2DP(Advanced Audio Distribution
Profile)發送聲音,您將需要安裝「bluez」藍牙協議棧,另外還有三個軟體包,即「bluez-firmware」,「bluez-utils」和「bluez-tools
「。 您可以通過打開終端並輸入「sudo yaourt」,然後輸入「sudo yaourt」,然後輸入「sudo
yaourt」,如果您使用Arch,或者使用「sudo apt-get install」,後跟包名稱,如果您使用Ubuntu。
如果您更喜歡packman實用程序,請注意,在「AUR」庫中可以找到「bluez-tools」軟體包。
在您的系統中安裝這些軟體包後,您應該能夠找到藍牙揚聲器/耳機,但是您將無法連接。
您可以通過打開GNOME的藍牙設置或打開終端並鍵入「hcitool scan」來獲取設備的藍牙地址。
7. 誰能詳細的介紹一下藍牙的各種協議和用途
藍牙協議分為四個層次:物理層(Physical Layer)、邏輯層(Logical Layer)、L2CAP Layer和應用層(APP Layer)。
1、物理層
負責提供數據傳輸的物理通道(通常稱為信道)。通常情況下,一個通信系統中存在幾種不同類型的信道,如控制信道、數據信道、語音信道等等。
2、邏輯層
在物理層的基礎上,提供兩個或多個設備之間、和物理無關的邏輯傳輸通道(也稱作邏輯鏈路)。
邏輯層的主要功能,是在已連接(LE Advertisement Broadcast可以看做一類特殊的連接)的藍牙設備之間,基於物理鏈路,建立邏輯信道。
3、L2CAP層,L2CAP是邏輯鏈路控制和適配協議(Logical Link Control and Adaptation Protocol)的縮寫,負責管理邏輯層提供的邏輯鏈路。
基於該協議,不同Application可共享同一個邏輯鏈路。類似TCP/IP中埠(port)的概念。
4、APP層
理解藍牙協議中的應用層,基於L2CAP提供的channel,實現各種各樣的應用功能。
Profile是藍牙協議的特有概念,為了實現不同平台下的不同設備的互聯互通,藍牙協議規定了核心規范,也為不同的應用場景,定義了各種Application規范,這些應用層規范稱作藍牙profile。
8. 如何將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
9. android bluedroid什麼意思
android bluedroid什麼意思寫回答
android bluedroid什麼意思
寫回答有獎勵 共1個回答
1條回答
心愛淺紫色
2016-06-21 TA獲得超過6040個贊
關注
Android 4.2之前,Google一直使用的是Linux官方藍牙協議棧BlueZ。BlueZ實際上是由高通公司在2001年5月基於GPL協議發布的一個開源項目,做為Linux 2.4.6內核的官方藍牙協議棧。隨著Android設備的流行,BlueZ也得到了極大的完善和擴展。例如Android 4.1中BlueZ的版本升級為4.93,它支持藍牙核心規范4.0,並實現了絕大部分的Profiles。
從Android 4.2開始,Google便在Android源碼中推出了它和博通公司一起開發的BlueDroid以替代BlueZ。BlueZ的創始者,高通公司也將在基於其晶元的Android參考設計中去除BlueZ,支持BlueDroid。
相比BlueZ,BlueDroid最值得稱道的地方就是其框架結構變得更為簡潔和清晰。對我們工程師來說這也是個不錯的福利,清晰、簡潔的架構使我們在debug過程中思路更清晰;