블루투스에서 Sco 패킷을 테스트하는 방법

블루투스에서 Sco 패킷을 테스트하는 방법

질문: 마스터와 슬레이브 Bluetooth 간의 sco 데이터 패킷을 모니터링합니다.

문제 설명. 나는 작은 내부 블루투스 장치(Linux fedora OS에서 개발)를 가지고 있으며 슬레이브 장치로 구성되었습니다.

나는 다음에 관심이 있습니다:

  1. Master는 내장 장치에 연결하고 sco 링크를 설정합니다. 링크가 설정되었는지 어떻게 확인하나요?

  2. 마스터 스테이션은 sco 데이터 패킷을 슬레이브 스테이션으로 보내고, 슬레이브 스테이션은 동일한 데이터 패킷을 마스터 스테이션으로 다시 보냅니다(루프백). 무엇을 해야할지 모르시나요?

내가 지금까지 무엇을 했는지:

  1. 글쎄, 내장 장치를 슬레이브로 구성하고 Bluetooth를 통해 Windows 노트북에 성공적으로 연결했습니다.

  2. 내부 BT 장치에서 헤드셋 프로필을 활성화했으며 Windows에서 헤드셋 아이콘을 볼 수 있습니다.

  3. /etc/asound.confLinux 측에서는 C++ 코드를 통해 연결된 장치(제 경우에는 Windows 노트북)의 mac 주소를 포함하도록 수정했습니다 .
    아래에 예가 나와 있습니다.

    pcm.btheadset {
       type plug
       slave {
           pcm {
               type bluetooth
               device DC:A9:71:8D:2D:C6
               profile "auto"
           }
       }
    
  4. 그런 다음 명령을 통해 내부 BT에서 사운드를 재생합니다.aplay -D btheadset " path of audio_file"

Windows 노트북에서 소리를 들을 수 있습니다.

여태까지는 그런대로 잘됐다.
이제 내가 할 때hciconfig -a

acl 패킷은 증가하지만 sco는 0으로 유지됩니다.

RX bytes:1041 acl:456 sco:0 events:36 errors:0
TX bytes:1347 acl:567 sco:0 commands:34 errors:0

이것은 오디오가 작동하지만 sco를 통해서는 작동하지 않는다는 것을 증명합니까?

  1. btsco 드라이버나 문서가 없다는 것을 발견했습니다 hcid.conf. 이것이 문제가 될 수 있다고 생각하시나요?

  2. 내 오디오가 sco를 통해 작동하는 경우 누군가 테스트 방법에 대한 예를 제공할 수 있습니까 hcidump?

  3. 마스터로 루프백하는 방법은 무엇입니까?

답변1

잦은 Ubuntu 충돌로 며칠 동안 고생한 끝에 마침내 성공했습니다.

내가 시도한 단계는 다음과 같습니다. 몇 가지 단계를 작성하는 것을 잊어버렸을 가능성이 높으므로 참고용으로 사용하세요.

................................................. ............... ................................... ................................ ... 질문 중 하나에 대한 개요: Linux OS를 BT 헤드셋에 연결하고 음악 재생을 위한 sco 링크 설정 시도

UBuntu 구성: 커널 버전: 3.0.0-32-generic Ubuntu Verion ->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) Google 또는 기타 옵션에서 btsco의 소스 코드를 다운로드합니다.

다음 명령을 사용하십시오

cvs -d:p서버:[이메일 보호됨]:/cvsroot/bluetooth-alsa cvs -d:pserver에 로그인합니다:[이메일 보호됨]:/cvsroot/bluetooth-alsa co btsco 6) 이제 컴파일 및 설치 중입니다.

i) btsco 디렉토리로 이동

ii) ./bootstrap 문제: 오류/경고: 라이브러리 설치 libbsdl1.2-dev에서 "AM_PATH_SDL" 매크로를 찾을 수 없는 경우

ii) ./configure 질문을 실행하여 부트랩이 구성되면:

bluetooth/bluetooth.h가 누락된 경우 -> libbluetooth-dev 패키지 요구 사항 설치 dbus-1>=0.36이 충족되지 않고 dbus-glib를 찾을 수 없음 -> libdbus-glib-1-dev 설치 iii) make

문제: ./libtool: line 841: X--tag=CXX: 명령을 찾을 수 없으며 더 유사한 오류

이 오류를 해결하려면 libtool-1.5.24 tarball을 다운로드하세요. 추출해서 구성하고 만들어 보세요. 이제 btsco를 다시 구성하고 libtool 디렉터리에서 btsco로 libtool 실행 파일을 복사합니다.

iv) make install v) make mainatiner-clean O/p : btsco가 성공적으로 빌드되었으며 /usr/local/bin에서 찾을 수 있습니다.

7) 커널 모듈 빌드

i) CD /usr/src/btsco/커널

ii) 만들다

질문: 많은 오류가 발생한다고 가정합니다. btsco.can을 열고 각 오류를 단계별로 살펴보세요.

1 오류 sound/driver.h를 찾을 수 없습니다 bla bla -> btsco.c 파일에 이 내용을 주석 처리합니다. 2 주석 #include는 이제 더 이상 사용되지 않으므로 3) 추가

#include<linux/smp.h> #include<linux/muxtex.h> 4) DEFINE_MUTEX(os_mutex);

5) snd_assert는 더 이상 사용되지 않으므로 uit를 if 문 예시로 교체하세요.

if( bt_sco->play == NULL) {

6) kill_proc(역시 더 이상 사용되지 않음) 링크를 net..tahnks에서 해당 사용자에게 복사한 다음 함수로 교체합니다.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; /* 기본 반환 값/구조 작업 구조p; 구조체 ​​태스크 구조체* t = struct pid* rcu_read_lock() p = &init_task;/ do { if (p->pid == pid) { /pid(tgid 아님)가 일치합니까?/t=p;
} p = next_task(p) /
"이것은 당신이 찾고 있는 임무가 아닙니다"/ } 동안(p != &init_task) /초기화로 돌아갈 때 중지 */ if (t != NULL) { pspid = t->pids[PIDTYPE_PID].pid; if (pspid!= NULL) error = kill_pid(pspid, sig, 1); ;return error; 그러면 kill_proc 대신에 다음과 같아야 합니다.

my_kill_proc( bt_sco->thread_pid, SIGINT )
6) 잘못된 long int의 %d를 %lu로 교체

7) lock_kernal을 잠금 해제와 동일한 mutex_lock(&os_mutex)로 대체합니다.

앞으로도 make가 성공하길 바라요

8) make install 9) depmod -e 10 0 make clean

11) 모드프로브 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 -Dplughw:Headset /home/my_home_dir/my_sample_fiile.wav를 실행합니다.

관련 정보