blog.stackframe.dev

라즈베리파이 블루투스 장치가 표시되지 않는 문제 해결방법

아치리눅스 환경에서 UART 기능을 사용하기 위해 문서를 읽어보고 설정하려 했더니 이미 /dev/ttyAMA0 장치가 표시되고 있고 블루투스는 장치 자체가 나오지 않았다.

와이파이 장치만 인식되고 있다.

참고로 Arch Linux ARM에는 라즈베리파이에 쓸 수 있는 리눅스 커널이 2가지 존재한다. 하나는 라즈베리파이 재단에서 라즈베리파이에 맞게 수정한 커널이고 다른 하나는 리눅스 메인라인 커널이다. 나는 보통 메인라인을 사용하지만 여기엔 라즈베리파이 전용 디바이스 트리 오버레이 파일들이 포함되지 않기 때문에 라즈베리파이 쪽 커널로 변경했었는데 이 이후로 블루투스 장치가 보이지 않았다.

나는 블루투스를 사용하지 않고 UART를 사용하고 싶었기 때문에 수고를 덜은거지만 왜 블루투스가 잡히지 않는지 궁금해져서 알아보았다. 찾아보니 config.txtdtparam=krnbt=on이 설정되지 않으면 인식되지 않는다고 한다. 라즈베리파이 리눅스 커널 소스의 라즈베리파이 4 디바이스 트리를 확인하면 블루투스 기본 설정이 disabled로 되어있다. /arch/arm/boot/dts/bcm271x-rpi-bt.dtsi:

&uart0 {
    bt: bluetooth {
        compatible = "brcm,bcm43438-bt";
        max-speed = <3000000>;
        shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
        status = "disabled";
    };
};

리눅스 메인라인의 라즈베리파이 디바이스 트리를 보니 기본 설정이 켜져있는 것이었다. /arch/arm/boot/dts/bcm2711-rpi-4-b.dts:

&uart0 {
    pinctrl-names = "default";
    pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>;
    uart-has-rtscts;
    status = "okay";

    bluetooth {
        compatible = "brcm,bcm43438-bt";
        max-speed = <2000000>;
        shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
    };
};

config.txtdtparam=krnbt=on를 넣고 재부팅을 하니 제대로 잡혔다.

블루투스 장치가 인식되었다.

댓글