You too can have a sub-$200 .11ax client

I need to start this guide off with a few disclaimers: I do work for NVIDIA. And while I’m a decent enough wireless engineer, I’m certainly not an expert on exactly how our embedded products work (but I do know where those experts sit). This is also not a sponsored post – I paid for all of the hardware involved except for the NIC (we don’t get a discount – no free 2080Tis for anyone). But I honestly think the Nano is a great little maker board and this has been a really fun project.

Also, this was certainly a team effort with my friend Robert Boardman. Disclaimers for him: He works for Mist. No, Mist didn’t sponsor this. No, Robert will not buy you a 3D printer. (I already asked, he’s got quite a few of them.) For my Cisco friends who are likely reading this: Relax, we’re just friends.

I know that some of us right now have 802.11ax-capable APs (we’ll leave ‘Wi-Fi 6’ for another day). But having APs with no clients isn’t fun, and for testing (and fun) having a real AX client or two is awesome. If you get two of them you have a chance of seeing OFDMA over the air.

At the moment you can get the Galaxy S10, which is pretty expensive, or you can get an AX200 from Intel and stick it in a laptop. That’s also a thing. But when I saw how the Jetson Nano has an M.2 slot it got me thinking. The 8265 works well with it but we wondered about getting the AX200 to work. Turns out it was pretty easy.

Here’s the bare minimum of what you need.

NVIDIA Jetson Nano
Intel AX200 NIC
MicroSD Card – bigger than you need, but it was on sale
Power supply
Antennas
Bag of jumpers (You really only need one, but no one sells 1).

Now we think that list is just the bare minimum. Since our goal was to create a portable AX200 client/sniffer we wanted to have input/output solutions so we also recommend:

Folding keyboard with trackpad
5″ capacitive touchscreen

Without the keyboard and monitor the BOM is at $185.45. With the keyboard and monitor it’s $265.43. All prices are without tax and shipping.

Getting Started

The Jetson Nano can be powered by a 5V 2A USB power supply, but we used the 5V 4A barrel jack option. The reason that the jumper bag is on the list is that you do need to connect jumper J48 for the DC power input to work. So first thing, bridge the J48 jumper. It’s on the left side of this diagram towards the middle, below the camera connector:

Image credit: NVIDIA

If you go through the official NVIDIA getting started guide, you’ll note that the Nano can be powered by USB. However, in the testing that Robert and I did, the Nano is much happier when being used as a desktop if it has full power. You can find a discussion about the usage of DC power here. Also, with the DC power option we were able to plug the USB of the monitor into the Nano to get power – powering the Nano via USB the monitor was unhappy. As a side bonus, powering the monitor from the Nano makes it a touchscreen. And it eliminates the need for two plugs.

Next, you’re going to want to prepare the SD Card. Download the image and use Etcher to write it to the SD card. If you’ve never done it before NVIDIA has pretty good instructions on how to do it for folks on Linux, Mac, and Windows.

Now it’s time to install the AX200. This is best explained via video and I think this one does a pretty good job. As Wi-Fi engineers we all know that the antenna connectors are a challenge. The antennas are from NVIDIA’s open source robot Kaya, but the 35cm cables are a bit long. I’m on the lookout for an antenna package with a shorter cable option.

Now you’re ready to boot everything up! Connect the USB from your keyboard/mouse to the USB ports, connect the HDMI and USB to the monitor, wired ethernet, and power. Next thing you know you’ll should be at this screen:

Image credit: NVIDIA

Wi-Fi Drivers

Now that you’ve logged in you will probably note that there’s no sign that the Nano sees the AX200. What you’ll want to do is to build the core45 release of the iwlwifi driver that you can find here. Here are the commands:

git clone --single-branch --branch release/core45 https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.git
cd backport-iwlwifi/
make defconfig-iwlwifi-public
sed -i 's/CPTCFG_IWLMVM_VENDOR_CMDS=y/# CPTCFG_IWLMVM_VENDOR_CMDS is not set/' .config
make -j4
sudo make install

Now that the iwlwifi driver is up to date and installed, it’s a good idea to install the latest firmware for the ax200.

git clone https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/linux-firmware.git --branch iwlwifi-fw-2019-07-20 --single-branch
cd linux-firmware/
sudo cp iwlwifi-cc-a0-48.ucode /lib/firmware 


Once both the driver and the firmware are installed then reboot the Nano and you should be up and running.

Just in case…

This is all great, but you have to admit that it’s a bit unwieldy. If you happen to be able to do 3d printing (or, in my case, know a master 3d printer such as Robert) there are some nice case options for both the Nano and that monitor. We are currently using this case for the Jetson Nano (note: Don’t try to use the antenna holes on the panel with all the connectors – it will block the DC jack). Robert also printed this case for the monitor and it’s pretty nice. He has some interesting ideas on how to perhaps modify these designs to make things a bit more functional.

Do you even ax bro?

Why yes. Yes we do.

So what now?

At this point we have an 802.11ax client for around $200 (give or take). Up next:

  • Taking packet captures from the CLI and Wireshark
  • Performance testing using iperf3 and IxChariot
  • General ax hacking

What would you like to see? Feel free to leave a comment below.

39 Replies to “You too can have a sub-$200 .11ax client”

  1. I would loved this device as a capturing device for 11ax.
    I have tested capturing with Cisco 9115 in Sniffer mode, but when those frames comes to the remote packet analyzer client (Wireshark) a lot of the PHY-header information is missing, especially the RadioTap header

  2. Thank you the installation instruction on how to get the AX200 working.

    Do you have instructions to get Bluetooth working as well?

  3. Great blog, thanks!

    I immediately googled for Jatson Nano drivers for the AX200 as soon as I just read it was available.

    What I’d like to see next is whether you can stream 4K 60 content, and what’s the maximum uncompressed video rate you can get into the Nano from a PC or other source.

    A big issue for me is how to get HDMI 2.0 or DP 1.4 inputs to the Nano but if streaming is an option then why not.

    Wireless is more convenient, surely, but video quality is always at odds with compression. So what I’m wondering is just how much actual bandwidth can you send over the AX200, and whether it’s enough to send raw 1080p or higher to the nano w/o any compression.

    1. I don’t see why it couldn’t, but I haven’t really tested that. I just needed something that would do OFDMA (since that works best with multiple clients.)

  4. Hi,John!!Greate Ariticle!!!
    Thank you for the AX200 installation!
    But a big issue is that: The ax200 work well both on Mangaged mode or Monitor mode. But,on the other hand, before install the AX200,my USB Dongle WIFI Adapter worked well, after I install the ax200, my USB Dongle is disapeared! And When I use the Dmesg to show the messages from the OS, It shows a lot errors Like [Unkown symbol ieee80211_XXXXXXX] ,maybe the [mac80211] model is replace by ax2000’s driver,does anyone have the same problem?thanks! and by the way, how can i use the mac80211 model shiped with nano sdk? Thanks a lot! hope can receive your reply! Big Thanks!

  5. Thank you for writing this article. Found this after a couple days of trying to get the AX200 to work on the Nano. Now it is up and connecting! I look forward to seeing more (especially if you get the bluetooth up and running).

  6. Once backport installed it breaks realtek and ralink drivers.
    Any solution?

    [ 5.672113] mt7601u: disagrees about version of symbol ieee80211_start_tx_ba_cb_irqsafe
    [ 5.680331] mt7601u: Unknown symbol ieee80211_start_tx_ba_cb_irqsafe (err -22)
    [ 5.687699] mt7601u: Unknown symbol ieee80211_tx_status_noskb (err 0)
    [ 5.694395] mt7601u: disagrees about version of symbol ieee80211_free_hw
    [ 5.701166] mt7601u: Unknown symbol ieee80211_free_hw (err -22)
    [ 5.707195] mt7601u: disagrees about version of symbol ieee80211_register_hw
    [ 5.714410] mt7601u: Unknown symbol ieee80211_register_hw (err -22)
    [ 5.720753] mt7601u: disagrees about version of symbol ieee80211_get_hdrlen_from_skb
    [ 5.728666] mt7601u: Unknown symbol ieee80211_get_hdrlen_from_skb (err -22)
    [ 5.735710] mt7601u: disagrees about version of symbol ieee80211_wake_queue
    [ 5.742857] mt7601u: Unknown symbol ieee80211_wake_queue (err -22)
    [ 5.749219] mt7601u: disagrees about version of symbol ieee80211_get_tx_rates
    [ 5.756435] mt7601u: Unknown symbol ieee80211_get_tx_rates (err -22)
    [ 5.762983] mt7601u: disagrees about version of symbol ieee80211_send_bar
    [ 5.769852] mt7601u: Unknown symbol ieee80211_send_bar (err -22)
    [ 5.776056] mt7601u: disagrees about version of symbol ieee80211_stop_tx_ba_cb_irqsafe
    [ 5.784112] mt7601u: Unknown symbol ieee80211_stop_tx_ba_cb_irqsafe (err -22)
    [ 5.791330] mt7601u: disagrees about version of symbol ieee80211_queue_delayed_work
    [ 5.799154] mt7601u: Unknown symbol ieee80211_queue_delayed_work (err -22)
    [ 5.806178] mt7601u: disagrees about version of symbol ieee80211_wake_queues
    [ 5.813405] mt7601u: Unknown symbol ieee80211_wake_queues (err -22)
    [ 5.819730] mt7601u: disagrees about version of symbol ieee80211_free_txskb
    [ 5.826740] mt7601u: Unknown symbol ieee80211_free_txskb (err -22)
    [ 5.832970] mt7601u: disagrees about version of symbol ieee80211_alloc_hw_nm
    [ 5.840063] mt7601u: Unknown symbol ieee80211_alloc_hw_nm (err -22)
    [ 5.846398] mt7601u: disagrees about version of symbol ieee80211_tx_status
    [ 5.853317] mt7601u: Unknown symbol ieee80211_tx_status (err -22)
    [ 5.859451] mt7601u: disagrees about version of symbol ieee80211_stop_queue
    [ 5.866458] mt7601u: Unknown symbol ieee80211_stop_queue (err -22)
    [ 5.872686] mt7601u: disagrees about version of symbol ieee80211_stop_queues
    [ 5.879821] mt7601u: Unknown symbol ieee80211_stop_queues (err -22)
    [ 5.886176] mt7601u: disagrees about version of symbol ieee80211_unregister_hw
    [ 5.893461] mt7601u: Unknown symbol ieee80211_unregister_hw (err -22)
    [ 5.901429] mt7601u: disagrees about version of symbol ieee80211_rx_napi
    [ 5.909751] mt7601u: Unknown symbol ieee80211_rx_napi (err -22)

    1. I’m afraid I don’t have one handy. My primary concern is having the AX200 working, not sure what it does to other NICs using the backport driver.

    2. yes,I met this problem! maybe the intel driver rewrite some common driver file such mac 80211mac.ko etc, and the other manufacture’s dirver is not compact with it! any idea? thanks!

  7. Were you able to get an IxChariot endpoint installed? I am getting the error:
    “The endpoint has been installed but it will not run. We failed to detect the libc library on your system.”

    1. I reached out to Ixia and asked them to compile it using the L4T toolchain and they did so, but it seemed a bit flaky in the perf department. Feel free to ping them – they should know what to do.

  8. Hello John, Thanks for the article !
    I have read that the AX200 was able to do monitoring, have you been able to do injection ?

  9. Hey John,

    I am contemplating of buying jetson nano 2G version but knowing I could use AX200 as an AP would make me go for 4G version. Does the AX200 work as 802.11ax AP with the nano?

  10. Hello John,
    Thanks a lot for sharing this, it is very useful.
    I have done similar thing with Jetson Xavier AGX, I have some questions about the Access point setup ?
    Are you using the Linux tegra version 4.9.140 ?
    Are you using the freq 5 GHZ ? or 2.4GHZ ? if 5GHZ, could you please share simple hostapd.conf file ?
    Thanks again

    1. I use whatever the latest version of L4T is, but as I’m using regular Ubuntu tools to set it up I haven’t manually configured any files.

  11. Hi there,
    So I have used your tutorial on how to get this working and I haven’t had any issues for over a year. A few days ago I decided to reformat my sd card and build the new image and I installed the driver exactly the same way. Driver installed however now every time I try to connect to any of my wifi the Jetson Nano reboots.
    I tried switching from 10W to 5W and it still restart the moment it try to connect.
    Any idea what might be wrong?
    Did something changed with new Ubuntu build?

    1. I have exactly the same problem. I decided my previous 32GB card was too small so created a new 64GB card. But something has changed. After going through the AX200 driver install hack several times with multiple tweaks to the process I cannot get the AX200 to connect to a Wi-Fi network. It can see and list all the networks, but whenever I try to connect, the Jetson Nano crashes and reboots.

      I’ve seen a few messages in dmesg which make me wonder if certificates aren’t up to date or there’s a clash between versions of a couple of important things, but I’m not making a lot of progress on figuring it out.

      Sadly, my old card (on which the AX200 worked OK) now gives a boot loop after not using it for three months so I can’t just revert to using that. There appears to be nothing wrong with the card.

  12. Hello.
    I had a similar problem with the Nano restarting after installing the AX200 drivers, so I did a little research.

    Core52 and core50 versions of iwlwifi work.
    Versions above core53 fail to load into the kernel. Kernel 4.9, apparently, is not supported anymore.
    I have not checked the core47 version.

    I am currently using the core52 version and Nano does not restart when connected to wi-fi ..

  13. Hello.
    I had a similar problem with the Nano restarting after installing the AX200 drivers, so I did a little research.
    Core52 and core50 versions of iwlwifi work.
    Versions above core53 fail to load into the kernel. Kernel 4.9, apparently, is not supported anymore.
    I haven’t checked the core47 version.
    I am currently using core52 and Nano has occasional reboots. It seems to me that this may be due to problems with the SD card. I noticed in the logs that sometimes read-write errors occur.

  14. Thanks for providing this. I’m having a problem getting the driver to compile (on the make -j4 step). I get a bunch of errors. Any idea what could be wrong?

      1. Thanks so much John. I’ve got it working using your nanoax image. I tried for a few days to get it working with an AX210NGW chip but I couldn’t get the driver/firmware combo matched up and working. So, I picked up an AX200 and there was no problem. Thanks again. I really appreciate your generosity.

Leave a Reply to john Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.