当我使用 rfkill 解锁我的 Intel 7260 蓝牙设备时,是什么原因导致它断开连接?

当我使用 rfkill 解锁我的 Intel 7260 蓝牙设备时,是什么原因导致它断开连接?

解决方案:问题似乎是蓝牙模块无法与 Linux 中的 xHCI 很好地配合使用。BIOS 设置中有一个标记为“XHCI PRE-BOOT MODE”的设置,必须将其设置为“Disabled”。如果没有,Linux 会将蓝牙模块视为连接到 xHCI 总线而不是 EHCI 总线,从而导致通信错误。 但是,此修复将禁用您系统上的 USB 3.0。目前我还没有更好的解决方案,但至少这个可行。

我有一台新的 ASUS UX301LA 笔记本电脑,运行的是 Ubuntu Gnome 13.10 (Saucy)。内核似乎在启动时知道笔记本电脑的蓝牙设备,但每当我使用 rfkill 解锁蓝牙时,它就会消失。例如:

$ sudo rfkill block bluetooth
$ dmesg | tail -5
[ 2024.876537] usb 2-4: new full-speed USB device number 8 using xhci_hcd
[ 2024.894043] usb 2-4: New USB device found, idVendor=8087, idProduct=07dc
[ 2024.894053] usb 2-4: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 2024.908190] Bluetooth: hci0: read Intel version: 370710018002030d00
[ 2024.908271] Bluetooth: hci0: Intel Bluetooth firmware file: intel/ibt-hw-37.7.10-fw-1.80.2.3.d.bseq
[ 2025.057051] Bluetooth: hci0: Intel Bluetooth firmware patch completed and activated

$ sudo rfkill list
0: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no
1: asus-wlan: Wireless LAN
    Soft blocked: no
    Hard blocked: no
2: asus-bluetooth: Bluetooth
    Soft blocked: yes
    Hard blocked: no
3: hci0: Bluetooth
    Soft blocked: yes
    Hard blocked: no

$ sudo hciconfig -a
hci0:   Type: BR/EDR  Bus: USB
    BD Address: XX:XX:XX:XX:XX:XX  ACL MTU: 1021:5  SCO MTU: 96:5
    DOWN 
    RX bytes:568 acl:0 sco:0 events:29 errors:0
    TX bytes:390 acl:0 sco:0 commands:29 errors:0
    Features: 0xff 0xfe 0x0f 0xfe 0xdb 0xff 0x7b 0x87
    Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
    Link policy: RSWITCH HOLD SNIFF 
    Link mode: SLAVE ACCEPT 

$ sudo rfkill unblock bluetooth
$ dmesg | tail -1
[ 2391.749122] usb 2-4: USB disconnect, device number 8

$ sudo rfkill list
0: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no
1: asus-wlan: Wireless LAN
    Soft blocked: no
    Hard blocked: no
2: asus-bluetooth: Bluetooth
    Soft blocked: no
    Hard blocked: no

$ sudo hciconfig -a
[no output]

编辑:蓝牙设备显示为 Intel 7260 无线 USB 设备,ID 为 8087:07dc。我发现的唯一可能相关的信息是一个已发布修复程序的错误,Launchpad 上提到了这一点:支持英特尔 7260 蓝牙 [8087:07dc]

编辑:我从英特尔网站将固件更新为新的 22.1.7.0 版本(Saucy 附带 22.0.7.0),但出现了同样的问题。

编辑:进一步挖掘日志显示,当我运行解除阻止命令时,蓝牙 USB 设备已完全断开连接:

$ lsusb -d 8087:07dc
Bus 001 Device 007: ID 8087:07dc Intel Corp. 
$ rfkill unblock bluetooth
$ lsusb -d 8087:07dc
[no output]
$ dmesg | tail -1
[  438.284647] usb 1-4: USB disconnect, device number 7

编辑:将 iwlwifi 驱动程序从 3.13 内核更新到(较新的)反向移植版本无济于事。驱动程序的当前版本:

$ modinfo iwlwifi
filename:       /lib/modules/3.11.0-15-generic/updates/drivers/net/wireless/iwlwifi/iwlwifi.ko
version:        backported from Linux (v3.13-rc8-0-g7e22e91) using backports v3.13-rc8-1-0-gae71bd3
license:        GPL
author:         Copyright(c) 2003-2013 Intel Corporation <[email protected]>
version:        in-tree:d
description:    Intel(R) Wireless WiFi driver for Linux
firmware:       iwlwifi-100-5.ucode
firmware:       iwlwifi-1000-5.ucode
firmware:       iwlwifi-135-6.ucode
firmware:       iwlwifi-105-6.ucode
firmware:       iwlwifi-2030-6.ucode
firmware:       iwlwifi-2000-6.ucode
firmware:       iwlwifi-5150-2.ucode
firmware:       iwlwifi-5000-5.ucode
firmware:       iwlwifi-6000g2b-6.ucode
firmware:       iwlwifi-6000g2a-5.ucode
firmware:       iwlwifi-6050-5.ucode
firmware:       iwlwifi-6000-4.ucode
firmware:       iwlwifi-3160-7.ucode
firmware:       iwlwifi-7260-7.ucode
srcversion:     F6C7F0E202757B474065F3B
alias:          pci:v00008086d0000095Asv*sd00005490bc*sc*i*
[... trimmed several "alias" lines ...]
alias:          pci:v00008086d00004232sv*sd00001201bc*sc*i*
depends:        compat,cfg80211
vermagic:       3.11.0-15-generic SMP mod_unload modversions 
parm:           debug:debug output mask (uint)
parm:           swcrypto:using crypto in software (default 0 [hardware]) (int)
parm:           11n_disable:disable 11n functionality, bitmap: 1: full, 2: agg TX, 4: agg RX (uint)
parm:           amsdu_size_8K:enable 8K amsdu size (default 0) (int)
parm:           fw_restart:restart firmware in case of error (default true) (bool)
parm:           antenna_coupling:specify antenna coupling in dB (defualt: 0 dB) (int)
parm:           wd_disable:Disable stuck queue watchdog timer 0=system default, 1=disable, 2=enable (default: 0) (int)
parm:           nvm_file:NVM file name (charp)
parm:           bt_coex_active:enable wifi/bt co-exist (default: enable) (bool)
parm:           led_mode:0=system default, 1=On(RF On)/Off(RF Off), 2=blinking, 3=Off (default: 0) (int)
parm:           power_save:enable WiFi power management (default: disable) (bool)
parm:           power_level:default power save level (range from 1 - 5, default: 1) (int)

编辑:正如 Bernhard 在回复中所建议的那样,我尝试使用命令强制打开适配器echo "on" > /sys/class/bluetooth/hci0/device/../power/control。虽然通过 rfkill 阻止了蓝牙,但这似乎没有效果,并hciconfig hci0 up响应说设备仍然被阻止。当使用 rfkill 解除蓝牙阻止时,/sys/class/bluetooth/hci0不存在,因此手动打开它的尝试失败。我/etc/rc.local也尝试将其添加到,与在控制台上以 root 身份运行命令相比,没有明显的区别。

编辑:我给英特尔 WiFi 开发人员发了一封电子邮件,他们给出了非常有帮助的回复:

Hello,

I am afraid you are asking the wrong people. We are WiFi people and not Bluetooth.

Thanks,
(name removed)

我将尝试自己破解蓝牙驱动程序,看看是否可以从中获取更多调试信息。

有人能给我一些建议吗?有人遇到过这种情况吗?有使用华硕 UX301LA 的 Ubuntu 用户能给我一些建议吗?

请告诉我其他可能有用的信息,我会发布。我只是不想让这篇第一篇帖子充斥着无用的数据。

答案1

我也有 UX301LA,现在运行的是 14.10。我也遇到了同样的问题,但找到了一种解决方法,虽然不是很理想,但目前有效。

基本上,asus-nb-wmi 模块似乎与该硬件不完全兼容。虽然实际问题似乎存在得更深,但阻止该模块会阻止创建与 WiFi 和蓝牙相对应的新 rfkill 条目,然后启动后的默认状态是 WiFi 和蓝牙都正常工作(即使使用 USB 3.0)。F2 开关在 ON 时仍会使蓝牙消失,但在 OFF 时(启动后的默认设置),它不会禁用 WiFi,而蓝牙设备会出现。缺点是当模块被阻止时,Fx 键会停止工作,因为它们也受此模块支持。要实现该效果,只需添加blacklist asus-nb-wmi/etc/modprobe.d/blacklist.conf

更好的解决方案是向上游报告错误,或者暂时更改模块源以禁用处理 wifi/蓝牙,同时仍处理其他 Fx 键。

答案2

我的联想 T440s 也出现了同样的问题。目前我还没有解决方案,但看起来我们受到了内核错误的影响(可以找到关于它的讨论这里)。

添加

echo "on" > /sys/class/bluetooth/hci0/device/../power/control

/etc/rc.local 似乎有点帮助,但与我的蓝牙鼠标的连接仍然不稳定。

答案3

看一下:/usr/share/gnome-bluetooth/pin-code-database.xml

您的鼠标是否存在(使用 OUI 搜索,即“OEM 唯一标识符”,是鼠标 MAC 地址的前 3 个八位字节。例如,如果您的鼠标 MAC 地址是 AA:BB:CC:DD:EE:FF,那么 OUI 就是“AA:BB:CC”)?

如果它已经存在,请确保它看起来像:

(请注意结尾的冒号:“AA:BB:CC**”——不要遗漏它)。

如果尚不存在,请添加它。

另外,不确定这是否相关,但英特尔 7260 WiFi 有一个众所周知的问题(频繁断线)。要解决 WiFi 问题,我发现唯一有效的方法是禁用 802.11n:

  1. 打开终端。
  2. sudo vi /etc/modprobe.d/wifi-disable11n.conf
  3. 添加此行:options iwlwifi 11n_disable=1
  4. 保存并重新启动。

我只是在黑暗中拍摄一张标签,但它值得一试(IMHO)。

答案4

我通过安装新固件解决了我的问题 http://ftp.de.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-iwlwifi_0.40_all.deb

使用 acer s7 392、intel wireless 7260 rev6b、kubuntu 13.10、内核 3.11.0-15-generic

相关内容