I recently had the privilege of attending Nvidia’s GPU Technology Conference, where due to the generosity of a friend and colleague, I came into possession of a Jetson TK1 board; while he’s been working on more useful things with his Jetsons, I’ve just been tinkering with mine, adding a mini PCI-E wifi adapter, for example. Here’s what I did to get that working.
Our home isn’t wired for ethernet, so adding a wireless card to the Jetson made sense for ease of access. We have an 802.11AC-capable base station, so I chose the Intel 7260 which supports A/B/G/N/AC. Intel also has a decent track record when it comes to Linux support. Initially, I did not purchase any antennas; that was a mistake. Without them, I was unable to connect to our network, so if you’re thinking of using this card I’d strongly suggest going ahead and getting a pair of antennas too. As suggested here, you’ll need two pigtail adapters to connect the tiny antenna ports on the card itself to a standard threaded antenna mount, then a pair of antennas like these.
When you go to mount the card, you might notice it doesn’t come with any screws, and without them the card won’t lie flush with the board. I thought I’d bite the bullet and get the “official” screws from Intel to be sure I had the correct size, but don’t bother, those seem to have the wrong threads for the Jetson. I still haven’t found the correct size, but the Intel screws thread just far enough to keep it from popping up.
Once the hardware was installed, everything was pretty straightforward using the latest L4T (21.3) and (almost) worked out of the box. If you boot up with the card installed and check
dmesg, looking for any lines containing
iwlwifi, you’ll probably see a warning about lack of firmware. The easiest way to get the necessary firmware is to
[email protected]:~$ sudo apt-get install linux-firmware
but you can also get it from kernel.org. After installing the
linux-firmware package, you should find some new files in
[email protected]:~$ ls /lib/firmware/iwlwifi-* /lib/firmware/iwlwifi-1000-5.ucode /lib/firmware/iwlwifi-5150-2.ucode /lib/firmware/iwlwifi-100-5.ucode /lib/firmware/iwlwifi-6000-4.ucode /lib/firmware/iwlwifi-105-6.ucode /lib/firmware/iwlwifi-6000g2a-5.ucode /lib/firmware/iwlwifi-135-6.ucode /lib/firmware/iwlwifi-6000g2a-6.ucode /lib/firmware/iwlwifi-2000-6.ucode /lib/firmware/iwlwifi-6000g2b-6.ucode /lib/firmware/iwlwifi-2030-6.ucode /lib/firmware/iwlwifi-6050-5.ucode /lib/firmware/iwlwifi-3160-7.ucode /lib/firmware/iwlwifi-7260-7.ucode /lib/firmware/iwlwifi-3160-8.ucode /lib/firmware/iwlwifi-7260-8.ucode /lib/firmware/iwlwifi-3160-9.ucode /lib/firmware/iwlwifi-7260-9.ucode /lib/firmware/iwlwifi-3945-2.ucode /lib/firmware/iwlwifi-7265-8.ucode /lib/firmware/iwlwifi-4965-2.ucode /lib/firmware/iwlwifi-7265-9.ucode /lib/firmware/iwlwifi-5000-5.ucode
And one short reboot later, the
iwlwifi module should now be satisfied:
[email protected]:~# dmesg | grep iwlwifi [ 9.441308] iwlwifi 0000:01:00.0: loaded firmware version 18.104.22.168 op_mode iwlmvm [ 9.664570] iwlwifi 0000:01:00.0: Detected Intel(R) Dual Band Wireless AC 7260, REV=0x144 [ 9.664658] iwlwifi 0000:01:00.0: L1 Enabled; Disabling L0S [ 9.664898] iwlwifi 0000:01:00.0: L1 Enabled; Disabling L0S [ 9.788834] iwlwifi 0000:01:00.0: NVM section 0 read completed [ 9.788957] iwlwifi 0000:01:00.0: NVM section 1 read completed [ 9.789072] iwlwifi 0000:01:00.0: NVM section 4 read completed [ 9.789193] iwlwifi 0000:01:00.0: NVM section 5 read completed [ 12.331778] iwlwifi 0000:01:00.0: L1 Enabled; Disabling L0S [ 12.332022] iwlwifi 0000:01:00.0: L1 Enabled; Disabling L0S
If all goes well, you should (automagically) have a new network device,
iwlan0. This can be seen in
ifconfig or NetworkManager, via the command-line interface
[email protected]:~$ nmcli dev DEVICE TYPE STATE eth0 802-3-ethernet connected wlan0 802-11-wireless disconnected
At this point, we can use
nmcli to connect to a wireless network, which is handy if you (like me) are interacting with the Jetson from a terminal interface instead of the desktop GUI. All it should take is something like this:
nmcli dev wifi connect <YOUR_SSID_HERE> password <YOUR_KEY_HERE>
If this works,
nmcli dev should now report
wlan0; alternatively you can see some other details using
[email protected]:~$ iwconfig wlan0 wlan0 IEEE 802.11abgn ESSID:"Euclid" Mode:Managed Frequency:2.452 GHz Access Point: 88:1F:A1:32:8B:7A Bit Rate=1 Mb/s Tx-Power=27 dBm Retry long limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:on Link Quality=57/70 Signal level=-53 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
And that’s really all there was to it. I took several missteps trying to manually configure the network,
wpa_supplicant and the like before finding the easier way using NetworkManager. Also, an antenna of some kind seems to be required — without the antennas mentioned above I was never able to make a successful connection. Hopefully this information will save you some time by avoiding the same mistakes.