Lei Mao bio photo

Lei Mao

Machine Learning, Artificial Intelligence, Computer Science.

Twitter Facebook LinkedIn GitHub   G. Scholar E-Mail RSS

Introduction

Recently, I got an NVIDIA Jetson AGX Xavier Developer Kit. It turns out that setting up Jetson AGX Xavier is slightly more complicated than setting up Jetson Nano.


In this blog post, I would like to discuss some of the notes and the caveats that I found when I was setting up the device.

Setup

NVIDIA SDK Manager

The JetPack SDK and L4T OS can only be installed via NVIDIA SDK Manager. The SD Card image method is not supported for Jetson AGX Xavier.


We have to use a Ubuntu 16.04 LTS or Ubuntu 18.04 LTS machine to install NVIDIA SDK Manager. As of March 23rd 2021, Ubuntu 20.04 LTS is not supported by NVIDIA SDK Manager.

USB-C Hub

The number of available ports are limited. It is recommended to have a USB-C hub.

Display Output

It only has a HDMI output port and no DP output port. Be prepared to have a HDMI to DP connector if the monitor only accepts DP cable. Some USB-C hubs have DP output port as well.

USB WIFI

There is no on-board WIFI. It is recommended to prepare a USB WIFI adapter. After the USB WIFI adapter is connected to Xavier, we might have problem SSH to Xavier over WIFI. sudo apt-get update && sudo apt-get upgrade -y should solve the problem if the USB WIFI adapter is supported by the OS.

External Hard Drive

Be prepared to have an external hard drive, as there is only 32GB storage space on the device.

Power Model

Jetson AGX Xavier supports different power models. The default 15W model is the most suitable for usages with display. To switch power models, we have to run nvpmodel.

$ nvpmodel --version
nvpmodel: unrecognized option '--version'
Nvidia Power Model Tool Version 1.1.4
Usage:
	nvpmodel [-h | --help] [--verbose] [-q | --query] [-p | --parse] [-u | --udata]
		[-w | --wait <sec>] [--boot] [-m | --mode <mode>] [-f | --conf <filename>] [-o | --os <android,l4t>]
-h, --help:
	Print this help info.
--verbose:
	Enable verbose log.
--boot:
	Exit and do nothing if it is sanity-flashed build.
-p, --parse:
	Parse the config file only. Recommended to enable verbose log.
-m, --mode <mode>:
	<mode> is one of the integer POWER_MODEL ID defined in config file. Switch to the specified power mode.
-d, --fmode:
	specify the mode for thermal-fan-est and pwm-fan, such as cool/quiet,etc... .
-f, --conf:
	explicitly specify the config file.            
	If it is the only option, then it sets the power mode as default mode configured in the file.            
	This option can be used for developer usage to specify a config file other than the default one.
-o, --os <android,l4t>:
	Perform OS specific operations for power model settings. Argument is case insensitive.
-q, --query:
	Query the current power mode.
-w, --wait:
	delay exectuion by specified amount of seconds.
-u, --udata:
	specify the absolute path for user data file when set or query power mode.
Examples:
	nvpmodel -m 2: switch to POWER_MODEL ID=2 of which settings are defined in the default configuration file.
	nvpmodel -m 2 -o android: switch to POWER_MODEL ID=2 and perform Android specific operations for power mode.
	nvpmodel -m 2 -f pm.conf: switch to POWER_MODEL ID=2 of which settings are defined in pm.conf.
	nvpmodel -m 2 -u /data/status: switch to POWER_MODEL ID=2 and store the active mode as user settings in /data/status.
	nvpmodel -f pm.conf: read the active mode in user data file and set it as the power mode which is configured in pm.conf.            
		If user data file does not exist or the active mode value is invalid, set defalut mode instead.
	nvpmodel -q: print the current power mode.
	nvpmodel -q --verbose: print the current power mode with verbose info.
	nvpmodel -p -f pm.conf: parse pm.conf and print the result.
	nvpmodel -d mode_name: set mode_name to fan.

The power model IDs are explained on the L4T guide.

Issues

WIFI Connection Dropping Problem

My Edimax rtl8192cu USB WIFI chipset does not work very well with the L4T OS, as it drops quite frequently and it will not reconnect.

$ lsmod
Module                  Size  Used by
fuse                  103969  3
bnep                   16562  2
zram                   25920  4
rtl8xxxu              115372  0
rtl8192cu              85379  0
rtl_usb                14074  1 rtl8192cu
rtl8192c_common        54245  1 rtl8192cu
rtlwifi                89092  3 rtl_usb,rtl8192c_common,rtl8192cu
mac80211              721935  4 rtl_usb,rtlwifi,rtl8192cu,rtl8xxxu
cfg80211              589932  2 mac80211,rtlwifi
overlay                48718  0
spidev                 13282  0
userspace_alert         5756  0
nvgpu                1581474  40
bluedroid_pm           13912  0
ip_tables              19441  0
x_tables               28951  1 ip_tables

It looks like that it is not the power management problem.

$ iwconfig
eth1      no wireless extensions.

usb0      no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11  ESSID:"RTX2080"  
          Mode:Managed  Frequency:2.462 GHz  Access Point: 3C:37:86:39:25:4B   
          Bit Rate=72.2 Mb/s   Tx-Power=20 dBm   
          Retry short limit:7   RTS thr=2347 B   Fragment thr:off
          Power Management:off
          Link Quality=70/70  Signal level=-25 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:112   Missed beacon:0

rndis0    no wireless extensions.

lo        no wireless extensions.

l4tbr0    no wireless extensions.

dummy0    no wireless extensions.

After some quick googling, I found it is possible that the rtl8192cu Linux driver is problematic. I disabled the driver by running the following command.

$ echo "blacklist rtl8192cu" | sudo tee /etc/modprobe.d/blacklist-rtl8192cu.conf 

After reboot, we found that the legacy universal driver rtl8xxxu is being used instead.

$ lsmod
Module                  Size  Used by
fuse                  103969  2
bnep                   16562  2
zram                   25920  4
rtl8xxxu              115372  0
mac80211              721935  1 rtl8xxxu
cfg80211              589932  1 mac80211
overlay                48718  0
spidev                 13282  0
userspace_alert         5756  0
nvgpu                1581474  40
bluedroid_pm           13912  0
ip_tables              19441  0
x_tables               28951  1 ip_tables

Although the bit rate becomes much slower, the connection is quite stable.

$ iwconfig
eth1      no wireless extensions.

usb0      no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11  ESSID:"RTX2080"  
          Mode:Managed  Frequency:2.462 GHz  Access Point: 3C:37:86:39:25:4B   
          Bit Rate=1 Mb/s   Tx-Power=20 dBm   
          Retry short limit:7   RTS thr=2347 B   Fragment thr:off
          Power Management:off
          Link Quality=70/70  Signal level=-34 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:181   Missed beacon:0

rndis0    no wireless extensions.

lo        no wireless extensions.

l4tbr0    no wireless extensions.

dummy0    no wireless extensions.

Enable WIFI at Startup

Because we often want to work with Jetson AGX Xavier headlessly, it is necessary to SSH to Xavier over WIFI at startup. However, the WIFI is not enabled at startup by default.


To enable the WIFI at startup, in the Network Connections, we have to make sure that options Automatically connect ... and All users may connect ... are checked.

References