蓝牙 - btusb - 如何用更新的模块版本替换模块版本

蓝牙 - btusb - 如何用更新的模块版本替换模块版本

我已经预编译了内核 3.16.7,其中包含 btusb v0.6 模块;我想用位于内核 4.0 中的 btusb v0.7 替换当前的 btusb v0.6;所以我的问题是如何:

  • 从内核 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)

输入后:

须藤 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,因此存储库标头不兼容或类似要求我升级; 那么有没有办法安装与我的内核构建版本兼容的标头?

ps我对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

此蓝牙设备需要固件

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

相关内容