AIRETOS AEX-QCA9880-NX wifi module on jetson nano

I finally got around to trying the fix today! it worked like a charm. I have to say that figuring out how to build and flash the DTB and kernel was a pain though… the instructions are not very well written in my opinion. Anyway, for reference here is a step by step:

Required:
Computer with Ubuntu and Jetpack SDK installer, with the Jetson Nano jetpack downloaded

Steps:

  • On the computer go to the folder where Jetpack is installed

    cd ~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra
    
  • Find the tag for the kernel sources you need. For Jetpack 4.3 it was tegra-l4t-r32.3.1

  • Use source_sync.sh script to download the kernel sources, you will be asked for the above tag to download the correct version of the sources

    $ ./source_sync.sh
    
  • After the above finishes, the source files will be at:

    ~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra/sources
    
  • Find the file mentioned in th post above:

  • remove the lines mentioned
  • Continue building the kernel, set the output folder where you want the new files to be built:

    $ TEGRA_KERNEL_OUT=~/KernelBuild
    
  • Find the path to. the arm64 toolchain

    $ which aarch64-linux-gnu-cpp
    

    the output should be something like: /usr/bin/aarch64-linux-gnu-cpp

  • Set the variables for cross-compiling, use the output from the above command with. out the cpp part:

    $ export CROSS_COMPILE=/usr/bin/aarch64-linux-gnu-
    $ export LOCALVERSION=-tegra
    
  • Create the .config file by executing the following commands:

    $ cd ~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra/sources/kernel/kernel-4.9
    $ mkdir -p $TEGRA_KERNEL_OUT
    $ make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig
    
  • Build the Kernel and all DTBs (note <n> is the number of processors available -1):

    $ make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j<n>
    
  • Copy the created image and DTBs to the JetPack folder:

    $ cp $TEGRA_KERNEL_OUT/arch/arm64/boot/Image ~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra/kernel/Image
    $ cp -r $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/* ~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra/kernel/dtb/
    
  • Install the Kernel Modules:

    $ sudo make ARCH=arm64 O=$TEGRA_KERNEL_OUT modules_install INSTALL_MOD_PATH=~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra/rootfs/
    
  • create an archive of. the kernel modules and replace the old ones (replace <yourusername> with your linux user to set the correct owner of the file) :

    $ cd <modules_install_path>
    $ sudo tar --owner root --group root -cjf kernel_supplements.tbz2 lib/modules
    $ mv ~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra/kernel/kernel_supplements.tbz2 ~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra/kernel/kernel_supplements.tbz2.orig
    $ sudo mv kernel_supplements.tbz2 ~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra/kernel/
    $ sudo chown <yourusername>:<yourusername> ~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra/kernel/kernel_supplements.tbz2
    
  • Apply the binaries you just created:

    $ cd ~/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO/Linux_for_Tegra
    $ sudo ./apply_binaries.sh
    
  • At this point you either need to create an SD Card image for the Nano, or in my case I had to flash a production module with the updated kernel using the following command.

    $ sudo ./flash.sh -r jetson-nano-emmc mmcblk0p1
    
  • After this is done follow the normal initial configuration steps on the Nano and you image will no longer have the issue.

Hope this makes it easier for anyone to modify and rebuild the kernel if needed.

4 Likes