edge
私はHP Stream 7 5709 タブレット (tl;dr: Bay Trail、Intel Atom Z3735G システムオンチップ) にAlpine Linux (将来 3.15) x86 をインストールしています。このタブレットにはオンボードのrtl8723bs
Wi-Fi/Bluetooth が搭載されており、既に Wi-Fi に使用しており、正常に動作しています。
sl7alp:~$ uname -a
Linux sl7alp 5.10.72-1-lts #2-Alpine SMP Sat, 16 Oct 2021 06:04:30 +0000 i686 Linux
Wi-Fi の場合、その正確なファームウェア ファイルは/lib/firmware/rtlwifi/rtl8723bs_nic.bin
配布物にありませんでしたが、存在するバージョンと同じなので、rtl8723bu
そのファイルをシンボリックリンクするだけで、標準ドライバーで正常に動作しました。他に必要なものはありませんでした。
しかし、Bluetoothはどうでしょうか?
aroundの基本的な説明によるとrtl8723bs
、Wi-Fi は SDIO を使用してシステムに接続しますが、Bluetooth は UART 経由で接続します。これは、このシステムの Windows のデバイス マネージャー ツリーに表示される内容と一致しています。接続されている UART は、Atom プロセッサに組み込まれた「HS-UART」の 1 つ (8086:0F0A) です。
Edge の 5.10 カーネルのデフォルト モジュールの他に、関連すると思われる追加機能がオンになってビルドされ、インストールされた適切な追加カーネル モジュールがあります。
CONFIG_SERIAL_DEV_BUS=m
CONFIG_BT_HCIUART_RTL=y
CONFIG_BT_HCIUART_3WIRE=y
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
その後、起動すると関連するモジュールが自動的にロードされます。
sl7alp:~$ lsmod | grep serdev
serdev 20480 1 hci_uart
sl7alp:~$ lsmod | grep hci_uart
hci_uart 49152 0
btrtl 16384 1 hci_uart
btintel 24576 1 hci_uart
serdev 20480 1 hci_uart
bluetooth 356352 3 btrtl,hci_uart,btintel
dmesg
関連する HS-UART の出力を確認できます。
[ 1.062751] 80860F0A:00: ttyS1 at MMIO 0x50919000 (irq = 16, base_baud = 2764800) is a 16550A
[ 1.079576] 80860F0A:01: ttyS2 at MMIO 0x5091b000 (irq = 17, base_baud = 2764800) is a 16550A
ただし、これによって Bluetooth デバイスが自動的に使用可能になるわけではなく、bluetoothctl
コントローラーがリストされず、rfkill
何も表示されません。
私は(一見古い~4.xカーネル時代の)サードパーティのリポジトリを見つけましたhttps://github.com/lwfinger/rtl8723bs_bt残りのステップは予想通りで、UART を介して直接何らかの初期化ハンドシェイクを実行し、関連する Bluetooth ドライバー インフラストラクチャを起動して接続し、Bluetooth を処理するように指示しますが、そのリポジトリを使用すると./start_bt.sh
、エラーが発生します。
Using device /dev/ttyS1 for Bluetooth
Realtek Bluetooth init uart with init speed:115200, final_speed:115200, type:HCI UART H5
Realtek Bluetooth :Realtek hciattach version 2.5
Realtek Bluetooth :3-wire sync pattern resend : 1, len: 8
[...]
Realtek Bluetooth :3-wire sync pattern resend : 40, len: 8
Realtek Bluetooth ERROR: H5 sync timed out
そして、それよりもうまく機能するコマンドラインbtattach
やバニラを作成することはできません。hciattach
bluez-deprecated
さらに調査:
下の ACPI ベースのデバイス列挙には、最初のベイ トレイルの内部 UART の下に/sys/devices
Bluetooth デバイスが として含まれていることがわかります。OBDA8723
80860F0A:00
ドライバーh5
( bluetooth/hci_h5.c
) は、 の 1 つのエントリを含む ACPI テーブルを提供しますOBDA8723
。システムが自動的にモジュールをロードすることを決定するという事実から判断するとbtrtl
、少なくともそれが有効になるために必要な場所に多少は到達していると予想されます。
ただし、 のpr_info()
周囲にいくつかの余分な を散りばめてみると、が最初にすべての serdev ドライバーをロードするときにhci_h5
ドライバーの main が実行される一方で、ACPI テーブルで渡される関数ポインターの構造体で参照される は決して実行されないことがわかります。h5_init()
Bluetooth
h5_btrtl_setup()
しまった:
そして実際のところ、serdev
の関数はserdev_drv_probe()
実行されません。なぜでしょうか?
同様の問題を解決した報告によると、 が必要ですSERIAL_DEV_CTRL_TTYPORT
。私はすでにこれを有効にしていましたが、
からdrivers/tty/serdev/Kconfig
:
config SERIAL_DEV_CTRL_TTYPORT
[...]
depends on SERIAL_DEV_BUS != m
つまり、 を使用したカーネルを構築するには、がモジュールとして有効化されるだけでなく、実際にカーネルに組み込まれているSERIAL_DEV_CTRL_TTYPORT
必要があります( )。SERIAL_DEV_BUS
=y
答え1
ACPI を使用して列挙でき、ドライバーが存在する HS-UART デバイスは、 でビルドされた 5.10 カーネルで自動的にインスタンス化されますCONFIG_SERIAL_DEV_CTRL_TTYPORT
。これにより、追加の接続手順なしでこの Bluetooth コントローラーを自動的にセットアップできます。古いバージョン用に GitHub で配布されているような追加のユーティリティは必要ありません。ただし、必要なカーネル構成 ( が必要) が必要ですCONFIG_SERIAL_DEV_CTRL_TTYPORT
。つまりCONFIG_SERIAL_DEV_BUS=y
、serdev
モジュールとしてビルドされるだけでなく、カーネルに組み込まれている必要があります。
すべてを備えた新しいカーネルパッケージをインストールしたら、
CONFIG_SERIAL_DEV_BUS=y
CONFIG_BT_HCIUART_RTL=y
CONFIG_BT_HCIUART_3WIRE=y
CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
システムはすぐにコントローラーを検出しました。
[ 5.809856] Bluetooth: hci0: RTL: examining hci_ver=06 hci_rev=000b lmp_ver=06 lmp_subver=8723
[ 5.814460] Bluetooth: hci0: RTL: rom_version status=0 version=1
[ 5.814467] Bluetooth: hci0: RTL: loading rtl_bt/rtl8723bs_fw.bin
[ 5.815894] Bluetooth: hci0: RTL: loading rtl_bt/rtl8723bs_config-OBDA8723.bin
[ 5.838004] Bluetooth: hci0: RTL: cfg_sz 64, total sz 24508
[ 6.720942] Bluetooth: hci0: RTL: fw version 0x365d462e
ではデフォルトで有効になっておりrfkill
、 がbluetooth
提供するサービスを起動してbluez
、bluetoothctl
Bluetooth デバイスの検索と設定に使用できるようになりました。
アップデート:
以降のカーネルでは、出力に示されているように、起動時に Bluetooth コントローラが最初に表示されますdmesg
が、その後は表示されなくなり、 にはそれ以上の出力は表示されませんが、を開いている場合はdmesg
Bluetooth デバイスとコントローラが消えているのを確認できます。bluetoothctl
[DEL] Device E8:06:88:xx:xx:xx rakslice’s keyboard
[DEL] Controller 08:D8:33:xx:xx:xx BlueZ 5.62 [default]
これは、Bluetooth の有効化と省電力機能の安全なデフォルト構成の組み合わせであるようです。
階層を通じてコントローラーの電源を明示的に有効にすると/sys/devices
、コントローラーが次のように再び表示されdmesg
ますbluetoothctl
。
sudo bash -c 'echo on > /sys/devices/platform/80860F0A:00/serial0/serial0-0/power/control'
しかし、まだ正常に機能しません:
[bluetooth]# connect E8:06:88:xx:xx:xx
Attempting to connect to E8:06:88:xx:xx:xx
Failed to connect: org.bluez.Error.NotReady br-connection-adapter-not-powered
エラー メッセージが独特であり、それ自体で解決可能な問題であるため、この問題を別の質問に移動しました。 `br-connection-adapter-not-powered` で失敗する `bluez` 接続試行を解決する方法
tl;dr:で編集/etc/bluetooth/main.conf
および設定し、 を再起動すると、オフラインだったコントローラはに再び表示され、オンのままになります。AutoEnable=true
[Policy]
bluez
dmesg