Chromebook(Arch Linux ARM)でBluetoothが機能しないのはなぜですか?

Chromebook(Arch Linux ARM)でBluetoothが機能しないのはなぜですか?

Chromebook C201にArch Linux ARMをインストールしました。私はBluetoothを動作させようとしましたが、成功しませんでしたが、問題が何であるかわかりません。

出力はdmesg、システムがオンボードBluetoothコントローラを正常に検索して初期化していることを示すようです。

$ 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

私が知っている限り、Bluetoothに必要なカーネルモジュールは起動時にもロードされるようです。

$ lsmod | grep ^b
bnep                   20480  2
btsdio                 16384  0
bluetooth             352256  9 btsdio,bnep

私は/sys/class/bluetooth以下を持っています:

$ ls /sys/class/bluetooth
hci0

それで、一種のBluetoothデバイスがあるようです。

bluezそして、パッケージがインストールされbluez-utils、Bluetoothが有効になっていて実行中であることを確認しました。

$ 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

また、Bluetoothコントローラがrfkillによってブロックされていないことを確認しました。

$ rfkill list
0: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no
1: hci0: Bluetooth
    Soft blocked: no
    Hard blocked: no

bluetoothctlただし、(または)を実行しようとすると、Bluetoothアダプタが見つかりませんblueman

$ bluetoothctl
Agent registered
[bluetooth]# list
[bluetooth]#

試してみる他のことは思い出されません。何か抜けましたか?


編集する:

与えられた唯一の答えは問題を解決しておらず、賞金からより多くの可視性を得たにもかかわらず、質問に対する答えがほとんどないようです。それでは、そこになければならないすべてが正しく位置づけられているようだと推論すべきでしょうか?これはその可能性が高いことを意味しますか?抜け穴、おそらくbluezやカーネルモジュールにありますか?

答え1

C201で検出されたSDIO接続Bluetoothモジュールは餌です。 C201ではこのドライバを使用しないでくださいbtsdio。実際にカーネルに登録されている正しく機能しないホストコントローラを処理する必要がないように、C201でモジュールを完全に無効にするか、ブラックリストに追加することをお勧めします。

C201のBCM4354 BluetoothモジュールはUARTを介して接続され、ドライバを使用してアクセスできhci-uartますbtbcmhci-uartドライバ()でBroadcomサポートが有効になっていることを確認してくださいCONFIG_BT_HCIUART_BCM=y。これらのドライバは、デバイスをBluetoothサブシステムに接続するために追加の起動手順が必要です。たとえば、実行できます。

# 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

これにより、登録されたデバイスが表示されます。このモジュールを動作させるには、独自のファームウェアが必要です。BCM4354_003.001.012.0358.0746.hcdプリインストールされたOSイメージからファイルをインポートし、カーネルが見つかるように保存しました/lib/firmware/brcm/BCM4354.hcd

さらなる調査によると、btattachのボーレートオプションは実際には何もしないように見えるため、Bluetoothコントローラはわずかに遅い115kbaudに接続されています。正しい方法は、デバイスツリーにコントローラを追加するようです。そのため、Linux 5.2のデバイスツリーソースコードに次のパッチを適用し、すべてがより利用可能な3Mbaud速度で実行されました(ボーナスでbtattachを実行しなくなり、すべてが起動時に自動的に登録されます)。

CONFIG_SERIAL_DEV_CTRL_TTYPORT=yこの機能を機能させるには、serdevデバイスツリー機能を有効にする必要があります。

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

bluezのバージョンが5.50-6より前の場合、既知の問題があります。 https://bugs.archlinux.org/task/61386

偶然にも、5.50-6は(Intel)Chromebookで実行されています。

関連情報