rt3070sta: module license 'unspecified' taints kernel. REVISITED
There is a problem when compiling the Ralink RT3070USB(RT307x) driver version 184.108.40.206, When you manually load the module, you get this error: Code: FATAL: Error inserting rt3070sta
Previous Thread 161550
I am using Debian kernel 2.6.26-2-686, with Ralink driver 220.127.116.11 from April 7, 2011.
This post is for the RT3070/3370/RT5370/RT5372 chipsets. I am using the TP-Link TL-WN7200ND
USB adaptor on an Intel P4/Xeon 32 bit system. The compiles I tried were for CHIPSET=3070,
TARGET=LINUX, WIFI_MODE = STA.
On compile I received the module license 'unspecified' taints kernel message and the
unknown symbol in module, or unknown parameter errors as specified in waterhead post
from March 17, 2010. I tried the driver license fix. It resolved the license unspecified
problem. But I still received the unknown symbol errors, and, spent many days to find
a solution. I finally got the driver to compile and inserted it into the kernel.
The driver works OK.
Here's the problem: the driver module is dependent on the usbcore.ko module. The driver
module reads symbols which are defined in usbcore.ko. While the usbcore.ko module maybe
present in the kernel by default, check here, the required symbols maybe absent
when you insert the driver.
The kbuild (a Makefile for building kernels and modules) looks up the file Module.symvers
$lsmod | grep usbcore
for symbols. When a revised kernel or module is built the Module.symvers is
revised to include any new symbols introduced in the compile. When the driver does not
find the symbols it needs it fails with the unknown symbols errors. The solution is to
compile usbcore module with kbuild. Next compile the driver. It resolves the unknown
Start here in the LINUX_SRC directory ( in my case /lib/modules/$(shell uname -r)/build).
If you do not find this directory, you may be missing the Linux kernel source code.
There could be a Module.symvers file here. You can grep this file to look for the
usb_xxx function call names or symbols.
If the function names are missing, you found the problem. If the Module.symvers file is
$grep 'usb_alloc_urb' Module.symvers
missing, generate it by doing a full kernel build. Here's how
Check again for the usb_xxx function names. If the names are missing, compile the
module usbcore.ko . First prepare the kernel source tree for building external
modules, next make the module
Now the symbols are inserted into Module.symvers and available to the driver.
Go back to your driver directory, do make clean, make, and make install.
The driver compile may fail at this point, in the file chips/rtmp_chip.c with an error
message called implicit declaration of functions RT33xx_Init(pAd) and RT30xx_Init(pAd)
These functions are defined outside rtmp_chip.c. Here's one solution. Comment out
the function you don't need. In my case RT33xx_Init(pAd).
Declare the function you need. Insert this code after function declaration
; // RT33xx_Init(pAd);
NetDevNickNameInit, line 230
VOID RT30xx_Init( IN PRTMP_ADAPTER pAd);
Now do the make clean, make, and make install. The driver compiles and installs.