问题:监视主从蓝牙之间的sco数据包。
问题描述。 我有小型内部蓝牙设备(在Linux fedora OS中开发),并且配置为从设备。
我对以下事情感兴趣:
如何验证链接已建立?
相同的数据包要掌握。绝对不知道该怎么做?
我到目前为止所做的:
好吧,我已经将内置设备配置为从设备,并通过蓝牙成功连接到Windows笔记本电脑。
我已经在内部BT设备中启用了耳机配置文件,并且可以在Windows上看到耳机图标。
在Linux上,通过c++代码修改了/etc/asound.conf,使其包含连接设备的mac地址(在我的情况下是Windows笔记本电脑)。
示例如下所示
pcm.btheadset {
type plug
slave {
pcm {
type bluetooth
device DC:A9:71:8D:2D:C6
profile "auto"
}
}
然后通过命令在我的内部BT上播放声音
aplay -D btheadset " path of audio_file"
而且我可以在Windows笔记本电脑上成功听到声音。
到现在为止还挺好。
现在当我做
hciconfig -a
acl packets have increase but sco remain at 0
RX bytes:1041 acl:456 sco:0 events:36 errors:0
TX bytes:1347 acl:567 sco:0 commands:34 errors:0
您认为这可能是个问题吗?
如何通过hcidump测试?
注意:
音乐播放时,我做了hcidump并保存了文件。我将保存文件转储到wirehark中,并使用“bthci_sco”过滤数据包,但未发现任何数据包。那么想知道音乐如何运作吗?
最佳答案
经过几天与Ubuntu频繁崩溃的斗争,终于成功了。
以下是我尝试的步骤。请以它为引用,因为我很可能忘记编写一些步骤
................................................... ..................................................................
问题概述:尝试将Linux OS连接到BT耳机并建立sco链接以播放音乐
UBuntu配置:
内核版本: 3.0.0-32-generic
Ubuntu版本-> 11.10
测试设备: JABRA EASY GO耳机。
................................................... .....................................
1)安装以上版本的Ubuntu。此Ubuntu版本已不受支持,但由于我的内部设备使用几乎相同的内核版本,因此我坚持使用该版本。
2)配置apt-get来源列表。由于已安装的版本不在支持范围内,因此apt-get无法正常工作。要使其工作,请修改/etc/apt/sources.list
。
例子->
sudo sed -i -e 's/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
sudo apt-get update && sudo apt-get dist-upgrade
3)我建议同时安装突触来安装软件包和缺少的库。
4)安装以下软件包->
bluez-hcidump
bluez-utils
libbluetooth1
libbluetooth1-dev
install automake-1.7 and autoconfig
cvs
5)谷歌下载btsco的源代码
使用以下命令
cvs -d:pserver:[email protected]:/cvsroot/bluetooth-alsa login
cvs -d:pserver:[email protected]:/cvsroot/bluetooth-alsa co btsco
6)现在正在编译和安装
i)进入btsco目录
ii)./bootstrap
问题:
如果错误/警告:在库安装libbsdl1.2-dev中找不到宏ʻAM_PATH_SDL'
一旦bootsrap通过执行配置
ii)./配置
问题:
iii)使
问题:
./libtool:行841:X--tag = CXX:找不到命令以及更多类似这样的错误
解决该错误的方法:下载libtool-1.5.24 tar ball。提取并执行
configure and make
。现在再次在btsco上进行配置,并将可执行的libtool从libtool目录复制到btsco。
iv)进行安装
v)使维护者保持清洁
O / p:btsco构建成功,您可以在/ usr / local / bin中找到它。
7)构建内核模块
i)光盘/ usr / src / btsco / kernel
ii)使
问题:我想您会收到大量错误。打开btsco.cand逐步处理每个错误
找不到1个错误的声音/driver.h bla bla->在btsco.c文件中进行注释
2条评论#包括,因为这已经过时了
3)添加
#include< linux/smp.h>
#include< linux/muxtex.h>
4)DEFINE_MUTEX(os_mutex);
5)snd_assert已过时,因此如果语句示例替换uit
if( bt_sco->playback == NULL)
{
}
6)将下面的函数替换为kill_proc(再次作废),该函数是从net .. tahnks复制到该家伙的以下9
链接:
http://www.linuxquestions.org/questions/linux-kernel-70/is-there-any-kill_proc-replacement-for-proprietary-linux-kernel-drivers-4175460017/
int my_kill_proc(pid_t pid, int sig) {
int error = -ESRCH; /* default return value */
struct task_struct* p;
struct task_struct* t = NULL;
struct pid* pspid;
rcu_read_lock();
p = &init_task; /* start at init */
do {
if (p->pid == pid) { /* does the pid (not tgid) match? */
t = p;
break;
}
p = next_task(p); /* "this isn't the task you're looking for" */
} while (p != &init_task); /* stop when we get back to init */
if (t != NULL) {
pspid = t->pids[PIDTYPE_PID].pid;
if (pspid != NULL) error = kill_pid(pspid,sig,1);
}
rcu_read_unlock();
return error;
}
然后代替kill_proc应该是
my_kill_proc( bt_sco->thread_pid, SIGINT )
6)将
%d to %lu
替换为long long错误7)
replace lock_kernal to mutex_lock( &os_mutex)
与解锁相同希望之后会成功
8)进行安装
9)depmod -e
10 0清洁
11)modprobe snd_bt_sco
....................................................
现在运行btsco
a)hciconfig hci0语音0X0060
b)hcitool扫描
获取JABRA的mac_addre4ss
c)/ usr / local / bin / btsco -r -v mac_addrees
如果出现错误?:控制打开(hw:1),则jabra不支持sco或未加载内核模块
d)在另一个终端上执行->
sudo hcidump -i hci0 sco
以监视sco数据包e)一旦建立了jabr连接
运行
aplay -D plughw:Headset /home/my_home_dir/my_sample_fiile.wav
关于linux - 如何使用bluez库测试蓝牙中的sco数据包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26137056/