vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-01-07 12:10 pm

Загвоздка с WiFi адаптером AC600

Выяснилось, что было не так на Дебиане с WiFi адаптером. Сделан он на чипе Realtek RTL8821CU (PDF).

В последнее время производители USB-адаптеров придумали хитрость, чтобы упростить юзерам установку драйверов под Windows. Когда втыкаешь девайс первый раз, он определяется как флэш-диск, и оттуда начинает устанавливаться драйвер. Когда драйвер установлен, он шлёт устройству хитрую команду, флэш-диск исчезает и вместо него появляется WiFi трансивер. То есть на ходу меняется идентификатор USB-девайса на шине.

В Linux такие действия управляются через сервис udev и утилиту usb_modeswitch. В файле /usr/lib/udev/rules.d/40-usb_modeswitch.rules прописано, что и как переключать. Для данного конкретного адаптера там было:
# D-Link DWA-171 Wifi Dongle
ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="usb_modeswitch '/%k'"
Это почему-то не работало. Я поправил на:
# Realtek 8821CU Wifi Dongle
ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="/usr/sbin/usb_modeswitch -K -v 0bda -p 1a2b"
Устройство успешно распозналось и функционирует:
$ lsusb
...
Bus 004 Device 009: ID 0bda:c811 Realtek Semiconductor Corp. 802.11ac NIC

$ ip addr
...
5: wlan0: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 90:de:80:09:4e:08 brd ff:ff:ff:ff:ff:ff
inet 192.168.86.51/24 brd 192.168.86.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::92de:80ff:fe09:4e08/64 scope link
valid_lft forever preferred_lft forever
На Chimera Linux адаптер тоже ожил, после того как я установил usb_modeswitch и usb-modeswitch-data из исходников.
lxe: (Default)

[personal profile] lxe 2025-01-07 08:39 pm (UTC)(link)
Настораживают меня такие stateful-устройства. Нет, чтобы всегда выдавать два интерфейса.
kondybas: (Default)

[personal profile] kondybas 2025-01-07 09:03 pm (UTC)(link)
Вероятно, реализация модесвитча дешевле, чем пихать в чип полноценній усб-хаб.
lxe: (Default)

[personal profile] lxe 2025-01-07 10:54 pm (UTC)(link)
А также принцип наименьшего состояния.
henry_flower: A melancholy wolf (Default)

[personal profile] henry_flower 2025-01-07 09:11 pm (UTC)(link)
> В последнее время

це давно з'явилося, років з 15 тому, разом з тодішніми 3g/4g "модемами"

я пам'ятаю оту usb_modeswitch ще до ондроїдних телехфонів
tiresome_cat: (CuriousCat)

[personal profile] tiresome_cat 2025-01-07 11:14 pm (UTC)(link)
Эта лабуда со встроенными драйверами часто встречалась и на принтерах НР. Пользы от неё никакой, сплошной вред.
ircicq: (Default)

[personal profile] ircicq 2025-01-08 12:20 am (UTC)(link)
Windows известна бинарной совместимостью драйверов

Некоторые (WDM) даже работали начиная с Win98/NT4 и до современных (32-битных вариантов)
tiresome_cat: (CuriousCat)

[personal profile] tiresome_cat 2025-01-08 06:40 am (UTC)(link)
Далеко не всегда.
ircicq: (Default)

[personal profile] ircicq 2025-01-08 09:58 am (UTC)(link)
Даже почти никогда.
Но в принципе универсальный драйвер написать можно, особенно задним числом, имея возможность тестировать на предыдущих Windows.
Конкретно с WiFi-драйверами не так - там API внятный придумали только начиная с XP.
tiresome_cat: (CuriousCat)

[personal profile] tiresome_cat 2025-01-08 06:41 am (UTC)(link)
Как-то так, да. Дурная идея.
x86128: (Default)

[personal profile] x86128 2025-01-08 07:26 am (UTC)(link)
Хитро, как раз на этом чипе для домашнего NAS присматривал
suhajh: (Default)

[personal profile] suhajh 2025-01-08 07:37 am (UTC)(link)
Ну че, за успех❗ 🥂
suhajh: (Default)

[personal profile] suhajh 2025-01-08 07:27 pm (UTC)(link)
Че то у меня сразу перефразировалось = разум трумпа над здравым смыслом... 🤦‍♂️