Hi,
I am trying to add a kernel module for a 5GHz WiFi USB dongle based on the Realtek RTL8812 chip.
The dongle came with Linux driver source code which claims to support MIPS Linux kernels up to 4.11.
My OpenWrt build target is 18.06 on a TP-LINK 3020 variant (ar71xxx).
The problem is, when I go to build this firmware the rtl8812au.ko module does not get built even though 'rtl8812au' is selected via make menuconfig
and the relevant Makefile is being invoked.
Here are the details ...
I have gone through the usual OpenWrt build preparation and confirms it successfully builds firmware without the 'rtl8812au' being in the directory tree.
I created the directory openwrt/packages/kernel/rtl88a12au
and created a Makefile
in that directory.
I created the directory openwrt/package/kernel/rtl8812au/src
and populated it with the source code supplied with the USB dongle.
End result is this directory structure ...
package/kernel/rtl8812au:
total 8
-rw-rw-r-- 1 jeremy jeremy 3832 Nov 29 11:07 Makefile
drwxrwxr-x 7 jeremy jeremy 4096 Nov 29 11:05 src
package/kernel/rtl8812au/src:
total 280
-rw-rw-r-- 1 jeremy jeremy 64 Nov 28 12:28 clean
drwxrwxr-x 4 jeremy jeremy 4096 Nov 28 12:28 core
drwxrwxr-x 8 jeremy jeremy 4096 Nov 28 12:28 hal
-rw-rw-r-- 1 jeremy jeremy 54 Nov 28 12:28 ifcfg-wlan0
drwxrwxr-x 5 jeremy jeremy 12288 Nov 28 12:28 include
-rw-rw-r-- 1 jeremy jeremy 120 Nov 28 12:28 Kconfig
-rw-rw-r-- 1 jeremy jeremy 63452 Nov 29 11:05 Makefile
drwxrwxr-x 3 jeremy jeremy 4096 Nov 28 12:28 os_dep
drwxrwxr-x 2 jeremy jeremy 4096 Nov 28 12:28 platform
-rw-rw-r-- 1 jeremy jeremy 170075 Nov 28 12:28 ReleaseNotes.pdf
-rw-rw-r-- 1 jeremy jeremy 423 Nov 28 12:28 runwpa
-rw-rw-r-- 1 jeremy jeremy 294 Nov 28 12:28 wlan0dhcp
Here is the Makefile I created in package/kernel/rtl8812au (you'll notice I've added some trace writes in the effort to work out what is going on):
#
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
# An attempt to support a 5GHz WiFi USB stick based on Realtek 8811AC chip,
# using the driver source code supplied with the USB stick.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/kernel-defaults.mk
PKG_NAME:=rtl8812au
PKG_RELEASE:=1
# PKG_SOURCE_PROTO:=git
# PKG_SOURCE_URL:=https://github.com/gnab/rtl8812au.git
# PKG_SOURCE_VERSION:=744ebd966f2d967097b780f8d84b683b403f6db2
# PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
# PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
# PKG_VERSION=2019-09-06-$(PKG_SOURCE_VERSION)
PKG_VERSION=1.0
# PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION)
include $(INCLUDE_DIR)/package.mk
define KernelPackage/rtl8812au
SUBMENU:=Wireless Drivers
TITLE:=Driver for Simplecom NW601 801.11ac wireless dongle
DEPENDS:= @USB_SUPPORT +kmod-cfg80211 +kmod-lib80211 +kmod-usb-core
VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)
FILES:= $(PKG_BUILD_DIR)/$(PKG_NAME).ko
# AUTOLOAD:=$(call AutoLoad,NW601_1909)
AUTOLOAD=$(call Autoprobe,$(PKG_NAME))
endef
define KernelPackage/rtl8812au/description
Kernel support for 802.11ac (5GHz) using SimpleCom NW601 USB dongle
endef
define Build/Compile
echo "myDEBUG -> -----------------------------------------------------------------------" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> Build of rtl8812a (NW601) starting at `date`" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PATH=${PATH}" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> LINUX_VERSION=$(LINUX_VERSION)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_NAME=$(PKG_NAME)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_RELEASE=$(PKG_RELEASE)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_VERSION=$(PKG_VERSION)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_SOURCE=$(PKG_SOURCE)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_SOURCE_PROTO=$(PKG_SOURCE_PROTO)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_SOURCE_URL=$(PKG_SOURCE_URL)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_SOURCE_VERSION=$(PKG_SOURCE_VERSION)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_SOURCE_SUBDIR=$(PKG_SOURCE_SUBDIR)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_BUILD_DIR=$(PKG_BUILD_DIR)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> MAKE=$(MAKE)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> KERNEL_MAKEOPTS=$(KERNEL_MAKEOPTS)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> KERNEL_MAKE_FLAGS=$(KERNEL_MAKE_FLAGS)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> KERNEL_BUILD_DIR=$(KERNEL_BUILD_DIR)" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> Starting ..." >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
$(MAKE) -d $(KERNEL_MAKEOPTS) M=$(PKG_BUILD_DIR) \
USER_EXTRA_CFLAGS="-D_LINUX_BYTEORDER_SWAB_H -DCONFIG_BIG_ENDIAN -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT" \
CONFIG_RTL8812A=y CONFIG_RTL8821A=y CONFIG_RTL8812AU_8821AU=m CONFIG_PLATFORM_I386_PC=n CONFIG_PLATFORM_MIPS_AR9132=y \
src=$(PKG_BUILD_DIR) \
modules
echo "myDEBUG -> Finished at `date`" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
endef
$(eval $(call KernelPackage,rtl8812au))
I've added some $(info)
statements to the vendor-supplied Makefile (in rtl8812au/src) to show me what's going on there. The result when I run the build is this series of trace writes. The lines beginning "echo myDEBUG" are from the 'outer' Makefile (the one I created), the lines beginning 'rtl8812uaDEBUG' are from the vendor-supplied Makefile (and yes, I know I've transposed 'ua' and 'au' in my trace write):
$ make package/kernel/rtl8812au/compile V=sc
...
echo "myDEBUG -> -----------------------------------------------------------------------" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> Build of rtl8812a (NW601) starting at `date`" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PATH=/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/bin:/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/bin:/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/host/bin:/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/host/bin:/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/host/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> LINUX_VERSION=4.9.202" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_NAME=rtl8812au" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_RELEASE=1" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_VERSION=1.0" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_SOURCE=" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_SOURCE_PROTO=" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_SOURCE_URL=" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_SOURCE_VERSION=" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_SOURCE_SUBDIR=" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> PKG_BUILD_DIR=/home/jeremy/myWatt/Firmware/build_V4/openwrt/build_dir/target-mips_24kc_musl/linux-ar71xx_generic/rtl8812au-1.0" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> MAKE=make" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> KERNEL_MAKEOPTS=-C /home/jeremy/myWatt/Firmware/build_V4/openwrt/build_dir/target-mips_24kc_musl/linux-ar71xx_generic/linux-4.9.202 HOSTCFLAGS="-O2 -I/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/host/include -I/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/hostpkg/include -I/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/target-mips_24kc_musl/host/include -Wall -Wmissing-prototypes -Wstrict-prototypes" CROSS_COMPILE="mips-openwrt-linux-musl-" ARCH="mips" KBUILD_HAVE_NLS=no KBUILD_BUILD_USER="" KBUILD_BUILD_HOST="" KBUILD_BUILD_TIMESTAMP="Tue Nov 26 16:04:17 2019" KBUILD_BUILD_VERSION="0" HOST_LOADLIBES="-L/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/host/lib" CONFIG_SHELL="bash" V=1 cmd_syscalls= KERNELRELEASE=4.9.202 CC="mips-openwrt-linux-musl-gcc"" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> KERNEL_MAKE_FLAGS=HOSTCFLAGS="-O2 -I/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/host/include -I/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/hostpkg/include -I/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/target-mips_24kc_musl/host/include -Wall -Wmissing-prototypes -Wstrict-prototypes" CROSS_COMPILE="mips-openwrt-linux-musl-" ARCH="mips" KBUILD_HAVE_NLS=no KBUILD_BUILD_USER="" KBUILD_BUILD_HOST="" KBUILD_BUILD_TIMESTAMP="Tue Nov 26 16:04:17 2019" KBUILD_BUILD_VERSION="0" HOST_LOADLIBES="-L/home/jeremy/myWatt/Firmware/build_V4/openwrt/staging_dir/host/lib" CONFIG_SHELL="bash" V=1 cmd_syscalls= KERNELRELEASE=4.9.202" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> KERNEL_BUILD_DIR=/home/jeremy/myWatt/Firmware/build_V4/openwrt/build_dir/target-mips_24kc_musl/linux-ar71xx_generic" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
echo "myDEBUG -> Starting ..." >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
rtl8812uaDEBUG -> Beginning of Makefile 'configuring' section
rtl8812uaDEBUG -> EXTRA_CFLAGS= -D_LINUX_BYTEORDER_SWAB_H -DCONFIG_BIG_ENDIAN -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT -O1 -Wno-unused-variable -Wno-unused-value -Wno-unused-label -Wno-unused-parameter -Wno-unused-function -Wno-unused -Wno-date-time -I/home/jeremy/myWatt/Firmware/build_V4/openwrt/build_dir/target-mips_24kc_musl/linux-ar71xx_generic/rtl8812au-1.0/include
rtl8812uaDEBUG -> EXTRA_LDFLAGS= --strip-debug
rtl8812uaDEBUG -> KERNELRELEASE=4.9.202
rtl8812uaDEBUG -> End of Makefile 'configuring' section
rtl8812uaDEBUG -> USER_MODULE_NAME=
rtl8812uaDEBUG -> MODULE_NAME=8812au
rtl8812uaDEBUG -> KERNELRELEASE not null
rtl8812uaDEBUG -> At end of KERNELRELEASE not null, MODULE_NAME=8812au and obj-m=
rtl8812uaDEBUG -> Beginning of Makefile 'configuring' section
rtl8812uaDEBUG -> EXTRA_CFLAGS=-D_LINUX_BYTEORDER_SWAB_H -DCONFIG_BIG_ENDIAN -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT -O1 -Wno-unused-variable -Wno-unused-value -Wno-unused-label -Wno-unused-parameter -Wno-unused-function -Wno-unused -Wno-date-time -I/home/jeremy/myWatt/Firmware/build_V4/openwrt/build_dir/target-mips_24kc_musl/linux-ar71xx_generic/rtl8812au-1.0/include
rtl8812uaDEBUG -> EXTRA_LDFLAGS=--strip-debug
rtl8812uaDEBUG -> KERNELRELEASE=4.9.202
rtl8812uaDEBUG -> End of Makefile 'configuring' section
rtl8812uaDEBUG -> USER_MODULE_NAME=
rtl8812uaDEBUG -> MODULE_NAME=8812au
rtl8812uaDEBUG -> KERNELRELEASE not null
rtl8812uaDEBUG -> At end of KERNELRELEASE not null, MODULE_NAME=8812au and obj-m=
echo "myDEBUG -> Finished at `date`" >> /home/jeremy/myWatt/Firmware/build_V4/rtl8812_NW601.log
It's my understanding that the vendor-supplied Makefile should be invoked twice, once with KERNELRELEASE set to the Kernel version (4.9.202 in this case) and once with KERNELRELEASE not defined (or defined with no value), but the trace log shows that KERNELRELEASE=4.9.202 on both invocations.
Any suggestions?
Thanks,
Jeremy Begg