# RinCat RTL88x2BU Linux Driver for Older Kernels and USB Mode Control

> RinCat/RTL88x2BU-Linux-Driver supplies an out-of-tree `88x2bu` kernel module for selected RTL8812BU and RTL8822BU Wi-Fi USB adapters. It is most relevant to older Linux systems, specific compatibility cases, and users who need the driver's USB mode parameters, while Linux 6.12 or newer users are directed toward the in-kernel `rtw88_8822bu` driver.

**RinCat/RTL88x2BU-Linux-Driver** — Realtek RTL88x2BU WiFi USB Driver for Linux

- Repository: https://github.com/RinCat/RTL88x2BU-Linux-Driver
- Stars: 1,550 · Forks: 233
- Language: C
- License: GPL-2.0
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/rincat-rtl88x2bu-linux-driver

## Why the External RTL88x2BU Module Exists

This project addresses Linux systems that need a kernel module for selected RTL8812BU and RTL8822BU Wi-Fi USB adapters. Its primary users are owners of older kernels, systems encountering compatibility issues with the in-kernel driver, and users who need vendor-specific module options. The repository presents driver version `5.13.1-30` and documents Linux kernel support from 2.6.24 through 7.2, with unofficial patches.

There is an important boundary around current systems. The README says support for RTL8812BU and RTL8822BU entered Linux in kernel 6.2, with further improvements appearing in later kernels. For Linux 6.12 or newer, it explicitly recommends the in-kernel `rtw88_8822bu` module and an up-to-date distribution kernel and firmware. This external driver is therefore positioned as a fallback, not as the preferred general-purpose solution.

The supported hardware list includes named adapters from ASUS, Dlink, Edimax, Mercusys, NetGear, TP-Link, TRENDnet, and ZYXEL. It ends with "And more," so that phrase should not be read as a complete hardware guarantee. If a device identifies as RTL8812BU or RTL8822BU but no network interface appears after the module loads, the README asks users to submit an issue containing `lsusb` output and the device name, brand, and website. That whitelist mechanism is important: chipset family membership alone does not guarantee that every product variant is accepted.

## RTL88x2BU Module Architecture and Build Selection

The repository is a C out-of-tree Linux kernel module organized around driver-specific components. Its top-level layout includes `core/`, `hal/`, `include/`, `os_dep/`, and `platform/`, along with make fragments such as `rtl8822b.mk`, `halmac.mk`, and `haldmac.mk`. That structure indicates the expected kernel build path and separates core driver logic, hardware abstraction, OS dependencies, and platform integration.

The `Makefile` selects USB as the interface and disables the PCI, SDIO, and GSPI interfaces. It enables the RTL8822B family, access-point mode, P2P, power-saving features, and Bluetooth coexistence. Other wireless families in the make configuration are disabled. The kernel module itself is loaded as `88x2bu`, while `rtw88_8822bu` is the separate in-kernel module.

Compilation uses the compiler and kernel headers for the target environment. The README requires a C toolchain and matching kernel headers. It also warns that the module must be rebuilt after every kernel update unless DKMS is used. This makes the ordinary `make` workflow convenient for a fixed running kernel, but operationally less suitable for a machine that frequently changes kernels. The repository does not document a general source architecture for data flow beyond the module build structure, so claims about internal packet processing would go beyond the available documentation.

## Manual Build of the 88x2bu Kernel Module

For a manual installation, first open the repository directory and remove artifacts from an earlier build. The documented clean step is:

```bash
make clean
```

Build a module for the kernel that is currently running from the driver directory:

```bash
make
```

A successful build should produce the `88x2bu` kernel module, although the README does not state the exact output filename shown by the build log. To target another installed kernel, replace the placeholder with its version:

```bash
make KSRC=/lib/modules/YOUR_KERNEL_VERSION/build
```

After building for the intended kernel, install it with:

```bash
sudo make install
```

The module must be rebuilt after a kernel update because an external binary module is tied to the kernel build environment. Manual installation also gives the operator direct control over when compilation and installation occur. Its drawback is visible in the documentation itself: forgetting to rebuild after a kernel change can leave the installed module incompatible with the running kernel.

## DKMS Installation Across Kernel Updates

DKMS is the documented path when the external module must be rebuilt as kernels change. The initial sequence clones the repository into `/usr/src/rtl88x2bu-git`, changes the DKMS package version marker from `@PKGVER@` to `git`, and registers the source with DKMS:

```bash
git clone "https://github.com/RinCat/RTL88x2BU-Linux-Driver.git" /usr/src/rtl88x2bu-git
sed -i 's/PACKAGE_VERSION="@PKGVER@"/PACKAGE_VERSION="git"/g' /usr/src/rtl88x2bu-git/dkms.conf
dkms add -m rtl88x2bu -v git
dkms autoinstall
```

The commands assume that DKMS and the required kernel headers are already available. When an existing DKMS checkout needs updating, the documented workflow fetches changes, rebases the local branch, then forces a rebuild and installation:

```bash
cd  /usr/src/rtl88x2bu-git
git fetch
git rebase origin/master --autostash
dkms build rtl88x2bu/git --force
dkms install rtl88x2bu/git --force
```

This reduces manual rebuild work after kernel updates, but it also creates a local source tree and DKMS-managed package that must be maintained consistently. If users later return to the in-kernel driver, the README says to uninstall through the matching manual or DKMS method and remove blacklist entries for `rtw88_8822bu`.

## Switching Linux 6.12+ Systems to the External Module

On Linux 6.12 or newer, the project recommends `rtw88_8822bu`, so choosing `88x2bu` requires a deliberate change. Before building the external module, create a modprobe blacklist file to prevent the in-kernel module from loading:

```bash
echo "blacklist rtw88_8822bu" | sudo tee /etc/modprobe.d/rtw8822bu.conf
```

Install the external driver using either the manual or DKMS procedure, then reboot. The blacklist prevents automatic loading but does not itself build or install `88x2bu`. Existing `rtw88_8822bu` blacklist entries must also be considered when reversing the change, since leaving conflicting entries would undermine the intended rollback to the in-kernel driver.

This is a clear configuration trade-off. The external module is useful when the README's stated fallbacks apply, including an older kernel, a specific compatibility problem, or specialized features and vendor tools. It adds an external source tree, build process, package lifecycle, and possible kernel rebuild cost. On a current distribution kernel with no documented problem, the in-kernel driver has the clearer support path because Linux 6.2 introduced the hardware family and later kernels include substantial improvements.

## Controlling USB 3.0 Fallback with rtw_switch_usb_mode

The driver exposes a module parameter that changes how the adapter communicates over USB. The documented USB 3.0 mode is:

```bash
modprobe 88x2bu rtw_switch_usb_mode=1
```

This can force USB 3.0 operation, but the README warns that an adapter, port, or motherboard without the required support may leave the adapter stuck in a restart loop. If that occurs, removing the parameter and reloading the module restores normal startup. The documented fallback treats the adapter as a USB 2 device:

```bash
modprobe 88x2bu rtw_switch_usb_mode=2
```

A module already loaded must first be unloaded:

```bash
modprobe -r 88x2bu
```

For a persistent USB 3.0 selection, the README specifies `/etc/modprobe.d/99-RTL88x2BU.conf` with this option:

```text
options 88x2bu rtw_switch_usb_mode=1
```

The permanent setting carries the restart-loop risk across boots, so it is a narrower choice than a temporary `modprobe` invocation. The documentation does not claim that forcing USB 3.0 improves transfer rates or guarantees stable operation on every listed adapter.

## Compatibility Limits, Debugging, and Maintenance State

The clearest unsupported case is any newer Realtek 802.11ax chipset such as RTL8852BU. This module is not a general Wi-Fi 6 driver. A second limitation is hardware identity: users must distinguish an adapter that the repository actually recognizes from one whose USB device ID is absent from its whitelist. The README does not publish a complete USB ID table, which makes an unsuccessful `lsusb` result important diagnostic evidence.

For diagnostics, the driver supports a log level of 5 through either `/proc/net/rtl88x2bu/log_level` or a module parameter:

```bash
modprobe 88x2bu rtw_drv_log_level=5
```

The repository is not archived, and its last push was on 2026-10-02. It has no GitHub releases, so `ReleaseNotes.pdf` is the location identified by the README for official release notes. The project is GPL-2.0 licensed. That matters for distribution and modification of the licensed software, but this review does not provide legal advice.

Maintenance work still exists. Manual users must rebuild after kernel changes, DKMS users must keep the source and package versions aligned, and users returning to Linux's own driver must remove both the external installation and its blacklist configuration. There is also no promised Wi-Fi 6 coverage or claim that all RTL8812BU and RTL8822BU product variants are accepted.

## Conclusion

Adopt this repository for an older kernel, a documented in-kernel compatibility problem, or a specific need for its `rtw_switch_usb_mode` control. Do not adopt it as the default choice for Linux 6.12 or newer, and do not expect it to cover RTL8852BU or Wi-Fi 6 adapters. Before installation, verify the adapter's exact Realtek chip and USB ID against the driver's supported-device list, then confirm that matching kernel headers are installed.

## FAQ

### Should I install RinCat RTL88x2BU Linux Driver on Linux 6.12 or newer?

No, not for normal use according to the README. It recommends the in-kernel `rtw88_8822bu` driver on Linux 6.12 or newer and reserves this external module for older kernels, specific compatibility problems, or specialized features and vendor tools.

### How do I install the RinCat RTL88x2BU Linux Driver manually?

Install the required compiler toolchain and matching kernel headers, then run `make clean`, `make`, and `sudo make install` from the repository directory. Rebuild the module after every kernel update unless DKMS is used.

### Does RinCat RTL88x2BU Linux Driver support RTL8852BU and Wi-Fi 6?

No. The README explicitly excludes newer Realtek 802.11ax chipsets such as RTL8852BU. The project is intended for selected RTL8812BU and RTL8822BU adapters.

### What should I do if my RTL8812BU or RTL8822BU adapter does not create a network interface?

The device ID may be missing from the driver's whitelist. The README asks for an issue containing `lsusb` output plus the device name, brand, and website.

## Sources

- [Issues](https://github.com/RinCat/RTL88x2BU-Linux-Driver/issues)
- [License: GPL-2.0](https://github.com/RinCat/RTL88x2BU-Linux-Driver/blob/master/LICENSE)
- [README](https://github.com/RinCat/RTL88x2BU-Linux-Driver/blob/master/README.md)
- [RinCat/RTL88x2BU-Linux-Driver on GitHub](https://github.com/RinCat/RTL88x2BU-Linux-Driver)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/rincat-rtl88x2bu-linux-driver
