Linux RTL8811AU wireless driver
UPDATE : 13.09.2017
Намерих по-нова версия на този драйвер - 5.1.5, с който връзката е значително по-стабилна. Може да се изтегли GitHub хранилище : https://github.com/zebulon2/rtl8812au
Инсталацията и премахването са улеснени максимално чрез готовите скриптове - dkms-install и dkms-remove.sh
Наскоор си купих малък AC USB wireless адаптер(Comfast CF-915AC) който използва известният чипсет на Realtek - RTL8811AU. Оказа се, че дори в последните версии на Linux ядрото, в случая 4.10.12 тази карта не работи out of the box.
При включване антената се разпознава като USB устройство, но не и като мрежово.
Решението, което намерих тук е да се компилира ръчно драйверът качен следното Github repository.
Първо трябва да се свалят kernel-headers - пакетът, който съдържа хедърите необходими при билдване на модули за Linux ядрото и dkms - софтуерът който се грижи за ребилдването на модула при всяко обновяване на ядрото :
dnf install -y dkms kernel-devel-$(uname -r) - при Fedora
apt-get install linux-headers-amd64 - при Debian/Ubuntu
systemctl enable dkms
След това, както пича е написал в статията създаваме временна директория(което незадължително, може да се използва и /home/), клонираме Github repo-то и проверяваме версията на драйвера, която в случая е 4.30 и нещо си.
mkdir /tmp/rtldriver && cd /tmp/rtldriver
git clone https://github.com/Grawp/rtl8812au_rtl8821au.git
cat rtl8812au_rtl8821au/include/rtw_version.h
#define DRIVERVERSION "v4.3.20_16317.20160108"
Създаваме някаква директория, където ще се пази кода. За предпочитане е /usr/src, понеже се подразбира от името че там се държи най-вече сорс код и копираме целия код от временната директория в /tmp към /usr/src :
mkdir /usr/src/8812au-v4.3.20_16317.20160108
cp -R ./rtl8812au_rtl8821au/* /usr/src/8812au-v4.3.20_16317.20160108/
Нужно е да се създаде конфигурационен файл за dkms, за да знае програмата каква е версията на модула, къде да го билдва и т.н.
cat <<'EOF' > /usr/src/8812au-v4.3.20_16317.20160108/dkms.conf
PACKAGE_NAME="8812au"
PACKAGE_VERSION="4.3.20_16317.20160108"
BUILT_MODULE_NAME[0]="8812au"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/wireless"
AUTOINSTALL="yes"
MAKE[0]="'make' all KVER=${kernelver}"
CLEAN="'make' clean"
EOF
Регистрираме модула в DKMS :
dkms add -m 8812au -v v4.3.20_16317.20160108
И накрая го билдваме :
dkms install -m 8812au -v v4.3.20_16317.20160108
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area...
'make' all KVER=4.10.12-200.fc25.x86_64.........................
cleaning build area...
DKMS: build completed.
8812au.ko:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.10.12-200.fc25.x86_64/extra/
Adding any weak-modules
depmod....
DKMS: install completed.
След зареждане на модула към системата с modprobe 8812au устройството вече би трябва да работи.
При Fedora обаче по всяка вероятност драйверът няма да се зареди при следващ старт на системата. Вероятно има и по-елегантен начин, но аз лично реших проблема като добавих modprobe 8812au в rc.local.