发布
社区首页 >问答首页 >为什么蓝牙不在我的Chromebook (Arch )上工作?

为什么蓝牙不在我的Chromebook (Arch )上工作?
EN

Unix & Linux用户
提问于 2019-02-03 19:06:50
回答 2查看 1.8K关注 0票数 3

我在Chromebook C201上安装了Arch。我一直试图让蓝牙工作不成功,但我不知道问题出在哪里。

dmesg的输出似乎表明系统正在成功地查找和初始化车载蓝牙控制器:

代码语言:javascript
代码运行次数:0
复制
$ dmesg | grep Blue
[    4.058823] Bluetooth: Core ver 2.22
[    4.058865] Bluetooth: HCI device and connection manager initialized
[    4.058873] Bluetooth: HCI socket layer initialized
[    4.058877] Bluetooth: L2CAP socket layer initialized
[    4.058886] Bluetooth: SCO socket layer initialized
[    4.061738] Bluetooth: Generic Bluetooth SDIO driver ver 0.1
[    4.971101] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[    4.971104] Bluetooth: BNEP filters: protocol multicast
[    4.971113] Bluetooth: BNEP socket layer initialized

据我所见,蓝牙所需的内核模块似乎也是在引导时加载的:

代码语言:javascript
代码运行次数:0
复制
$ lsmod | grep ^b
bnep                   20480  2
btsdio                 16384  0
bluetooth             352256  9 btsdio,bnep

/sys/class/bluetooth中,我有以下内容:

代码语言:javascript
代码运行次数:0
复制
$ ls /sys/class/bluetooth
hci0

看起来好像有某种蓝牙设备在那里。

我已经安装了bluezbluez-utils包,并且启用了蓝牙,我已经确认它正在运行:

代码语言:javascript
代码运行次数:0
复制
$ systemctl status bluetooth.service
● bluetooth.service - Bluetooth service
   Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; vendor preset:>
   Active: active (running) since Sun 2019-02-03 07:22:15 EST; 6h ago
     Docs: man:bluetoothd(8)
 Main PID: 324 (bluetoothd)
   Status: "Running"
    Tasks: 1 (limit: 4915)
   Memory: 2.4M
   CGroup: /system.slice/bluetooth.service
           └─324 /usr/lib/bluetooth/bluetoothd

我还检查了蓝牙控制器没有被rfkill阻止:

代码语言:javascript
代码运行次数:0
复制
$ rfkill list
0: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no
1: hci0: Bluetooth
    Soft blocked: no
    Hard blocked: no

但是,如果我尝试运行bluetoothctl (或blueman),就无法找到蓝牙适配器:

代码语言:javascript
代码运行次数:0
复制
$ bluetoothctl
Agent registered
[bluetooth]# list
[bluetooth]#

我想不出还有什么可以尝试的。我遗漏了什么吗?

编辑:

给出的唯一答案并没有解决这个问题,而且似乎对这个问题几乎没有什么反应,尽管从赏金那里获得了一些额外的能见度。那么,我是否应该推断,应该存在的一切似乎都是正确的呢?这是否意味着它更有可能是一个bug,也许在bluez或内核模块中?

EN

回答 2

Unix & Linux用户

发布于 2019-09-09 17:55:08

在C201上检测到的与SDIO连接的蓝牙模块是诱饵。您不应该在C201上使用C201驱动程序,实际上,我建议在C201上完全禁用或黑名单这个模块,这样您就不必处理在内核中注册的功能失调的主机控制器了。

BCM4354蓝牙模块通过UART连接,使用hci-uartbtbcm驱动程序访问。确保在hci-uart驱动程序(CONFIG_BT_HCIUART_BCM=y)中启用了broadcom支持。这些驱动程序需要额外的启动步骤才能将设备与蓝牙子系统连接起来。你可以跑,例如,

代码语言:javascript
代码运行次数:0
复制
# btattach -S 3000000 -B /dev/ttyS0 -p bcm
Attaching Primary controller to /dev/ttyS0
Switched line discipline from 0 to 15
Device index 0 attached

那么你应该看到设备注册了。这个模块需要专有的固件来操作。我从预装的OS映像中提取了文件BCM4354_003.001.012.0358.0746.hcd,并将其保存到/lib/firmware/brcm/BCM4354.hcd,以便内核找到它。

在进一步的检查,波德率选项的btattach似乎并没有实际做任何事情,因此这是结束与蓝牙控制器连接在115 which,这是有点慢的一面。正确的方法似乎是将控制器添加到设备树中。因此,我在Linux5.2中将下面的修补程序应用到了devicetree源代码中,并且它的工作速度比3 3Mbaud快得多(另外,您不再运行btattach,所有东西在启动时都会自动注册)。

必须启用CONFIG_SERIAL_DEV_CTRL_TTYPORT=y才能使serdev devicetree特性工作。

代码语言:javascript
代码运行次数:0
复制
diff --git a/arch/arm/boot/dts/rk3288-veyron.dtsi b/arch/arm/boot/dts/rk3288-veyron.dtsi
index 1252522392c7..36000dbb8dda 100644
--- a/arch/arm/boot/dts/rk3288-veyron.dtsi
+++ b/arch/arm/boot/dts/rk3288-veyron.dtsi
@@ -57,7 +57,7 @@
        clocks = <&rk808 RK808_CLKOUT1>;
        clock-names = "ext_clock";
        pinctrl-names = "default";
-       pinctrl-0 = <&bt_enable_l>, <&wifi_enable_h>;
+       pinctrl-0 = <&wifi_enable_h>;

        /*
         * Depending on the actual card populated GPIO4 D4 and D5
@@ -71,8 +71,7 @@
         * - BT_I2S_WS_BT_RFDISABLE_L
         * - No connect
         */
-       reset-gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>,
-                 <&gpio4 RK_PD5 GPIO_ACTIVE_LOW>;
+       reset-gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>;
    };

    vcc_5v: vcc-5v {
@@ -402,6 +401,16 @@
    /* Pins don't include flow control by default; add that in */
    pinctrl-names = "default";
    pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
+
+   bluetooth {
+       compatible = "brcm,bcm43438-bt";
+       max-speed = <3000000>;
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&bt_enable_l>;
+
+       shutdown-gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_HIGH>;
+   };
 };

 &uart1 {
票数 2
EN

Unix & Linux用户

发布于 2019-02-06 01:22:58

如果您的bluez版本在5.50-6之前,那么一个已知的问题是:https://bugs.archlinux.org/task/61386

5.50-6正在这里工作,巧合的是,英特尔(Intel)的Chromebook。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/498473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档