Failed to install driver for USB-wifi adaptor RTL8188CUS on L4T R23.1 on Tx1 board

Hi folks,

I’m trying to put an extra wifi adaptor to the Jetson Tx1 board. The chip of that USB-wifi adaptor is RTL8188CUS. It works well on raspberry pi so I thought it will also work on Tx1. But I’m wrong. It seems because L4T R23.1 use Linux kernel 3.10.67 and there isn’t any available driver for it.

I already tried few things:

The firmware rtl8192cu in this threadhttp://elinux.org/Jetson/Network_Adapters#Wifi_adapters_tested_on_Jetson_TK1 doesn’t work

Compile the kernel and install driver following this threadhttps://devtalk.nvidia.com/default/topic/760714/jetson-tk1-wifi-edimax-usb-nano/ doesn’t work. I post the error on StackOverflowhttp://stackoverflow.com/questions/36782426/failed-to-install-compiled-driver-for-rtl8188cus-on-l4t-r23-1

apt-get install linux-firmware

will install lots of firmware but also doesn’t work :(

So has anyone ever tried an extra wifi adaptor that works? I don’t care to buy another adaptor or if you try some method that works please just tell me. I have been stuck at this driver stuff for a whole week.

Regards,
Jason

I’m not a wireless guy, but there are some details on a JTX1 kernel build which differ somewhat different than the average Linux install (including differences from building for a JTK1, which is what the thread information was based on). Basically until the next L4T release you need two compilers and really must cross-compile to do a correct JTX1 kernel build (kernel is 64-bit, user space is 32-bit…a 64-bit full tool chain and a 32-bit compiler do the job).

Do you have a tutorial about the cross-compile?

This is correct…cross-compile and copy is actually the easiest way to deal with it.

I do not know which USB WiFi devices would be supported out of the box. Many of the common wired devices are already configured…it can be a painful process to research chipsets behind any wireless to find out which driver is required, but that’s basically how it goes. There is some good information here, but often it just means you still need to do some sort of configuration, and some of the data is for Jetson TK1…most drivers working on a JTK1 should work on a JTX1:
http://elinux.org/Jetson/Network_Adapters

I do not have an Ubuntu host (I use Fedora), so I use the precompiled binaries from Linaro (or in some cases build tool chains from scratch…a very difficult task). I use the 5.2 release dated 2015.11…if you don’t have the “easier” install of packages directly installable by a package manager, I’d suggest starting here:
http://releases.linaro.org/components/toolchain/binaries/5.2-2015.11-2/

I’ll use my system’s install path, for which my 64-bit chain is located at:

/usr/local/gcc-linaro-5.2-2015.11-x86_64_aarch64-linux-gnu

…my 32-bit chain is located at:

/usr/local/gcc-linaro-5.2-2015.11-x86_64_arm-linux-gnueabihf

My kernel build output and module output locations are set at:

${HOME}/Documents/embedded/L4T/kernel_build
${HOME}/Documents/embedded/L4T/kernel_modules

Wherever you’ve unpacked the kernel source on your host, this example assumes you already cd’d there, and assumes output directories already exist and are clean and empty:

export CROSS_COMPILE=/usr/local/gcc-linaro-5.2-2015.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
export CROSS32CC=/usr/local/gcc-linaro-5.2-2015.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
export ARCH=arm64
export TEGRA_KERNEL_OUT=${HOME}/Documents/embedded/L4T/kernel_build
export TEGRA_MODULES_OUT=${HOME}/Documents/embedded/L4T/kernel_modules
make O=$TEGRA_KERNEL_OUT tegra21_defconfig
make O=$TEGRA_KERNEL_OUT menuconfig
make O=$TEGRA_KERNEL_OUT zImage
make O=$TEGRA_KERNEL_OUT dtbs
make O=$TEGRA_KERNEL_OUT modules
make O=$TEGRA_KERNEL_OUT modules_install INSTALL_MOD_PATH=$TEGRA_MODULES_OUT

This thread is basically the cross-compile topic:
https://devtalk.nvidia.com/default/topic/929186/jetson-tx1/jetson-tx1-kernel-compilation/

You probably can skip the dtbs step, but it won’t hurt. Be very careful to set the CONFIG_LOCALVERSION (mentioned in the other thread).

Regarding your specific use case, should you be able to compile and build everything just with modules, then you don’t need to install the main kernel Image file, just the modules for that specific addition. Most WiFi also have a firmware package which the package manager may make available via an extra firmware package…if you have to manually install that firmware, then it’ll end up in “/lib/firmware”. The dtbs build output is unlikely to be required unless you are changing pinmux or something which has to be available right as the kernel loads…WiFi drivers mostly only need to load after the kernel is up and running; firmware in “/lib/firmware” gets loaded into the actual device.

Additional note: This u-boot is not set up for decompression of 64-bit systems, so “Image” is used instead of “zImage”…it doesn’t hurt to save both since u-boot may get updates in the future and the file would already be there…but as currently configured you must install the uncompressed “Image” file (in contrast most releases just use zImage and skip Image).