블루투스 - btusb - 모듈 버전을 최신 모듈 버전으로 교체하는 방법

블루투스 - btusb - 모듈 버전을 최신 모듈 버전으로 교체하는 방법

btusb v0.6 모듈이 포함된 커널 3.16.7을 미리 컴파일했습니다. 현재 btusb v0.6을 커널 4.0에 있는 btusb v0.7로 바꾸고 싶습니다. 그래서 제 질문은 다음과 같습니다.

  • 커널 3.16.7에서 현재 btusb 0.6을 제거합니다.
  • 커널 4.0에서 btusb 0.7 추출(컴파일)
  • 컴파일된 btusb 7.0을 커널 3.16.7에 삽입합니다.

편집하다:

lsusb 출력:

Bus 001 Device 004: ID 04ca:2006 Lite-On Technology Corp.

Broadcom 장치 04ca는 상당히 새로운 것이므로 이것이 주요 문제일 수 있습니다.

내가 아는 한 btusb 모듈 버전 >= 0.7이 필요하므로 현재 미리 컴파일된 커널에는 btusb 0.6이 있으므로 일종의 모듈 교체가 필요합니다.전체 커널 소스 컴파일을 다루고 싶지는 않지만 btusb를 이미 미리 컴파일된 커널 v3.16.7에 기본적으로 통합하고 싶습니다.

편집하다:

내 $usb-devices 출력은 다음과 같습니다.

T:  Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 11 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=04ca ProdID=2006 Rev=01.12
S:  Manufacturer=Broadcom Corp
S:  Product=BCM43142A0
S:  SerialNumber=*******
C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I:  If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

입력 후:

sudo modprobe btusb

그리고...

sudo echo "04ca 2006" sudo 티 /sys/bus/usb/drivers/btusb/new_id

btusb 드라이버가 $usb-devices로 활성화된 것을 볼 수 있습니다.

T:  Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#=  4 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=04ca ProdID=2006 Rev=01.12
S:  Manufacturer=Broadcom Corp
S:  Product=BCM43142A0
S:  SerialNumber=******
C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I:  If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

...

편집하다

Linux-headers를 다운로드하여 설치하려고 합니다.

sudo pacman -S linux-headers
[sudo] password for ...: 
:: There are 8 providers available for linux-headers:
:: Repository core
   1) linux310-headers  2) linux312-headers  3) linux313-headers
   4) linux314-headers  5) linux316-headers  6) linux318-headers
   7) linux319-headers  8) linux40-headers

...하지만 내가 아는 한, linux316-headers는 3.16.7.11-1-Arch의 헤더를 설치합니다. 설치 후 /lib/modules/3.16.7.11- 1-Arch 폴더를 만들었기 때문에 명확하게 볼 수 있습니다. (현재 커널이 3.16.7.3-1로 실행 중이므로 저장소 헤더가 호환되지 않거나 유사하여 업그레이드가 필요합니다. 그렇다면 내 커널 빌드와 호환되는 헤더를 설치할 수 있는 방법이 있습니까?

p.s. 저는 Linux를 처음 접했으므로 관련 튜토리얼 링크를 연결하고 자세한 단계를 알려주십시오.

감사해요

pps 운영 체제: Linux Arch x64

답변1

소스 코드를 다운로드할 수 있어야 합니다.

wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.7.tar.xz

그럼 추출해야지

tar xpvf linux-3.16.7.tar.xz

그런 다음 올바른 디렉토리로 CD를 이동하십시오.

cd linux-3.16.7/drivers/bluetooth

당신이 결과를 게시할 때쯤에는 lsusb이 답변을 완료할 수 있을 것입니다.

gedit btusb

116번 줄 끝으로 이동하여 { USB_VENDOR_AND_INTERFACE_INFO(0x0489, 0xff, 0x01, 0x01) }, Enter를 두 번 누른 다음 Tab을 한 번 눌러 붙여넣습니다.

/* Lite-On Technology - Broadcom based */
    { USB_VENDOR_AND_INTERFACE_INFO(0x04ca, 0xff, 0x01, 0x01),
      .driver_info = BTUSB_BCM_PATCHRAM },

간격과 형식을 확인하여 다른 항목과 일치하는지 확인한 다음 gedit를 저장하고 종료하십시오.

그런 다음 일부 구성 파일을 해당 디렉터리에 복사할 수 있습니다.

zcat /proc/config.gz > .config

이제 다음 명령을 사용하여 블루투스 모듈을 만들 수 있습니다.

make -C /lib/modules/$(uname -r)/build M=$PWD modules

컴파일이 완료된 후 btusb.ko를 커널 디렉터리에 복사할 수 있습니다.

sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth/
cd /usr/lib/modules/$(uname -r)/kernel/drivers/bluetooth/
gzip btusb.ko

이 Bluetooth 장치에는 펌웨어가 필요합니다

cd ~
wget https://www.dropbox.com/s/xbmm9vfg2fby2zn/fw-04ca_2006.hcd
sudo cp fw-04ca_2006.hcd /lib/firmware/

그런 다음 btusb를 제거하고 로드하여 새 버전이 로드되도록 할 수 있습니다.

sudo modprobe -r btusb
sudo modprobe btusb

관련 정보