Skip to content

Instantly share code, notes, and snippets.

@heri16
Last active January 19, 2026 07:55
Show Gist options
  • Select an option

  • Save heri16/935d9e3595f27a5247bc1b3046979ef9 to your computer and use it in GitHub Desktop.

Select an option

Save heri16/935d9e3595f27a5247bc1b3046979ef9 to your computer and use it in GitHub Desktop.
Openwrt Linux drivers for Realtek Wi-Fi 6/6E and Wi-Fi 7 adapters and cards
docker run --rm -v "$(pwd)"/bin/:/builder/bin -it ghcr.io/openwrt/sdk:ipq40xx-generic-24.10.5
# inside the Docker container
[ ! -d ./scripts ] && ./setup.sh
# See: https://openwrt.org/docs/guide-developer/toolchain/using_the_sdk#load_package_lists
./scripts/feeds update base
./scripts/feeds update packages
#./scripts/feeds update -a
#./scripts/feeds uninstall -a
#./scripts/feeds install kmod-mac80211
#./scripts/feeds install -a
#curl https://downloads.openwrt.org/releases/24.10.5/targets/ipq40xx/generic/config.buildinfo -o .config
#make menuconfig
# Add Makefile for out-of-tree kernel modules
# Attribution: https://github.com/openwrt/openwrt/blob/main/package/kernel/mac80211/Makefile
install -D -m 0644 /dev/stdin ./package/kernel/rtw89/Makefile <<'EOF'
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=rtw89
PKG_VERSION:=20260106
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/morrownr/rtw89.git
PKG_SOURCE_VERSION:=2544ebfad763599407f0f23622db7356ef3dbcb4
#PKG_MIRROR_HASH:=skip
#PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=Heri Sim <nbd@nbd.name>
PKG_DRIVERS = \
PKG_CONFIG_DEPENDS:= \
CONFIG_PACKAGE_kmod-mac80211 \
CONFIG_PACKAGE_CFG80211_TESTMODE \
CONFIG_PACKAGE_MAC80211_DEBUGFS \
CONFIG_PACKAGE_MAC80211_MESH \
CONFIG_PACKAGE_MAC80211_TRACING \
CONFIG_PACKAGE_IWLWIFI_DEBUG \
CONFIG_PACKAGE_IWLWIFI_DEBUGFS \
CONFIG_PACKAGE_RTLWIFI_DEBUG \
RTW89_MAKE_OPTS= -C $(PKG_BUILD_DIR) \
PATH="$(TARGET_PATH)" \
ARCH="$(LINUX_KARCH)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
TARGET="$(HAL_TARGET)" \
TOOLPREFIX="$(KERNEL_CROSS)" \
TOOLPATH="$(KERNEL_CROSS)" \
KERNELPATH="$(LINUX_DIR)" \
KERNELDIR="$(LINUX_DIR)" \
LDOPTS=" " \
DOMULTI=1
include $(INCLUDE_DIR)/package.mk
WMENU:=Wireless Drivers
define KernelPackage/mac80211/Default
SUBMENU:=$(WMENU)
URL:=https://github.com/morrownr/rtw89
endef
config-y:= \
WLAN
include realtek.mk
ifneq ($(CONFIG_PACKAGE_kmod-cfg80211),)
define Build/Compile/kmod
rm -rf $(PKG_BUILD_DIR)/modules
+$(MAKE) $(PKG_JOBS) $(MAKE_OPTS) modules
endef
endif
define Build/Compile
$(SH_FUNC) var2file "$(call shvar,mac80211_config)" $(PKG_BUILD_DIR)/.config
$(MAKE) $(MAKE_OPTS) allnoconfig
$(call Build/Compile/kmod)
endef
$(eval $(foreach drv,$(PKG_DRIVERS),$(call KernelPackage,$(drv))))
#$(eval $(call KernelPackage,cfg80211))
#$(eval $(call KernelPackage,mac80211))
EOF
# Add Makefile for out-of-tree device firmware
# Attribution: https://github.com/openwrt/openwrt/blob/main/package/firmware/linux-firmware/Makefile
install -D -m 0644 /dev/stdin ./package/firmware/rtw89-firmware/Makefile <<'EOF'
include $(TOPDIR)/rules.mk
PKG_NAME:=rtw89-firmware
PKG_VERSION:=20260106
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/morrownr/rtw89.git
PKG_SOURCE_VERSION:=2544ebfad763599407f0f23622db7356ef3dbcb4
#PKG_MIRROR_HASH:=skip
PKG_LICENSE_FILES:=firmware/LICENCE.*
PKG_MAINTAINER:=Heri Sim <nbd@nbd.name>
SCAN_DEPS = *.mk
include $(INCLUDE_DIR)/package.mk
RSTRIP:=:
STRIP:=:
define Package/firmware-default
SECTION:=firmware
CATEGORY:=Firmware
URL:=https://github.com/morrownr/rtw89.git
TITLE:=$(1)
DEPENDS:=$(2)
LICENSE_FILES:=$(3)
LICENSE:=$(4)
endef
define Build/Compile
endef
include $(wildcard ./*.mk)
#$(eval $(call BuildPackage,linux-firmware))
EOF
# Drivers
# Attribution: https://github.com/openwrt/openwrt/blob/main/package/kernel/mac80211/realtek.mk
install -D -m 0644 /dev/stdin ./package/kernel/rtw89/realtek.mk <<'EOF'
PKG_DRIVERS += \
rtw89-git rtw89-pci-git rtw89-usb-git rtw89-8851be-git rtw89-8851bu-git rtw89-8852ae-git rtw89-8852au-git \
rtw89-8852b-common-git rtw89-8852be-git rtw89-8852bu-git rtw89-8852bte-git rtw89-8852ce-git rtw89-8852cu-git \
rtw89-8922ae-git rtw89-8922au-git
config-$(call config_package,rtw89-git) += RTW89 RTW89_CORE_GIT
config-$(call config_package,rtw89-pci-git) += RTW89_PCI_GIT
config-$(call config_package,rtw89-8851be-git) += RTW89_8851B RTW89_8851BE_GIT
config-$(call config_package,rtw89-8851bu-git) += RTW89_8851B RTW89_8851BU_GIT
config-$(call config_package,rtw89-8852ae-git) += RTW89_8852A RTW89_8852AE_GIT
config-$(call config_package,rtw89-8852au-git) += RTW89_8852A RTW89_8852AU_GIT
config-$(call config_package,rtw89-8852b-common-git) += RTW89_8852B_COMMON_GIT
config-$(call config_package,rtw89-8852be-git) += RTW89_8852B RTW89_8852BE_GIT
config-$(call config_package,rtw89-8852bu-git) += RTW89_8852B RTW89_8852BU_GIT
config-$(call config_package,rtw89-8852bte-git) += RTW89_8852BT RTW89_8852BTE_GIT
config-$(call config_package,rtw89-8852ce-git) += RTW89_8852C RTW89_8852CE_GIT
config-$(call config_package,rtw89-8852cu-git) += RTW89_8852C RTW89_8852CU_GIT
config-$(call config_package,rtw89-8922ae-git) += RTW89_8922A RTW89_8922AE_GIT
config-$(call config_package,rtw89-8922au-git) += RTW89_8922A RTW89_8922AU_GIT
config-$(CONFIG_PACKAGE_RTW89_GIT_DEBUG) += RTW89_GIT_DEBUG
config-$(CONFIG_PACKAGE_RTW89_GIT_DEBUGFS) += RTW89_GIT_DEBUGFS
config-$(CONFIG_PACKAGE_RTW89_GIT_DEBUGMSG) += RTW89_GIT_DEBUGMS
define KernelPackage/rtw89-git/config
config PACKAGE_RTW89_GIT_DEBUG
bool "Realtek wireless debugging (rtw89-git)"
depends on PACKAGE_kmod-rtw89-git
help
Enable debugging output for rtw89 devices.
config PACKAGE_RTW89_GIT_DEBUGFS
bool "Enable rtw89-git debugfs support"
select KERNEL_DEBUG_FS
depends on PACKAGE_kmod-rtw89-git
help
Select this to see extensive information about
the internal state of rtw89 in debugfs.
config PACKAGE_RTW89_GIT_DEBUGMSG
bool "Realtek rtw89-git debug message support"
depends on PACKAGE_kmod-rtw89-git
help
Enable debug message support.
endef
define KernelPackage/rtw89-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTW89 core
DEPENDS+= +@DRIVER_11AC_SUPPORT +@DRIVER_11AX_SUPPORT +kmod-mac80211
FILES:=$(PKG_BUILD_DIR)/rtw89_core_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_core_git)
HIDDEN:=1
endef
define KernelPackage/rtw89-pci-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTW89 PCI chips support (git)
DEPENDS+= @PCI_SUPPORT +kmod-rtw89-git
FILES:=$(PKG_BUILD_DIR)/rtw89_pci_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_pci_git)
HIDDEN:=1
endef
define KernelPackage/rtw89-usb-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTW89 USB chips support (git)
DEPENDS+= @PCI_SUPPORT +kmod-rtw89-git
FILES:=$(PKG_BUILD_DIR)/rtw89_usb_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_usb_git)
HIDDEN:=1
endef
define KernelPackage/rtw89-8851be-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8851BE support (git)
DEPENDS+= +kmod-rtw89-pci-git +rtl8851b-firmware
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8851b_git.ko \
$(PKG_BUILD_DIR)/rtw89_8851be_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8851be_git)
endef
define KernelPackage/rtw89-8851bu-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8851BU support (git)
DEPENDS+= +kmod-rtw89-usb-git +rtl8851b-firmware
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8851b_git.ko \
$(PKG_BUILD_DIR)/rtw89_8851bu_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8851bu_git)
endef
define KernelPackage/rtw89-8852ae-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8852AE support (git)
DEPENDS+= +kmod-rtw89-pci-git +rtl8852a-firmware
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8852a_git.ko \
$(PKG_BUILD_DIR)/rtw89_8852ae_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8852ae_git)
endef
define KernelPackage/rtw89-8852au-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8852AU support (git)
DEPENDS+= +kmod-rtw89-usb-git +rtl8852a-firmware
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8852a_git.ko \
$(PKG_BUILD_DIR)/rtw89_8852au_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8852au_git)
endef
define KernelPackage/rtw89-8852b-common-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8852B family support (git)
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8852b_common_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8852b_common_git)
HIDDEN:=1
endef
define KernelPackage/rtw89-8852be-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8852BE support (git)
DEPENDS+= +kmod-rtw89-8852b-common-git +kmod-rtw89-pci-git +rtl8852b-firmware
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8852b_git.ko \
$(PKG_BUILD_DIR)/rtw89_8852be_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8852be_git)
endef
define KernelPackage/rtw89-8852bu-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8852BU support (git)
DEPENDS+= +kmod-rtw89-8852b-common-git +kmod-rtw89-usb-git +rtl8852b-firmware
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8852b_git.ko \
$(PKG_BUILD_DIR)/rtw89_8852bu_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8852bu_git)
endef
define KernelPackage/rtw89-8852bte-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8852BTE support (git)
DEPENDS+= +kmod-rtw89-8852b-common-git +kmod-rtw89-pci-git +rtl8852bt-firmware
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8852bt_git.ko \
$(PKG_BUILD_DIR)/rtw89_8852bte_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8852bte_git)
endef
define KernelPackage/rtw89-8852ce-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8852CE support (git)
DEPENDS+= +kmod-rtw89-pci-git +rtl8852c-firmware
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8852c_git.ko \
$(PKG_BUILD_DIR)/rtw89_8852ce_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8852ce_git)
endef
define KernelPackage/rtw89-8852cu-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8852CU support (git)
DEPENDS+= +kmod-rtw89-usb-git +rtl8852c-firmware
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8852c_git.ko \
$(PKG_BUILD_DIR)/rtw89_8852cu_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8852cu_git)
endef
define KernelPackage/rtw89-8922ae-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8922AE support (git)
DEPENDS+= +kmod-rtw89-pci-git +rtl8922a-firmware +@DRIVER_11BE_SUPPORT
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8922a_git.ko \
$(PKG_BUILD_DIR)/rtw89_8922ae_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8922ae_git)
endef
define KernelPackage/rtw89-8922au-git
$(call KernelPackage/mac80211/Default)
TITLE:=Realtek RTL8922AU support (git)
DEPENDS+= +kmod-rtw89-usb-git +rtl8922a-firmware +@DRIVER_11BE_SUPPORT
FILES:= \
$(PKG_BUILD_DIR)/rtw89_8922a_git.ko \
$(PKG_BUILD_DIR)/rtw89_8922au_git.ko
AUTOLOAD:=$(call AutoProbe,rtw89_8922au_git)
endef
EOF
# Firmwares
# Attribution: https://github.com/openwrt/openwrt/blob/main/package/firmware/linux-firmware/realtek.mk
install -D -m 0644 /dev/stdin ./package/firmware/rtw89-firmware/realtek.mk <<'EOF'
Package/rtl8851b-firmware = $(call Package/firmware-default,RealTek RTL8851B firmware)
define Package/rtl8851b-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/firmware/rtw8851b_fw.bin $(1)/lib/firmware/rtw89
endef
$(eval $(call BuildPackage,rtl8851b-firmware))
Package/rtl8852a-firmware = $(call Package/firmware-default,RealTek RTL8852A firmware)
define Package/rtl8852a-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/firmware/rtw8852a_fw.bin $(1)/lib/firmware/rtw89
endef
$(eval $(call BuildPackage,rtl8852a-firmware))
Package/rtl8852b-firmware = $(call Package/firmware-default,RealTek RTL8852B firmware)
define Package/rtl8852b-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/firmware/rtw8852b_fw-1.bin $(1)/lib/firmware/rtw89
endef
$(eval $(call BuildPackage,rtl8852b-firmware))
Package/rtl8852bt-firmware = $(call Package/firmware-default,RealTek RTL8852BT firmware)
define Package/rtl8852bt-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/firmware/rtw8852bt_fw.bin $(1)/lib/firmware/rtw89
endef
$(eval $(call BuildPackage,rtl8852bt-firmware))
Package/rtl8852c-firmware = $(call Package/firmware-default,RealTek RTL8852C firmware)
define Package/rtl8852c-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/firmware/rtw8852c_fw-2.bin $(1)/lib/firmware/rtw89
endef
$(eval $(call BuildPackage,rtl8852c-firmware))
Package/rtl8922a-firmware = $(call Package/firmware-default,RealTek RTL8922A firmware)
define Package/rtl8922a-firmware/install
$(INSTALL_DIR) $(1)/lib/firmware/rtw89
$(INSTALL_DATA) $(PKG_BUILD_DIR)/firmware/rtw8922a_fw-4.bin $(1)/lib/firmware/rtw89
endef
$(eval $(call BuildPackage,rtl8922a-firmware))
EOF
# See: https://openwrt.org/docs/guide-developer/toolchain/single.package#kernel_modules
curl https://downloads.openwrt.org/releases/24.10.5/targets/ipq40xx/generic/config.buildinfo -o .config
#make tools/install
#make toolchain/install
make menuconfig
./scripts/feeds install kmod-mac80211
make target/linux/compile -j$(nproc) V=s || true
make package/kernel/linux/compile -j$(nproc) V=s
make package/firmware/rtw89-firmware/compile -j$(nproc) V=s
# Clean if recompile
make target/linux/clean || true
make package/kernel/linux/clean
make package/firmware/rtw89-firmware/clean
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment