Chromebook C201에 Arch Linux ARM을 설치했습니다. 블루투스를 작동시키려고 노력했지만 성공하지 못했는데 문제가 무엇인지 모르겠습니다.
출력은 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
그래서 일종의 블루투스 장치가 있는 것 같습니다.
bluez
및 패키지가 설치되어 bluez-utils
있고 블루투스가 활성화되어 있으며 실행 중인지 확인했습니다.
$ 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에 의해 차단되지 않았는지 확인했습니다.
$ 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
있습니다 btbcm
. hci-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에서 실행되고 있습니다.