Linux 커널에서 QCA6390 Bluetooth 펌웨어를 활성화하는 방법은 무엇입니까?

Linux 커널에서 QCA6390 Bluetooth 펌웨어를 활성화하는 방법은 무엇입니까?

문맥

XPS 9310에 필요한 Bluetooth 펌웨어를 로드하기 위해 커널을 가져올 수 없습니다. 내 모델에는 QCA6390을 사용하는 AX500 연결 칩이 있습니다.

둘 다의 사용자우분투그리고아치Bluetooth가 이 모델에서 작동하는 것으로 보고되었지만 NixOS에서 작동하는 데 필요한 올바른 커널 구성을 찾는 데 문제가 있습니다.

내 구성

boot.kernelPatches다음 커널 구성 매개변수를 활성화하고 nix 구성에 다음 패치를 추가했습니다.

    # Extra config required for Bluetooth.
    {
      name = "enable-qca6390-bluetooth";
      patch = null;
      extraConfig = ''
        BT_QCA m
        BT_HCIBTUSB m
        BT_HCIBTUSB_AUTOSUSPEND y
        BT_HCIUART m
        BT_HCIUART_QCA y
      '';
    }

다음과 같이 관련 모듈을 로드합니다.

  boot.kernelModules = [ "bluetooth" "btqca" "btusb" "hci_qca" "hci_uart" ];

내가 가지고 있는 것은 말할 필요도 없습니다:

  hardware.bluetooth.enable = true;

나도 가지고 있어요:

  hardware.enableRedistributableFirmware = true;

이것은 만든다firmwareLinuxNonfree패키지는 펌웨어를 추가합니다.리눅스 펌웨어환매 계약도 포함됩니다.필요한 QCA 펌웨어.

질문

dmesg두 명의 독립적인 Ubuntu 사용자의 출력 에 펌웨어가 로드되는 것을 볼 수 있습니다.여기그리고여기, 둘 다 Bluetooth가 작동한다고 보고합니다. 그러나 나는 그것이 내 안에 로드되는 것을 관찰할 수 없습니다.

참고로 다음은 dmesgBluetooth를 사용하는 사용자의 출력입니다.

[ 2.349008] Bluetooth: Core ver 2.22
[ 2.349019] Bluetooth: HCI device and connection manager initialized
[ 2.349023] Bluetooth: HCI socket layer initialized
[ 2.349024] Bluetooth: L2CAP socket layer initialized
[ 2.349028] Bluetooth: SCO socket layer initialized
[ 2.394642] Bluetooth: HCI UART driver ver 2.3
[ 2.394644] Bluetooth: HCI UART protocol H4 registered
[ 2.394645] Bluetooth: HCI UART protocol BCSP registered
[ 2.394654] Bluetooth: HCI UART protocol LL registered
[ 2.394655] Bluetooth: HCI UART protocol ATH3K registered
[ 2.394660] Bluetooth: HCI UART protocol Three-wire (H5) registered
[ 2.394702] Bluetooth: HCI UART protocol Intel registered
[ 2.394734] Bluetooth: HCI UART protocol Broadcom registered
[ 2.394742] Bluetooth: HCI UART protocol QCA registered
[ 2.394743] Bluetooth: HCI UART protocol AG6XX registered
[ 2.394748] Bluetooth: HCI UART protocol Marvell registered
[ 2.416321] Bluetooth: hci0: setting up ROME/QCA6390
[ 2.420348] Bluetooth: hci0: Frame reassembly failed (-84)
[ 2.444937] Modules linked in: snd_pcm qrtr ns snd_seq_midi snd_seq_midi_event ath11k_pci(+) mhi snd_rawmidi ath11k hci_uart qmi_helpers btqca i915(+) snd_seq btrtl uvcvideo mac80211 snd_seq_device btbcm btintel snd_timer videobuf2_vmalloc dell_wmi drm_kms_helper input_leds videobuf2_memops dell_smbios videobuf2_v4l2 cec dcdbas snd efi_pstore serio_raw rc_core videobuf2_common hid_sensor_als i2c_algo_bit hid_sensor_trigger ucsi_acpi(+) cfg80211 fb_sys_fops industrialio_triggered_buffer processor_thermal_device typec_ucsi dell_wmi_descriptor kfifo_buf hid_sensor_iio_common intel_rapl_common soundcore industrialio wmi_bmof videodev mei_me libarc4 syscopyarea cros_ec_ishtp 8250_dw mc hid_multitouch sysfillrect mei cros_ec sysimgblt intel_soc_dts_iosf typec mac_hid bluetooth ecdh_generic ecc int3403_thermal int340x_thermal_zone acpi_pad intel_hid acpi_tad int3400_thermal acpi_thermal_rel sparse_keymap sch_fq_codel parport_pc ppdev drm lp parport ip_tables x_tables autofs4 hid_sensor_hub
[ 2.756645] Bluetooth: hci0: QCA Product ID :0x00000010
[ 2.756647] Bluetooth: hci0: QCA SOC Version :0x400a0200
[ 2.756647] Bluetooth: hci0: QCA ROM Version :0x00000200
[ 2.756648] Bluetooth: hci0: QCA Patch Version:0x00000d2b
[ 2.756650] Bluetooth: hci0: QCA controller version 0x02000200
[ 2.756651] Bluetooth: hci0: QCA Downloading qca/htbtfw20.tlv
[ 3.584055] Bluetooth: hci0: QCA Downloading qca/htnv20.bin
[ 3.777754] Bluetooth: hci0: QCA setup on UART is completed
[ 3.998318] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 3.998319] Bluetooth: BNEP filters: protocol multicast
[ 3.998321] Bluetooth: BNEP socket layer initialized
[ 14.108234] Bluetooth: RFCOMM TTY layer initialized
[ 14.108238] Bluetooth: RFCOMM socket layer initialized
[ 14.108242] Bluetooth: RFCOMM ver 1.11

dmesg | grep -i blue내 컴퓨터의 출력은 다음과 같습니다.

[    4.363188] Bluetooth: Core ver 2.22
[    4.363199] Bluetooth: HCI device and connection manager initialized
[    4.363201] Bluetooth: HCI socket layer initialized
[    4.363203] Bluetooth: L2CAP socket layer initialized
[    4.363205] Bluetooth: SCO socket layer initialized
[    4.379230] Bluetooth: HCI UART driver ver 2.3
[    4.379231] Bluetooth: HCI UART protocol H4 registered
[    4.379232] Bluetooth: HCI UART protocol BCSP registered
[    4.379238] Bluetooth: HCI UART protocol LL registered
[    4.379256] Bluetooth: HCI UART protocol Intel registered
[    4.379260] Bluetooth: HCI UART protocol QCA registered
[   20.090546] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   20.090553] Bluetooth: BNEP socket layer initialized

보시다시피 내 블루투스 설정에서는 이 단계나 다음 중 어떤 것도 수행하지 않습니다 hci0.

[ 2.416321] Bluetooth: hci0: setting up ROME/QCA6390

예상대로 GNOME 설정 GUI에서 Bluetooth를 활성화할 수 없으며 bluetoothctl아무 것도 표시되지 않습니다.

$ bluetoothctl list

$ bluetoothctl devices
No default controller available

질문

제가 이해한 바에 따르면, 펌웨어는 활성화되어 있을 때 자동으로 로드되어야 하며 BT_QCA, 두 가지 모두 앞서 언급한 nix 구성의 결과여야 합니다.

이 가정이 맞나요?

hci0위에 표시된 줄을 실행하는 데 필요한 필수 단계가 누락되었습니까 ?

진행 방법에 대한 제안이나 아이디어를 주시면 감사하겠습니다!

시스템 메시지

$ nix-shell -p nix-info --run "nix-info -m"
 - system: `"x86_64-linux"`
 - host os: `Linux 5.10.2, NixOS, 21.03pre259798.84917aa00bf (Okapi)`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.3.10`
 - channels(root): `"nixos-21.03pre259798.84917aa00bf, home-manager-20.09"`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`
$ lsmod | grep -i bt
btusb                  57344  0
btrtl                  24576  1 btusb
btbcm                  20480  1 btusb
btintel                28672  2 hci_uart,btusb
btqca                  20480  1 hci_uart
bluetooth             589824  13 btrtl,btqca,btintel,hci_uart,btbcm,bnep,btusb
usbcore               270336  5 xhci_hcd,usbhid,uvcvideo,btusb,xhci_pci
$ lspci
00:00.0 Host bridge: Intel Corporation 11th Gen Core Processor Host Bridge/DRAM Registers (rev 01)
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics (rev 01)
00:04.0 Signal processing controller: Intel Corporation Device 9a03 (rev 01)
00:06.0 PCI bridge: Intel Corporation 11th Gen Core Processor PCIe Controller (rev 01)
00:07.0 PCI bridge: Intel Corporation Tiger Lake-LP Thunderbolt PCI Express Root Port #0 (rev 01)
00:07.2 PCI bridge: Intel Corporation Tiger Lake-LP Thunderbolt PCI Express Root Port #2 (rev 01)
00:0a.0 Signal processing controller: Intel Corporation Device 9a0d (rev 01)
00:0d.0 USB controller: Intel Corporation Tiger Lake-LP Thunderbolt USB Controller (rev 01)
00:0d.2 USB controller: Intel Corporation Tiger Lake-LP Thunderbolt NHI #0 (rev 01)
00:0d.3 USB controller: Intel Corporation Tiger Lake-LP Thunderbolt NHI #1 (rev 01)
00:12.0 Serial controller: Intel Corporation Tiger Lake-LP Integrated Sensor Hub (rev 20)
00:14.0 USB controller: Intel Corporation Tiger Lake-LP USB 3.2 Gen 2x1 xHCI Host Controller (rev 20)
00:14.2 RAM memory: Intel Corporation Tiger Lake-LP Shared SRAM (rev 20)
00:15.0 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #0 (rev 20)
00:15.1 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #1 (rev 20)
00:16.0 Communication controller: Intel Corporation Tiger Lake-LP Management Engine Interface (rev 20)
00:19.0 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #4 (rev 20)
00:19.1 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #5 (rev 20)
00:1c.0 PCI bridge: Intel Corporation Device a0b8 (rev 20)
00:1d.0 PCI bridge: Intel Corporation Device a0b3 (rev 20)
00:1e.0 Communication controller: Intel Corporation Tiger Lake-LP Serial IO UART Controller #0 (rev 20)
00:1f.0 ISA bridge: Intel Corporation Tiger Lake-LP LPC Controller (rev 20)
00:1f.3 Multimedia audio controller: Intel Corporation Tiger Lake-LP Smart Sound Technology Audio Controller (rev 20)
00:1f.4 SMBus: Intel Corporation Tiger Lake-LP SMBus Controller (rev 20)
00:1f.5 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP SPI Controller (rev 20)
01:00.0 Non-Volatile memory controller: Toshiba Corporation Device 011a
56:00.0 Unassigned class [ff00]: Qualcomm Device 1101
57:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5260 PCI Express Card Reader (rev 01)
$ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 0c45:672a Microdia Integrated_Webcam_HD
Bus 003 Device 002: ID 27c6:533c Shenzhen Goodix Technology Co.,Ltd. FingerPrint
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

추가 참조

참조용으로 사용되는 경우 기본 커널 구성에 대한 링크는 다음과 같습니다.닉 OS,더반그리고아치.

이건 내 WIP야섭외NixOS에 XPS 9310 지원을 추가하는 것을 목표로 이 작업이 포함될 예정입니다.

이것은내 이전 게시물이 문제에 대한 도움을 얻기 위해 NixOS 포럼에 연락했지만 글을 쓰는 시점에는 답변을 받지 못했습니다.


해결됨

우리는 nixos/nixos-hardware github 저장소에서 이 문제를 해결하고 필요한 커널 구성 패치를 nixpkgs 자체에 업로드했습니다. nixos-hardware저장소의 모듈 사용여기XPS 9310에서 nixos를 쉽게 시작하고 실행할 수 있습니다.

답변1

BIOS를 살펴보세요. 메인 메뉴를 클릭하세요 Connection. 라는 부분이 있습니다 . 확인란이 선택되어 있는지 Wireless Device Enable확인하세요 . Bluetooth때로는 생각할 필요도 없는 일입니다 ¯\_(ツ)_/¯.

동일한 Bluetooth 하드웨어(Qualcomm QCA6390/AX500-DBS)를 사용하는 Dell XPS 15 9500이 있습니다.

나는 당신이 설명하는 것과 똑같은 증상을 가지고 있으며 "확실히" BIOS를 통해 BT를 비활성화하지 않았습니다. 내가 확인하고 확인하기 전까지는요. 놀랍게도 나는 그것을 비활성화했습니다.

BIOS에서 BT를 비활성화한 후 dmesg | grep -i blue출력이 귀하의 출력과 일치하는 것을 발견했습니다(정확히!). 예를 들어 다음 두 가지 주요 로그 줄이 누락되었습니다.

Bluetooth: hci0: QCA Downloading qca/htbtfw20.tlv
Bluetooth: hci0: QCA Downloading qca/htnv20.bin

bluetoothctl devices표시 중입니다 No default controller available. 이것이 내가 여기서 귀하의 질문을 찾은 방법입니다.

답변2

지난 1년 동안 문제가 해결된 후 동일한 문제를 해결하는 데 시간을 보냈습니다. 모든 것이 괜찮아 보이지만 나타나지 않습니다. dmesg의 펌웨어 다운로드 라인도 없습니다.

마지막 해결 방법은 BIOS로 들어가서 Bluetooth를 비활성화하고 전원을 켜고 재부팅한 다음 BIOS로 다시 들어가서 Bluetooth를 다시 활성화하는 것입니다. ˙_(ツ)_/˙

관련 정보