rtl8812au driver installation for TK1 baseline kernel 3.10.40-gdacac96

Hi I bought a Edimax AC600 wireless adapter which requires the rtl8812au driver. I saw here
http://elinux.org/Jetson/Network_Adapters#Wifi_adapters_tested_on_Jetson_TK1 that this model was tested and working, but it appears to only be on the grinch kernel. I would like to install it on the baseline kernel, and I was wondering if there was an easy modification.

When I try to install the linked driver, I get a path error. I tried editing the install path in the makefile, but after installation the driver didn’t work and furthermore it killed my ethernet connection and gui as well. Thoughts?

I do not have one of these, but the URL you mention has this:

Download & unzip Media:rtl8192cufw.bin.zip,
Then copy this firmware driver into the "/lib/firmware/rtlwifi" folder on the device using root permissions.
Finally, set the Wifi settings either through your Desktop Environment's NetworkManager GUI or from command-line by editing "/etc/wpa_supplicant.conf" with root permissions, as shown here.

The URL for the zip is http://elinux.org/images/a/a8/Rtl8192cufw.bin.zip.

Regardless of kernel driver, the firmware would be required…it’s possible this is the issue, and appears to be at least part of what Grinch had added. Was the firmware file put in place?

EDIT: Also, did you try the rtl8812au zip put into the kernel source tree on your Jetson, or cross compiling? For either, what did you use for your initial .config?

Thanks for the suggestions. I guess I’m not sure what is meant by the firmware driver. I am compiling the driver source code from the last row of the table directly on the tegra, and it spits out a 8812au.ko file. I do a make install and it puts it in /lib/modules//kernel/drivers/net/wireless/. As mentioned in the first entry, I had to modify the makefile to give the correct kernel name. After a modprobe and a reboot, I had the problems I described.

Also, what do you mean by .config? I did not touch a file by that name. Should I have?

First, a description of firmware versus other programming…

Many devices need to have software downloaded to the device in order to function; this software does not reside in your computer’s operating system, except perhaps to act as a download server to the device. Wireless devices in particular need different programming depending on what part of the world they will go to…regulations and radio standards differ in different countries. Had the device been hard wired without firmware, then the device would require manufacturing a different device for each country with any difference in standards…or worse, the device would go into the trash can if standards change. Firmware is that part of the software going into the device which may change over time.

Software which gets downloaded/uploaded into the wireless device will be in a subdirectory of “/lib/firmware”. Any settings required to be used in conjunction with the firmware and/or other device setup required prior to the kernel itself loading go into the device tree software which the boot loader can read. If you lack the firmware in “/lib/firmware”, then your device is incapable of running. If you have the firmware, then and only then can the required setup of the device tree source be loaded. At this point the boot loader can hand off to linux to take over, and linux can load the driver module to deal with that variation of the hardware.

Drivers are part of the kernel, and run inside of the Linux operating system. The file you produced with the “.ko” extension is a driver which is in a module format and can be loaded or unloaded while the system runs. Typically the module format requires the module to be compiled against a kernel with the same non-module features configured…a module designed to fit a certain “shape” of features and offsets in the kernel would have to be very very lucky to work correctly on a different kernel fixed feature set (modules don’t count, they don’t alter the shape of the kernel interface). The primary method of setting up the kernel features is via the “.config” file at the root of the kernel source when you go to build. One exception is if you were to name a default configuration to use for a given system…which works if your kernel never altered the non-module part of that configuration.

So to succeed with your wireless device you must pass these requirements:

  1. Firmware in /lib/firmware must be available for loading into the device.
  2. Device tree configuration is available for pre-boot configuration, and matches the firmware.
  3. The kernel has a driver (via module in this case) designed for that kernel configuration.
  4. Other configuration software can then work.

You won’t need to worry about the device tree unless an entirely new firmware standard comes out. From the earlier quoted information, did you put the required file in /lib/firmware?

FYI, if your kernel module was compiled against an incorrect kernel version, it would probably give some errors during modprobe, depmod, or insmod. If your firmware is missing or wrong, then the system could crash, or more likely, the device just wouldn’t work.

The “other” configuration software is simply the general tools for configuring wireless networks. These are the commands to do things like search for wireless networks and view channels.

Thanks for the detailed writeup, that clarified quite a few things for me.

I did not place the firmware in /lib/firmware. I did a quick search for it on Edimax website but they don’t list it for download. I’m not sure where else to look for it…

I’m not sure about whether this driver, designed for Grinch kernel, is compatable with the L4T kernel I have, nor am I sure how to determine that (other than assuming it is fine if modprobe doesn’t throw a fit).

I’m considering just moving to the grinch kernel, since this is turning out to be more complicated than compiling a kernel module. I plan to read through the list on that topic and get the details, but would love a quick pro/con from someone who’s used it.

Much of the Grinch kernel started with the same configuration as the default, so many modules compiled against the stock kernel will work (no guarantee). The Grinch kernel probably also added firmware for addition somewhere in /lib/firmware/. Part of what makes the Grinch kernel popular is the bundling of things needed for wireless, but I do not have personal experience using that kernel.