Universal Linux driver for AIC8800D80 Wi-Fi chipsets with DKMS and multi-distro support. About this fork
This repository is a community-maintained fork of Shenmintao's original AIC8800 driver project.
The goal of this fork is to provide a more stable experience on modern Linux systems by improving compatibility across multiple distributions, supporting newer kernel versions, and reducing the need for manual configuration.
Key improvements include:
Support for Linux kernels 6.0 through 7.x Improved Bluetooth functionality with minimal manual setup Better module loading behavior across different desktop environments Installation support for multiple distributions, including Debian/Ubuntu, Fedora, RHEL/CentOS, Arch Linux, openSUSE, Alpine Linux, Void Linux, and Solus Ongoing maintenance and compatibility fixes for newer kernel releases
Credits: This project would not exist without the work of the original author, Shenmintao. This fork aims to build upon that foundation and keep the driver usable for current Linux users.
This project provides a complete kernel driver for Wi-Fi devices based on the AIC8800D80 chipset, compatible with cards like Tenda U11 and AX913B. The driver includes:
- Automatic installation via DKMS to maintain compatibility after kernel updates
- Multi-platform support for 8 major Linux distributions
- Embedded firmware with configurations for multiple chipset variants
- Automatic udev rules for better system integration
- ✅ Compatible with kernels 6.x (7.x with
--force) - ✅ Automatic installation on Debian, Fedora, Arch, Alpine, and more
- ✅ No hidden dependencies — automatically detects what you need
- ✅ Support for Vendor ID 368B (Pandora clones)
- ✅ Integrated DKMS — automatically reinstalls after kernel updates
- 🔧 Automatic installation with DKMS — recompiles after kernel updates
- 📦 Pre-packaged firmware for D80, D80N, D80X2, DC, DLN variants
- 🐧 8 distributions supported — Debian, Fedora, Arch, Alpine, Void, Solus, openSUSE, CentOS
- 🛡️ Secure Boot detection — warns if it may affect module loading
- 🔌 Integrated udev rules — support for automatic USB mode switching
- 📊 Detailed logs — installation with clear diagnostic messages
- ⏭️ Kernel compatibility — automatic version checking before install
| Distribution | Package Manager | Status | Notes |
|---|---|---|---|
| Debian / Ubuntu | apt | ✅ Stable | Tested on Ubuntu 25.04, Debian 12 |
| Fedora / RHEL | dnf | ✅ Stable | RHEL 8+ compatible |
| CentOS / RHEL legacy | yum | ✅ Stable | Requires EPEL enabled |
| Arch Linux | pacman | ✅ Stable | Includes linux-headers |
| openSUSE | zypper | ✅ Stable | Leap and Tumbleweed |
| Alpine Linux | apk | ✅ Stable | Requires edge repository |
| Void Linux | xbps-install | ✅ Stable | Compilation from source |
| Solus | eopkg | ✅ Stable | Experimental support |
If your distro is not listed, you can install the dependencies manually and then run:
sudo ./install.sh --skip-deps- Alpine Linux: Requires updating repository with
edge - Void Linux / Solus: Compiler may take longer on first run
- All distros require
sudoaccess or root permission
| Component | Minimum Version | Purpose |
|---|---|---|
| Linux Kernel | 6.0.0 | Base operating system |
| DKMS | 3.0 | Dynamic Kernel Module Support |
| Compiler (gcc) | 9.x | Build tools |
| Make | 4.0 | Build system |
| Linux Headers | Kernel-matched | Kernel development files |
mokutil— for Secure Boot managementudevadm— for reloading udev rules (usually included)
- Minimum: 500 MB (driver + firmware)
- Recommended: 2 GB (compilation space)
The fastest way for most users:
# 1. Clone the repository
git clone https://github.com/RicknotDev/aic8800d80.git
cd aic8800d80
# 2. Make installer executable
chmod +x install.sh
# 3. Run installation
sudo ./install.shThe script will detect your distro, install necessary dependencies, and configure DKMS automatically.
# For kernel 7.x (not guaranteed, use at your own risk)
sudo ./install.sh --force
# If you already installed dependencies manually
sudo ./install.sh --skip-deps
# View full help
sudo ./install.sh --helpFor advanced users or unsupported distributions:
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y dkms build-essential linux-headers-$(uname -r)
# Fedora/RHEL
sudo dnf install -y dkms make gcc kernel-devel kernel-headers
# Arch
sudo pacman -S dkms base-devel linux-headers
# Alpine
sudo apk update && sudo apk add dkms build-base linux-headers# Clean old firmware (IMPORTANT)
sudo rm -rf /lib/firmware/aic8800*
# Copy new firmware
sudo cp -r ./fw/aic8800D80 /lib/firmware/sudo cp aic.rules /usr/lib/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger# Navigate to driver directory
cd drivers/aic8800
# Compile
make
# Install
sudo make install
# (Optional) Generate DKMS config if not present
sudo dkms add -m aic8800 -v 1.0.0
sudo dkms build -m aic8800 -v 1.0.0
sudo dkms install -m aic8800 -v 1.0.0# Load module manually
sudo modprobe aic8800_fdrvThe driver will load automatically on boot after installation.
# Verify module is loaded
lsmod | grep aic
# You should see something like:
# aic8800_fdrv 536576 0
# cfg80211 1146880 1 aic8800_fdrv
# aic_load_fw 69632 1 aic8800_fdrv# List available network interfaces
iwconfig
# Using NetworkManager (GNOME/KDE)
nmcli device
nmcli connection up <SSID>
# Using iwd (more modern alternative)
iwctl station wlan0 connect <SSID># View kernel logs in real-time
sudo dmesg -w | grep aic
# Check detailed driver status
cat /sys/class/net/wlan0/phy80211/name
# Check if device is in download/load mode
lsusb | grep aicThe driver loads configuration files from the fw/ folder:
fw/
├── aic8800D80/ # Standard variant
│ ├── aic_userconfig_8800d80.txt
│ ├── aic_powerlimit_8800d80.txt
│ └── (other firmware files)
├── aic8800D80N/ # N variant
├── aic8800D80X2/ # X2 variant
├── aic8800DC/ # DC variant
└── aic8800DLN/ # DLN variant
To use a specific configuration, edit the appropriate aic_userconfig_*.txt file before installing.
After installation, you can adjust parameters when loading the module:
# Example: load with custom firmware path
sudo modprobe aic8800_fdrv aic_fw_path=/custom/fw/path
# View all available parameters
modinfo aic8800_fdrv# If installed with DKMS
sudo dkms remove aic8800/1.0.0 --all
sudo rm -rf /lib/firmware/aic8800*
sudo rm /usr/lib/udev/rules.d/aic.rules
sudo udevadm control --reload-rules
# If installed manually
cd drivers/aic8800
sudo make uninstallaic8800d80/
├── install.sh # Universal automatic installer
├── diagnostic_build.sh # Diagnostic script
├── dkms.conf # DKMS configuration
├── README.md # This file
├── drivers/
│ └── aic8800/
│ ├── Makefile # Main build script
│ ├── aic_load_fw/ # Firmware loader module
│ │ ├── aic_bluetooth_main.c
│ │ ├── aicwf_usb.c
│ │ └── (+ compatibility files)
│ └── aic8800_fdrv/ # Wi-Fi driver module
│ ├── rwnx_main.c # Entry point
│ ├── rwnx_tx.c # Transmission
│ ├── rwnx_rx.c # Reception
│ └── (+ support files)
├── fw/ # Binary firmware
│ ├── aic8800D80/
│ ├── aic8800D80N/
│ ├── aic8800D80X2/
│ ├── aic8800DC/
│ └── aic8800DLN/
├── aic.rules # udev rules
├── usb_modeswitch/ # USB mode switching config
└── bazzite/ # Bazzite packaging (rpm-ostree)
- aic_load_fw: Loads firmware to USB device and manages Bluetooth
- aic8800_fdrv: Main Wi-Fi driver that interacts with cfg80211 and mac80211
# Script checks structure, DKMS, firmware, and kernel
chmod +x diagnostic_build.sh
sudo ./diagnostic_build.shThis script validates:
- ✅ Presence of build files
- ✅ DKMS configuration
- ✅ Firmware installed correctly
- ✅ Kernel and tool compatibility
- ✅ Build logs (if present)
cd drivers/aic8800
make clean
make VERBOSE=1 # Show compilation detailsContributions are welcome. To contribute:
git clone https://github.com/RicknotDev/aic8800d80.git
cd aic8800d80git checkout -b feature/my-improvementgit commit -m "feat: add kernel 7.x support"
git commit -m "fix: resolve Alpine loading issue"git push origin feature/my-improvementThen open a PR on GitHub describing:
- What problem it solves
- How it was tested
- Any behavior changes
- Use 4 spaces for C indentation
- Follow existing Linux kernel code style
- Avoid massive formatting changes in feature PRs
- Include comments for non-obvious code
- Complete tested support for kernel 7.x
- Production-ready Bluetooth driver (see
bluetoothbranch) - Native packaging for more distros (Debian, Fedora RPM)
- Web-based configuration for driver parameters
- Automated CI/CD tests
- Internal API documentation
This project is licensed under GPL v2. See LICENSE for full details.
- RicknotDev — Adaptation, compatibility, and maintenance
This driver is based on the original AIC8800D80 driver code. Modifications include:
- Adaptation for recent Linux kernels
- Support for multiple distributions
- Automatic installation with DKMS
- Improvements in compatibility and diagnostics
For Bluetooth support, see the bluetooth branch of this project.
Driver universal de Linux para chipsets Wi-Fi AIC8800D80 con soporte DKMS y multi-distribución.
Este proyecto proporciona un driver completo de kernel para dispositivos Wi-Fi basados en el chipset AIC8800D80, compatible con tarjetas como Tenda U11 y AX913B. El driver incluye:
- Instalación automática mediante DKMS para mantener compatibilidad después de actualizaciones de kernel
- Soporte multiplataforma para 8 distribuciones Linux principales
- Firmware integrado con configuraciones para múltiples variantes de chipset
- Reglas udev automáticas para mejor integración del sistema
- ✅ Compatible con kernels 6.x (7.x con
--force) - ✅ Instalación automática en Debian, Fedora, Arch, Alpine y más
- ✅ Sin dependencias ocultas — detecta automáticamente lo que necesitas
- ✅ Soporte para Vendor ID 368B (clones Pandora)
- ✅ DKMS integrado — se reinstala automáticamente tras actualizar el kernel
- 🔧 Instalación automática con DKMS — se recompila tras actualizaciones de kernel
- 📦 Firmware preempaquetado para variantes D80, D80N, D80X2, DC, DLN
- 🐧 8 distribuciones soportadas — Debian, Fedora, Arch, Alpine, Void, Solus, openSUSE, CentOS
- 🛡️ Detección de Secure Boot — advierte si puede afectar la carga del módulo
- 🔌 Reglas udev integradas — soporte para modos de cambio USB automático
- 📊 Logs detallados — instalación con mensajes de diagnóstico claros
- ⏭️ Compatibilidad de kernel — verificación automática de versión antes de instalar
| Distribución | Gestor de paquetes | Estado | Notas |
|---|---|---|---|
| Debian / Ubuntu | apt | ✅ Estable | Probado en Ubuntu 25.04, Debian 12 |
| Fedora / RHEL | dnf | ✅ Estable | RHEL 8+ compatible |
| CentOS / RHEL legacy | yum | ✅ Estable | Requiere EPEL habilitado |
| Arch Linux | pacman | ✅ Estable | Incluye linux-headers |
| openSUSE | zypper | ✅ Estable | Leap y Tumbleweed |
| Alpine Linux | apk | ✅ Estable | Requiere edge repository |
| Void Linux | xbps-install | ✅ Estable | Compilación desde source |
| Solus | eopkg | ✅ Estable | Soporte experimental |
Si tu distro no está listada, puedes instalar las dependencias manualmente y luego ejecutar:
sudo ./install.sh --skip-deps- Alpine Linux: Requiere actualizar el repositorio con
edge - Void Linux / Solus: El compilador puede tardar más tiempo en la primera ejecución
- Todas las distros requieren acceso a
sudoo permiso de root
| Componente | Versión mínima | Propósito |
|---|---|---|
| Linux Kernel | 6.0.0 | Sistema operativo base |
| DKMS | 3.0 | Gestor dinámico de módulos kernel |
| Compilador (gcc) | 9.x | Herramientas de compilación |
| Make | 4.0 | Sistema de construcción |
| Linux Headers | Coincide con kernel | Archivos de desarrollo del kernel |
mokutil— para gestión de Secure Bootudevadm— para recargar reglas udev (generalmente incluido)
- Mínimo: 500 MB (driver + firmware)
- Recomendado: 2 GB (espacio para compilación)
La forma más rápida para la mayoría de usuarios:
# 1. Clonar el repositorio
git clone https://github.com/RicknotDev/aic8800d80.git
cd aic8800d80
# 2. Hacer ejecutable el instalador
chmod +x install.sh
# 3. Ejecutar la instalación
sudo ./install.shEl script detectará tu distro, instalará las dependencias necesarias y configurará DKMS automáticamente.
# Para kernels 7.x (no garantizado, bajo tu propio riesgo)
sudo ./install.sh --force
# Si ya instalaste las dependencias manualmente
sudo ./install.sh --skip-deps
# Ver ayuda completa
sudo ./install.sh --helpPara usuarios avanzados o distribuciones no detectadas:
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y dkms build-essential linux-headers-$(uname -r)
# Fedora/RHEL
sudo dnf install -y dkms make gcc kernel-devel kernel-headers
# Arch
sudo pacman -S dkms base-devel linux-headers
# Alpine
sudo apk update && sudo apk add dkms build-base linux-headers# Limpiar firmware antiguo (IMPORTANTE)
sudo rm -rf /lib/firmware/aic8800*
# Copiar el nuevo firmware
sudo cp -r ./fw/aic8800D80 /lib/firmware/sudo cp aic.rules /usr/lib/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger# Navegar al directorio del driver
cd drivers/aic8800
# Compilar
make
# Instalar
sudo make install
# (Opcional) Generar DKMS config si no existe
sudo dkms add -m aic8800 -v 1.0.0
sudo dkms build -m aic8800 -v 1.0.0
sudo dkms install -m aic8800 -v 1.0.0# Cargar el módulo manualmente
sudo modprobe aic8800_fdrvEl driver se cargará automáticamente al arrancar después de la instalación.
# Verificar que el módulo está cargado
lsmod | grep aic
# Deberías ver algo como:
# aic8800_fdrv 536576 0
# cfg80211 1146880 1 aic8800_fdrv
# aic_load_fw 69632 1 aic8800_fdrv# Listar interfaces de red disponibles
iwconfig
# Con NetworkManager (GNOME/KDE)
nmcli device
nmcli connection up <SSID>
# Con iwd (alternativa más moderna)
iwctl station wlan0 connect <SSID># Ver logs del kernel en tiempo real
sudo dmesg -w | grep aic
# Ver estado detallado del driver
cat /sys/class/net/wlan0/phy80211/name
# Comprobar si el dispositivo está en modo descarga/carga
lsusb | grep aicEl driver carga archivos de configuración desde la carpeta fw/:
fw/
├── aic8800D80/ # Variante estándar
│ ├── aic_userconfig_8800d80.txt
│ ├── aic_powerlimit_8800d80.txt
│ └── (otros archivos de firmware)
├── aic8800D80N/ # Variante N
├── aic8800D80X2/ # Variante X2
├── aic8800DC/ # Variante DC
└── aic8800DLN/ # Variante DLN
Para usar una configuración específica, edita el archivo aic_userconfig_*.txt correspondiente a tu variante antes de instalar.
Después de instalar, puedes ajustar parámetros al cargar el módulo:
# Ejemplo: cargar con parámetro de ruta de firmware personalizado
sudo modprobe aic8800_fdrv aic_fw_path=/custom/fw/path
# Para ver todos los parámetros disponibles
modinfo aic8800_fdrv# Si se instaló con DKMS
sudo dkms remove aic8800/1.0.0 --all
sudo rm -rf /lib/firmware/aic8800*
sudo rm /usr/lib/udev/rules.d/aic.rules
sudo udevadm control --reload-rules
# Si se instaló manualmente
cd drivers/aic8800
sudo make uninstallaic8800d80/
├── install.sh # Instalador automático universal
├── diagnostic_build.sh # Script de diagnóstico
├── dkms.conf # Configuración de DKMS
├── README.md # Este archivo
├── drivers/
│ └── aic8800/
│ ├── Makefile # Build script principal
│ ├── aic_load_fw/ # Módulo de carga de firmware
│ │ ├── aic_bluetooth_main.c
│ │ ├── aicwf_usb.c
│ │ └── (+ archivos de compatibilidad)
│ └── aic8800_fdrv/ # Módulo de driver Wi-Fi
│ ├── rwnx_main.c # Punto de entrada
│ ├── rwnx_tx.c # Transmisión
│ ├── rwnx_rx.c # Recepción
│ └── (+ archivos de soporte)
├── fw/ # Firmware binario
│ ├── aic8800D80/
│ ├── aic8800D80N/
│ ├── aic8800D80X2/
│ ├── aic8800DC/
│ └── aic8800DLN/
├── aic.rules # Reglas udev
├── usb_modeswitch/ # Configuración de cambio de modo USB
└── bazzite/ # Empaquetado para Bazzite (rpm-ostree)
- aic_load_fw: Carga el firmware en el dispositivo USB y gestiona Bluetooth
- aic8800_fdrv: Driver Wi-Fi principal que interactúa con cfg80211 y mac80211
# El script verifica estructura, DKMS, firmware, y kernel
chmod +x diagnostic_build.sh
sudo ./diagnostic_build.shEste script valida:
- ✅ Presencia de archivos de compilación
- ✅ Configuración de DKMS
- ✅ Firmware instalado correctamente
- ✅ Compatibilidad de kernel y herramientas
- ✅ Logs de compilación (si existen)
cd drivers/aic8800
make clean
make VERBOSE=1 # Mostrar detalles de compilaciónLas contribuciones son bienvenidas. Para contribuir:
git clone https://github.com/RicknotDev/aic8800d80.git
cd aic8800d80git checkout -b feature/mi-mejoragit commit -m "feat: añadir soporte para kernel 7.x"
git commit -m "fix: resolver problema de carga en Alpine"git push origin feature/mi-mejoraLuego abre un PR en GitHub describiendo:
- Qué problema resuelve
- Cómo se probó
- Cambios en comportamiento (si los hay)
- Usa espacios de 4 para indentación en C
- Sigue el estilo existente del kernel Linux
- Evita cambios de formato masivos en PRs de funcionalidad
- Incluye comentarios para código no obvio
- Soporte completo y probado para kernel 7.x
- Driver Bluetooth de producción (rama
bluetooth) - Empaquetado nativo para más distros (Debian, Fedora RPM)
- Configuración web para parámetros del driver
- Tests automatizados en CI/CD
- Documentación de API interna
Este proyecto está bajo licencia GPL v2. Ver LICENSE para detalles completos.
- RicknotDev — Adaptación, compatibilidad y mantenimiento
Este driver está basado en el código original del driver AIC8800D80 de Tenda. Las modificaciones incluyen:
- Adaptación para kernels Linux más recientes
- Soporte para múltiples distribuciones
- Instalación automática con DKMS
- Mejoras en compatibilidad y diagnóstico
Para soporte de Bluetooth, ver la rama bluetooth del proyecto.
Si quieres reportar bugs o contribuir, abre un issue o envía un PR.