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
펌웨어 파일만 심볼릭링크만 했더니 순정 드라이버와 잘 작동하고 다른 건 필요 없었습니다.
하지만 블루투스는 어떻습니까?
기본 설명 에 따르면 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
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