edge
Wi-Fi / Bluetoothを搭載したHP Stream 7 5709タブレット(TL:dr:Bay Trail、Intel Atom Z3735G System-on-Chip)にAlpine Linux(将来3.15)x86がインストールされています。rtl8723bs
Wi-Fiに使ってきました。 -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はどうですか?
基本的な説明によると、rtl8723bs
Wi-FiはSDIOを使用してシステムに接続されますが、BluetoothはUARTを介して接続されます。これは、このシステムのWindowsデバイスマネージャツリーで表示できるものと一致します。 「HS-UART」プロセッサ(8086:0F0A)を内蔵したAtomプロセッサ。
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ベースのデバイス列挙の最初のベイパスInternal UARTの下に/sys/devices
Bluetoothデバイスがあることを確認しました。OBDA8723
80860F0A:00
ドライバh5
(bluetooth/hci_h5.c
)はエントリを含むACPIテーブルを提供し、システムが自動的にモジュールをロードすることを決定したとOBDA8723
判断した場合、btrtl
少なくともある程度は適用が必要な場所に達すると予想されます。
ただし、周辺にいくつかの追加pr_info()
エントリを適用すると、すべてのserdevドライバが最初にロードされたときにドライバのベースが実行されている間、ACPIテーブルで渡された関数ポインタ構造で参照されるエントリは実行されないことがhci_h5
わかります。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デバイスを見つけて設定できます。bluetooth
bluez
bluetoothctl
修正する:
以降のカーネルでは、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