DKMS packaging of the AICSemi AIC8800 vendor driver (RivieraWaves rwnx
stack, v1.0.9) as shipped with BrosTrend USB Wi-Fi adapters, ported to
build on current kernels (tested through kernel 7.1 / Fedora 44).
The vendor/BrosTrend driver only builds against older kernels; this tree adds version-guarded compatibility fixes so one source builds across old and new kernels.
AIC8800-based USB adapters, e.g.:
- BrosTrend AIC8800DC — USB ID
2c4e:0126(tested) - Other AIC8800D80/DC-family dongles may work (firmware for both included)
git clone https://github.com/bedlaj/aic8800-dkms
cd aic8800-dkms
sudo ./install.shThe script installs dkms + kernel-devel if missing, copies firmware to
/lib/firmware/, registers the source at /usr/src/aic8800-1.0.9, and
builds/installs the modules (aic8800_fdrv, aic_load_fw) for the running
kernel. DKMS rebuilds them automatically on future kernel updates.
Other distros: install dkms and your kernel headers manually, then run
sudo ./install.sh.
DKMS signs modules with a locally generated MOK key. If Secure Boot is enabled, enroll it once before the module will load:
sudo mokutil --import /var/lib/dkms/mok.pub # then reboot, enroll in MOK managersudo dkms remove aic8800/1.0.9 --all
sudo rm -rf /usr/src/aic8800-1.0.9 /lib/firmware/aic8800DC /lib/firmware/aic8800D80Kernel API changes are handled with HIGH_KERNEL_VERSION* guards (see
aic8800_fdrv/rwnx_defs.h). Most recently, HIGH_KERNEL_VERSION_WDEV
(KERNEL_VERSION(7,1,0)) covers the kernel 7.1 cfg80211 changes:
key/station cfg80211_ops callbacks take struct wireless_dev * instead
of struct net_device *, and the action union in struct ieee80211_mgmt
became anonymous with a shared action_code field.
dkms.service rebuilds the modules automatically when a new kernel is
installed, as long as matching headers (kernel-devel) are present. To
rebuild manually:
sudo dkms install aic8800/1.0.9 -k $(uname -r)If a future kernel breaks the build:
- Check
journalctl -u dkms.serviceand/var/lib/dkms/aic8800/1.0.9/build/make.logfor the compile error. - Compare against the new kernel's headers, e.g.
/usr/src/kernels/$(uname -r)/include/net/cfg80211.handinclude/linux/ieee80211.h. - Add a new branch guarded by a
HIGH_KERNEL_VERSION*macro, keeping the older branches so one source still builds for every installed kernel — see git history for worked examples.
This tree is a fork of upstream 1.0.9 (see below), so upstream changes —
including possible security fixes — must be ported by hand. A weekly
GitHub Actions job (.github/workflows/upstream-check.yml) watches
BrosTrend's driver repo
(brostrend/linux.brostrend.com,
which serves linux.brostrend.com): it pins the current release (versioned
pool deb named by their aic8800-dkms.deb pointer file), their release
commit, and per-file payload checksums in upstream/SHA256SUMS; if any of
that changed, it opens an issue with the diff. Run ./check-upstream.sh
locally for the same check, and ./check-upstream.sh --update to refresh
the baseline after porting the changes.
The vendor branch holds the pristine upstream source; main is
vendor + our kernel-compat patches. When the upstream check reports a new
release (say 1.0.10):
git checkout vendor
# extract the new deb's /usr/src/aic8800-<version> over the tree
curl -fsSL https://linux.brostrend.com/pool/main/a/aic8800/aic8800-dkms_<version>_all.deb -o /tmp/aic.deb
cd /tmp && ar x aic.deb && tar -xf data.tar.*
rsync -a --delete --exclude=.git --exclude=firmware --exclude={install.sh,README.md,LICENSE,check-upstream.sh,upstream,.github} \
/tmp/usr/src/aic8800-<version>/ <repo>/
git commit -am "Vendor aic8800 <version>"
git checkout main && git merge vendor # 3-way merge keeps our patches
./check-upstream.sh --updateOnly hunks where upstream and our patches touch the same lines need manual conflict resolution.
A second weekly job (.github/workflows/fedora-build.yml) does a full
dkms build in fedora:latest and fedora:rawhide containers against
the newest kernel-devel headers, so a kernel API break is noticed —
via an auto-filed issue with the make.log excerpt — before (rawhide) or
as soon as (latest) it reaches users. It also runs on every push touching
the driver source.
- Driver source: GPL-2.0 (see
LICENSE;MODULE_LICENSE("GPL")= GPLv2 or later in kernel terms), Copyright RivieraWaves / AICSemi; redistributed unmodified apart from kernel-compatibility fixes. firmware/: AICSemi firmware blobs (no explicit license), redistributed as-is for convenience.
Both driver source and firmware were obtained from BrosTrend's official
Linux driver package aic8800-dkms 1.0.9
(linux.brostrend.com/aic8800-dkms.deb),
maintained by BrosTrend at
github.com/brostrend/linux.brostrend.com.
The chipset, firmware, and vendor driver are developed by
AICSemi (AIC Semiconductor).