Software Setup - Jetson Xavier

Install JetPack 4.4

  • Download and install NVIDIA SDK Manager
  • Note: Select the manual installation mode. Automatic mode might have issues when starting up in headless mode. See bug 200525134 in the L4T Release Notes
  • Notes
  • During first boot I configured racecarx as hostname and
  • added a user called mark

Enable password-less login via ssh

In order to be able to login via ssh into the racecarx without typing your password, you can create a pair of private / public ssh keys and upload the public key in the ~/.ssh/autorized_keys on the racecarx.

Create the ssh keys

ssh-keygen

upload the public key to racecarx

ssh-copy-id mark@racecarx

Now you schould be able to login without password by typing

ssh mark@racecarx

Extend disk memory

Install M.2 NVMe SSD

JetsonHacks provides a good description for installing the SSD on the NVIDIA Jetson AGX Xavier.

Mount SSD

We mount the partition on the SSD via UUID in order to be robust with respect to potentially changing device identifiers. Especially important if you are using USB devices.

# create the mount point
sudo mkdir /XavierSSD500

# find UUID of an ext4 partition on SSD. 
# you can search for the label. E.g. label="XavierSSD500"
sudo blkid

# backup the original fstab file that
sudo cp /etc/fstab /etc/fstab.orig

# add mount information to ssd partition into fstab
sudo vim /etc/fstab

# :i (switch to insert mode)
# insert UUID=<yout uuid is identified above>  /XavierSSD500 ext4 nosuid,nodev,auto,nouser 0 2
# <ESC>
# :wq (write and quit)

# mount the ssd according to new data in fstab
sudo mount /XavierSSD500

Move /home to SSD

# create the new home folder on the SSD
sudo mkdir /XavierSSD500/home
# copy the home folder to the ssd preserving symlinks, permissions, access rights, ...
sudo rsync -aXS /home/. /XavierSSD500/home/.
sudo mv /home /home.orig; sudo ln -s /XavierSSD500/home /home
sudo diff -qr /home /home.orig # diff quietly and move into subfolders

Reboot. If everything works:

sudo rm -rf /home.orig

Move docker data directory to SSD

  • Stop the docker daemon
sudo service docker stop
  • Edit configuration file /etc/docker/daemon.json to tell the docker daemon the location of the data directory. Additionally, we anable access to the CUDA compiler (nvcc) during docker build operations by adding “default-runtime”: “nvidia”:

The content should look like:

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia",
    "graph": "/XavierSSD500/var/lib/docker"
}
  • Copy the current data directory to the new one
sudo rsync -aP /var/lib/docker/ /XavierSSD500/var/lib/docker
  • Rename the old docker directory
sudo mv /var/lib/docker /var/lib/docker.old

This is just a sanity check to see that everything is ok and docker daemon will effectively use the new location for its data.

  • Restart the docker daemon
sudo service docker start
  • Test
sudo docker run hello-world

This should download and run the hello-world container. Docker should have created several files in /XavierSSD500/var/lib/docker

If everything worked as expected you can delete the old docker folder /var/lib/docker.old. This is only required in case docker was used before and the folder existed.

Add Wifi / Bluetooth

Install Wifi/Bluetooth M.2 module

TODO: HW installation of intel 8265 M.2 module

Enable wifi

JetPack 4.4 should detect the intel 8265 M.2 wifi module out of the box. You should see the device wlan0 in the Network Manager:

nmcli device

Create a new wlan connection for you ssid.

sudo nmcli connection add ifname wlan0 type wifi ssid "B3 5GHz"

Configure the authentication mode to WPA and set the password.

sudo nmcli connection edit wifi-wlan0

configure


===| nmcli interactive connection editor |===

Editing existing '802-11-wireless' connection: 'wifi-wlan0'

Type 'help' or '?' for available commands.
Type 'describe [<setting>.<prop>]' for detailed property description.

You may edit the following settings: connection, 802-11-wireless (wifi), 802-11-wireless-security (wifi-sec), 802-1x, ipv4, ipv6, tc, proxy
nmcli> goto wifi
You may edit the following properties: ssid, mode, band, channel, bssid, rate, tx-power, mac-address, cloned-mac-address, generate-mac-address-mask, mac-address-blacklist, mtu, seen-bssids, hidden, powersave, mac-address-randomization
nmcli 802-11-wireless> set mode infrastructure
nmcli 802-11-wireless> back
nmcli> goto wifi-sec
You may edit the following properties: key-mgmt, wep-tx-keyidx, auth-alg, proto, pairwise, group, pmf, leap-username, wep-key0, wep-key1, wep-key2, wep-key3, wep-key-flags, wep-key-type, psk, psk-flags, leap-password, leap-password-flags, wps-method
nmcli 802-11-wireless-security> set key-mgmt wpa-psk
nmcli 802-11-wireless-security> set psk myPasswordGoesHere
nmcli 802-11-wireless-security> save
Connection 'wifi-wlan0' (f425bcdd-c8a5-48b5-906e-b0b002e8aaaa) successfully updated.
nmcli 802-11-wireless-security> quit

Enable bluetooth

Check if the 8265 wifi / bluetooth module is detected

lspci
rfkill list

Check if bluetooth devices are blocked

mark@racecarx:~$ rfkill list
0: bluedroid_pm: Bluetooth
	Soft blocked: no
	Hard blocked: no
1: phy0: Wireless LAN
	Soft blocked: no
	Hard blocked: no
2: hci0: Bluetooth
	Soft blocked: no
	Hard blocked: no

if they are soft blocked, then execute

sudo rfkill unblock bluetooth