Find the answer to your Linux question:
Results 1 to 3 of 3
There is a problem when compiling the Ralink RT3070USB(RT307x) driver version 2.5.0.2, When you manually load the module, you get this error: Code: FATAL: Error inserting rt3070sta Previous Thread 161550 ...
Enjoy an ad free experience by logging in. Not a member yet? Register.
  1. #1
    Just Joined!
    Join Date
    Sep 2011
    Posts
    1

    rt3070sta: module license 'unspecified' taints kernel. REVISITED


    There is a problem when compiling the Ralink RT3070USB(RT307x) driver version 2.5.0.2, 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 2.5.0.2 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.
    Code:
    $lsmod | grep usbcore
    The kbuild (a Makefile for building kernels and modules) looks up the file Module.symvers
    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
    symbol errors.

    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.
    Code:
    $grep 'usb_alloc_urb' Module.symvers
    If the function names are missing, you found the problem. If the Module.symvers file is
    missing, generate it by doing a full kernel build. Here's how
    Code:
    $make oldconfig 
    $make vmlinux
    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
    Code:
    $make prepare
    $make /drivers/usb/core/usbcore.ko
    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)
    Code Before
    Code:
     if (IS_RT30xx(pAd))
            {
                    if (IS_RT3390(pAd))
                            RT33xx_Init(pAd);
                    else
                            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).

    Code after
    Code:
     if (IS_RT30xx(pAd))
            {
                    if (IS_RT3390(pAd))
                            ; // RT33xx_Init(pAd);
                    else
                            RT30xx_Init(pAd);
    Declare the function you need. Insert this code after function declaration
    NetDevNickNameInit, line 230

    Code insert
    Code:
    VOID RT30xx_Init( IN PRTMP_ADAPTER  pAd);

    Now do the make clean, make, and make install. The driver compiles and installs.
    Good luck.

  2. #2
    Administrator jayd512's Avatar
    Join Date
    Feb 2008
    Location
    Kentucky
    Posts
    5,023
    Dude... outstanding research and resolution!
    Even though I'm not in need of that module, I think that this is a great tutorial for a fairly common issue...
    So thanks for posting this!

    BTW... Welcome to the Forums! One helluva first post!
    Jay

    New users, read this first.
    New Member FAQ
    Registered Linux User #463940
    I do not respond to private messages asking for Linux help. Please keep it on the public boards.

  3. #3
    Just Joined!
    Join Date
    Sep 2012
    Posts
    1
    completely awesome
    really useful
    thanks a lot!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •