[Arm64-baikalm] Bluetooth/WiFi модуль RTL8821

Nikolay Zhuravlev n.zhuravlev на edelweiss.msk.ru
Пт Апр 16 19:37:25 MSK 2021


Коллеги,

В некоторые наши моноблоки мы ставим BT/WiFi модуль RTL8821CU.  Такой,
кажется, стоит и в моноблоках, которые готовятся для конференции.  Мы
нашли в интернете кое-какие исходники, которые после легкого
допиливания вроде заработали на arm64. Почему их нет (не было) в
апстриме мы не выясняли. Хотелось бы увидеть их в дистрибутиве.

Портированные исходники доступны на нашем гитхабе:
https://github.com/edelweiss-tech/rtl8821CU
https://github.com/edelweiss-tech/rtl8821cu_bt

Ниже копия задачи из нашего багтрекера, если будет полезно.

Support RTL8821CU module

Description

На моноблоке стоит комбо-модуль rtl8821cu, который умеет wifi и bluetooth. Нужно поддержать его для Baikal-M.

Analysis

В апстриме поддержки для данного модуля нет. На сайте производителя не удалось найти драйвера под Linux.
Удалось найти какой-то драйвер для wifi части:
https://github.com/brektrou/rtl8821CU
и какой-то драйвер для BT части:
https://github.com/andydvsn/rtl8821cu_bt, который изначально происходит от китайских исходников
производителя COMFAST:
Linux_BT_USB_v3.10_20170314_8821CU_BTCOEX_20170223-1111.tgz

Design

В драйвере https://github.com/brektrou/rtl8821CU добавляем новую платформу в Makefile, 
CONFIG_PLATFORM_BAIKAL_M. EXTRA_CFLAGS такие же, как для x86. Остальные параметры - просто
для кроссовой сборки с исходниками ядра 4.9.
Исходники и изменения зачекинены в git at gitlab.tpl:ndz/rtl8821cu.git
Как предложено в файле README.md от этого драйвера, для arm64 нужно выключить опцию
--mgeneral-regs-only в ядерном arch/arm64/Makefile.
Также необходимо добавить поддержку BT и CFG80211 в ядро в виде модулей, когда это возможно.
См. прилагаемый патч.
Код для BT-части портирован с более старого ядра 3.x на 4.9 и доступен тут:
git at gitlab.tpl:baikal-m/rtl8821cu_bt.git
Пришлось заблеклистить оригинальный драйвер btusb, чтобы этот драйвер смог подцепить
bluetooth-ную часть устройства RTL8821CU. Альтернативой rtk_btusb явлается небольшая
модификация стандартного драйвера btusb (наш патч есть в данном репозитарии).
Детали можно почитать в README.baikal.

Насколько реально функциональны данные драйвера, учитывая что их нет в апстриме,
сказать трудно. Базовые тесты (поднятие интерфейсов, пинги устроиств) вроде проходят.

Unit test

1. WiFi test.
Load modules cfg80211 and 8821cu.
After that "iw list" shall show the wifi interface.

2. BT test
Turn on the bluetooth on some other device, for ex. a smartphone,
and put it in discovery mode.

At some point a pairing request will appear on the computer screen.
Click "confirm".
Discover and ping the other device:
$ hcitool scan
$ l2ping <MAC address of the paired device>
$ hcitool info <MAC address of the paired device>

-- 
WBR, Nick Zhuravlev
Software Developer
www.edelweiss-tech.ru



Подробная информация о списке рассылки Arm64-baikalm