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.
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.
The number of available ports are limited. It is recommended to have a USB-C hub.
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.
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.
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 --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.
WIFI Connection Dropping Problem
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.