AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1208296
Accepted
Gryu
Gryu
Asked: 2020-02-06 07:52:09 +0800 CST2020-02-06 07:52:09 +0800 CST 2020-02-06 07:52:09 +0800 CST

蓝牙适配器配置问题 (ID 0a12:0001)

  • 772

我的蓝牙适配器在 Ubuntu 中不起作用。

$ lsusb | grep tooth
Bus 002 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

$ hciconfig
hci0:   Type: Primary  Bus: USB
    BD Address: 33:03:30:09:74:B4  ACL MTU: 360:4  SCO MTU: 0:0
    DOWN 
    RX bytes:1106 acl:0 sco:0 events:56 errors:0
    TX bytes:736 acl:0 sco:0 commands:60 errors:0

$ sudo hciconfig hci0 up
Can't init device hci0: Operation not supported (95)

$ bluetoothctl
Agent registered
[bluetooth]# power on
No default controller available

$ hcitool dev
Devices:
$

$ rfkill

ID TYPE      DEVICE      SOFT      HARD
 0 bluetooth hci0   unblocked unblocked
 1 wlan      phy0   unblocked unblocked

尝试了最后两个动作:

Bluetake
在 Ubuntu v10.04 ~ 11.04 中开箱即用,但在 11.10 中停止可靠工作,频繁的内核恐慌和其他一般不好的东西,[错误:901770]

$ lsusb <br>Bus 007 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

$ hciconfig -a hci0 <br>Manufacturer: Cambridge Silicon Radio (10)

可能需要与 Belkin 相同的修复:添加blacklist hci_usb到 /etc/modprobe.d/blacklist.conf,然后添加hci_usb reset=1到 /etc/modules

也试过

  • 安装内核 5.5.2 内核。但它无法登录,所以我已经清除它并返回到我的5.3.0-29-generic内核。
  • 做下一个,但它失败了:
    $ make -C /lib/modules/$(uname -r)/build M=$PWD modules
    make: Entering directory '/usr/src/linux-headers-5.3.0-29-generic'
      CC [M]  /home/spacer/kernel/bluetooth/hci_vhci.o
    /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_create_device’:
    /home/spacer/kernel/bluetooth/hci_vhci.c:134:2: warning: dereferencing ‘void *’ pointer
      134 |  *skb_put(skb, 1) = 0xff;
          |  ^~~~~~~~~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c:134:19: error: invalid use of void expression
      134 |  *skb_put(skb, 1) = 0xff;
          |                   ^
    /home/spacer/kernel/bluetooth/hci_vhci.c:135:2: warning: dereferencing ‘void *’ pointer
      135 |  *skb_put(skb, 1) = dev_type;
          |  ^~~~~~~~~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c:135:19: error: invalid use of void expression
      135 |  *skb_put(skb, 1) = dev_type;
          |                   ^
    /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_get_user’:
    /home/spacer/kernel/bluetooth/hci_vhci.c:203:19: error: ‘HCI_BREDR’ undeclared (first use in this function)
      203 |   if (dev_type != HCI_BREDR && dev_type != HCI_AMP)
          |                   ^~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c:203:19: note: each undeclared identifier is reported only once for each function it appears in
    /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_open_timeout’:
    /home/spacer/kernel/bluetooth/hci_vhci.c:307:43: error: ‘HCI_BREDR’ undeclared (first use in this function)
      307 |  vhci_create_device(data, amp ? HCI_AMP : HCI_BREDR);
          |                                           ^~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c: At top level:
    /home/spacer/kernel/bluetooth/hci_vhci.c:352:3: error: ‘const struct file_operations’ has no member named ‘aio_write’
      352 |  .aio_write = vhci_write,
          |   ^~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: error: positional initialization of field in ‘struct’ declared with ‘designated_init’ attribute [-Werror=designated-init]
      352 |  .aio_write = vhci_write,
          |               ^~~~~~~~~~
    /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: note: (near initialization for ‘vhci_fops’)
    /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: error: initialization of ‘ssize_t (*)(struct file *, const char *, size_t,  loff_t *)’ {aka ‘long int (*)(struct file *, const char *, long unsigned int,  long long int *)’} from incompatible pointer type ‘ssize_t (*)(struct kiocb *, const struct iovec *, long unsigned int,  loff_t)’ {aka ‘long int (*)(struct kiocb *, const struct iovec *, long unsigned int,  long long int)’} [-Werror=incompatible-pointer-types]
    /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: note: (near initialization for ‘vhci_fops.write’)
    cc1: some warnings being treated as errors
    make[1]: *** [scripts/Makefile.build:290: /home/spacer/kernel/bluetooth/hci_vhci.o] Error 1
    make: *** [Makefile:1655: _module_/home/spacer/kernel/bluetooth] Error 2
    make: Leaving directory '/usr/src/linux-headers-5.3.0-29-generic'
    
bluetooth 19.10
  • 5 5 个回答
  • 30056 Views

5 个回答

  • Voted
  1. Best Answer
    Sven
    2020-04-01T11:13:38+08:002020-04-01T11:13:38+08:00

    该设备有多个版本具有相同的 USB ID。有些人说这些是假的,但我怀疑这些只是芯片的较新型号。

    让芯片工作需要一些怪癖,并且需要修补负责使这些怪癖能够测试这些新型号的内核代码:

    --- drivers/bluetooth/btusb.c.old   2020-03-31 19:14:11.765239911 +0100
    +++ drivers/bluetooth/btusb.c   2020-03-31 19:22:17.035003199 +0100
    @@ -1643,4 +1643,6 @@
        /* Detect controllers which aren't real CSR ones. */
        if (le16_to_cpu(rp->manufacturer) != 10 ||
    +       le16_to_cpu(rp->lmp_subver) == 0x0811 ||
    +       le16_to_cpu(rp->lmp_subver) == 0x0812 ||
            le16_to_cpu(rp->lmp_subver) == 0x0c5c) {
            /* Clear the reset quirk since this is not an actual
    @@ -3873,5 +3875,5 @@
    
            /* Fake CSR devices with broken commands */
    -       if (bcdDevice <= 0x100 || bcdDevice == 0x134)
    +       if (bcdDevice <= 0x100 || bcdDevice == 0x134 || bcdDevice == 0x8891)
                hdev->setup = btusb_setup_csr;
    

    我不保证这可以解决所有较新型号的问题,并且可能需要额外的测试以包含更多 LMP 子版本和 bcdDevice 编号。但是,以上内容对一些使用较新的蓝牙 4.0 型号的用户和我自己使用蓝牙 5.0 型号的用户确实有效。

    它会打开设备,如下所示:

    # hciconfig
    hci0:   Type: Primary  Bus: USB
        BD Address: 00:1A:7D:DA:71:11  ACL MTU: 679:9  SCO MTU: 48:16
        UP RUNNING 
        RX bytes:56724 acl:29 sco:0 events:7890 errors:0
        TX bytes:4782028 acl:7788 sco:0 commands:84 errors:0
    

    这是使用内核 5.5.13 和 AliExpress 的廉价蓝牙 5.0 加密狗进行测试的,现在它可以让我连接到蓝牙 5.0 耳机。

    顺便说一句,加密狗在 Windows 10 下工作得很好。

    补充:关闭 USB 自动挂起

    USB 端口的自动暂停可能会干扰蓝牙 USB 加密狗。虽然自动挂起有助于节省电量,并且设备应该自行快速唤醒,但如果这会失败并因此降低蓝牙连接性。默认情况下,内核会在 2 秒后挂起 USB 端口。这可以对所有 USB 端口或仅对单个端口禁用,并且蓝牙 USB 驱动程序有一个参数,该参数专门控制 USB 连接的蓝牙加密狗。例如,要查看当前状态:

    # lsusb
    Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 005 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
    Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 004 Device 003: ID 062a:3633 MosArt Semiconductor Corp. Full-Speed Mouse
    Bus 004 Device 002: ID 1b1c:1b39 Corsair Corsair Gaming K65 RGB RAPIDFIRE Keyboard 
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    
    # grep . /sys/bus/usb/devices/[0-9]*/power/control
    /sys/bus/usb/devices/4-1/power/control:on
    /sys/bus/usb/devices/4-2/power/control:on
    /sys/bus/usb/devices/5-5/power/control:auto
    

    此处鼠标和键盘始终处于开机状态,但 CSR 蓝牙 USB 加密狗设置为自动挂起。如果启用了自动挂起并且它造成了麻烦,那么可以通过暂时禁用它来测试它:

    # echo on > /sys/bus/usb/devices/5-5/power/control
    # cat /sys/bus/usb/devices/5-5/power/control
    on
    

    当这有帮助时,应该永久禁用它,有几种方法可以做到这一点:

    • 当您已经在重新编译内核时,最好使用蓝牙 USB 内核模块禁用它,方法是将配置参数CONFIG_BT_HCIBTUSB_AUTOSUSPEND设置为N或在内核配置文件中将其注释掉。这将导致蓝牙 USB 驱动程序默认禁用它找到匹配设备的每个端口的自动挂起,并让所有其他 USB 设备保持原样。

    • 无需重新编译内核并且蓝牙 USB 模块编译到内核中的位置是否需要使用引导参数来执行此操作。对于 GRUB 编辑/etc/default/grub并在内核命令行中附加btusb.enable_autosuspend=n。然后通过运行update-grub并重新启动来更新 grub 配置。

    文件:/etc/default/grub

    ...
    GRUB_CMDLINE_LINUX_DEFAULT="... btusb.enable_autosuspend=n"
    ...
    
    • 在不重新编译内核和可加载蓝牙 USB 模块的情况下,应该在/etc/modprobe.d/ 中创建一个文件来传递参数。然后重新启动,或者拔下加密狗并使用rmmod btusb删除内核模块,然后使用service systemd-modules-load restart 重新启动模块服务,然后再重新插入加密狗。

    文件:/etc/modprobe.d/bluetooth-usb.conf

    options btusb enable_autosuspend=n
    

    补充:启用快速连接设置

    改善蓝牙连接的另一种方法是启用b ​​luetoothd守护程序的FastConnectable设置。该设置可以在/etc/bluetooth/main.conf中找到。

    文件:/etc/bluetooth/main.conf

    ...
    # Permanently enables the Fast Connectable setting for adapters that
    # support it. When enabled other devices can connect faster to us,
    # however the tradeoff is increased power consumptions. This feature
    # will fully work only on kernel version 4.1 and newer. Defaults to
    # 'false'.
    FastConnectable = true
    ...
    
    • 9
  2. Jim MacKenzie
    2020-06-15T07:21:26+08:002020-06-15T07:21:26+08:00

    我有这个加密狗——它已经有好几年了,所以我无法评论它是否是假的,或者带有这个 USB ID 的现代加密狗是否是假的。

    Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
    

    我将它与一台非常旧的 Acer TravelMate 2420 笔记本电脑一起使用(出于必要)使用 Ubuntu 18.04 LTS 的 i386 版本。(截至撰写本文时,当前内核为 4.15.0-106-generic。(无需同情。这只是我放在卧室里偶尔使用的旧备用电脑。)

    蓝牙对我有用,但不是很可靠。我的蓝牙鼠标(Microsoft 蓝牙笔记本鼠标 5000)会经常断开连接。

    几周前,我通过以下更改完全解决了这些问题/etc/default/tlp:

    # Exclude listed devices...
    USB_BLACKLIST="0a12:0001"
    # Bluetooth devices are excluded...
    USB_BLACKLIST_BTUSB=1
    

    (找到适当的行并添加第一行并相应地编辑第二行。)

    很可能我不需要特定的基于 ID 的USB_BLACKLIST命令(我没有测试过),但我认为为了安全起见我会保留它。第二个(USB_BLACKLIST_BTUSB)在我的系统上默认为 0,我怀疑这是要更改的关键配置。

    tlp如果尚未安装,您可能需要专门安装该软件包。重新配置后不要忘记重新启动它。

    我希望这有帮助。

    • 5
  3. Alex Vallo
    2020-02-06T10:38:47+08:002020-02-06T10:38:47+08:00

    我有两个不同的问题0a12:0001 Cambridge Silicon Radio。两者都是 TRENDnet TBW-106UB。我购买了两个新的 USB 蓝牙适配器,从那以后就没有问题了。我在 Ubuntu 18.04 和 19.10 中使用了新的加密狗。

    https://www.amazon.com/gp/product/B07J5WFPXX

    https://www.amazon.com/gp/product/B007Q45EF4

    • 0
  4. Navraj Sandhu
    2022-06-07T19:29:13+08:002022-06-07T19:29:13+08:00

    将内核更新到最新版本对我有用。

    https://www.how2shout.com/linux/how-to-change-default-kernel-in-ubuntu-22-04-20-04-lts/

    • 0
  5. Max
    2022-09-09T10:33:37+08:002022-09-09T10:33:37+08:00

    我的新蓝牙加密狗在 Linux Mint 20.2 和 Kubuntu 中不起作用


    Linux Mint 20.2 中的测试(工作)内核 5.4.0-74-generic

    $ lsusb

    "Bus 003 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)"
    

    $ grep 。/sys/bus/usb/devices/[0-9]*/电源/控制

    /sys/bus/usb/devices/1-1/power/control:auto
    /sys/bus/usb/devices/2-1.4/power/control:on
    /sys/bus/usb/devices/2-1/power/control:auto
    /sys/bus/usb/devices/3-12/power/control:auto
    /sys/bus/usb/devices/3-5/power/control:on
    /sys/bus/usb/devices/3-6/power/control:on
    

    $ hciconfig -a hci0

    hci0:   Type: Primary  Bus: USB
            BD Address: 00:1A:7D:DA:71:13  ACL MTU: 679:8  SCO MTU: 48:16
            DOWN 
            RX bytes:353 acl:0 sco:0 events:11 errors:0
            TX bytes:34 acl:0 sco:0 commands:11 errors:0
            Features: 0xbf 0x3e 0x4d 0xfa 0xdb 0x3d 0x7b 0xc7
            Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
            Link policy: 
            Link mode: SLAVE ACCEPT
    
    • 0

相关问题

  • 哪种蓝牙耳机效果最好?

  • ubuntu无法识别笔记本电脑的内部蓝牙:如何诊断问题?

  • 如何为我的蓝牙手机分配串口?

  • 我可以将我的计算机用作 A2DP 接收器/蓝牙扬声器吗?

  • 如何解决联想笔记本电脑上恢复/电源问题时禁用的蓝牙?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve