Linux

藍牙 - btusb - 如何用較新的模組版本替換模組版本

  • May 24, 2015

我已經預編譯了具有 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

和…

須藤迴聲“04ca 2006”| sudo tee /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 執行,因此 repo 標頭不兼容或類似要求我upgrade; 那麼有沒有辦法安裝與我的核心建構版本兼容的標頭檔?

ps 我對linux很陌生,所以請連結一些相關的教程連結並給出詳細的步驟

謝謝

pps 作業系統:Linux Arch x64

您應該能夠下載原始碼

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

此藍牙設備需要韌體

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

引用自:https://unix.stackexchange.com/questions/199350