This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Reference

In this section you will find details on how to use Jumpstarter.

1 - Command line

Command line and scripting reference for Jumpstarter.

Jumpstarter today comes as a commandline tool that allows you to interact with the test-harness via the driver architecture.

Jumpstarter CLI

Most commands accept a device-id. A device-id can be either the serial number of the device, or the device name.

All commands accept the following flags

  -d, --driver string    Only devices for the specified driver
  -h, --help             help for jumpstarter

GENERAL COMMANDS

list-devices

This command will list all the devices that are currently available throught the various test-harness drivers.

$ jumpstarter list-devices
Device Name	Serial Number	Driver			Version	Device		Tags
orin-agx-00	e6058a05	dutlink-board	0.05	/dev/ttyACM2	orin-agx, orin, 64gb
xavier-nx-00	e6058905	dutlink-board	0.04	/dev/ttyACM1	nvidia, xavier-nx, nvidia-xavier, arm64, 8gb
visionfive2-00	031da453	dutlink-board	0.04	/dev/ttyACM0	rv64gc, rv64, jh7110, visionfive2, 8gb

list-drivers

This command lists all the drivers that are currently available.

$ jumpstarter list-drivers
dutlink-board
	OpenSource HIL USB harness (https://github.com/jumpstarter-dev/dutlink-board)
	enables the control of Edge and Embedded devices via USB.
	It has the following capabilities: power metering, power cycling, and serial console
	access, and USB storage switching.

run-script script.yaml

This is probably the most useful jumpstarter command today. It runs a jumpstarter script, which will select a device based on the selector tags, and execute all the steps of the script. Once finished or if an error occurs the cleanup section of the script will be run.

$ jumpstarter run-script script.yaml
See the scripting section for a detailed guide on how to write scripts and examples.

set-control device-id

Set a control signal from the test-harness to the device. This is used to control signals on the DUT or trigger external hardware like video generators, simulated sensors, fault injectors, or other necessary devices.

$ jumpstarter set-control orin-agx-00 A LOW

The signal names and output modes depend on the test-harness being used. See the dutlink-board section for more details.

STORAGE MANAGEMENT

set-disk-image device-id

Set the disk image to be used for the DUT. This is used to write the disk image to the DUT’s attacheable storage device. Images can be a raw disk image or an ISO image.

$ jumpstarter set-disk-image orin-agx-00 my-system-image.raw
Flags:
  -o, --offset-gb uint   Offset in GB to write the image to in the disk

You can limit or filter the devices found by jumpstarter for image writing by using the storage_filter config. This configuration is stored into the test harness board and will be used by jumpstarter to filter the devices found.

i.e. for using only /dev/disk/by-id/usb-SanDisk_Extreme_Pro_52A456790D93-0:0

you could set: jumpstarter set-config device-id storage_filter Extreme_Pro_52A456790D93-0:0

This is also useful if your USB disk exposes multiple sub-devices.

attach-storage device-id

This command attaches the storage device to the DUT. This is normally required to boot the DUT.

$ jumpstarter attach-storage orin-agx-00
πŸ’Ύ Attaching storage for orin-agx-00 ... done

detach-storage device-id

This command detaches the storage device to the DUT.

$ jumpstarter detach-storage orin-agx-00
πŸ’Ύ Detaching storage for orin-agx-00 ... done

POWER MANAGEMENT

power on|off|force-on|force-off|rescue device-id [-t] [-r] [-a]

This command manipulates the power status of a device

i.e.:

$ jumpstarter power off orin-agx-00
πŸ”Œ Powering off orin-agx-00... done

The different power actions available are:

ActionDescription
onPower on the device using the power_on profile from configuration
offPower off the device using the power_off profile from configuration
force-onPower on the device using only power, ignoring the profile from configuration
force-offPower off the device using only power, ignoring the profile from configuration
rescuePower on the device using the power_rescue profile from configuration
Flags:
  -a, --attach-storage   Attach storage before powering on
  -t, --console          Open console terminal after powering on
  -r, --reset            Reset device after power up

For information on how to configura the power profiles (power_on, power_off, power_rescue), please see the set-config section.

reset device-id

Use the reset signal on the device to reset it, only open drain signal is supported (pulling low + high impedance) at this time.

$ jumpstarter reset orin-agx-00
⚑ Toggling reset on orin-agx-00

DEVICE CONSOLE

console device-id

This command provides a serial console to the DUT, it will connect to the serial console of the DUT and allow you to interact with it.

$ jumpstarter console orin-agx-00
Looking up for out-of-band console:  TOPOD83B461B-if01
πŸ’» Entering console: Press Ctrl-B 3 times to exit console
[0000.219] I> FUSE_OPT_PVA_DISABLE = 0x00000000
...
...
...

create-ansible-inventory device-id

This command interacts with the console of the DUT which must be logged in with a user andcreates an ansible inventory file for the DUT. This ansible inventory can be used to run ansible playbooks against the DUT.

$ jumpstarter create-ansible-inventory orin-agx-00

This command accepts the following extra flags:

Flags:
  -k, --ssh-key string   The ssh key to use for the ansible inventory file
  -u, --user string      The user for the ansible inventory file (default "root")

run device-id command

Sends a string via the serial console to the DUT and waits for a response which is then written to stdout.

$ ./jumpstarter/jumpstarter run orin-agx-00 "ls -la"
Looking up for out-of-band console:  TOPOD83B461B-if01
total 24
dr-xr-x---.  6 root root 168 Sep 22 14:08 .
dr-xr-xr-x. 19 root root 248 Sep 22 14:01 ..
drwx------.  3 root root  17 Sep 22 14:06 .ansible
-rw-------.  1 root root 325 Sep 22 14:09 .bash_history
-rw-r--r--.  1 root root  18 Aug 10  2021 .bash_logout
-rw-r--r--.  1 root root 141 Aug 10  2021 .bash_profile
-rw-r--r--.  1 root root 429 Aug 10  2021 .bashrc
-rw-r--r--.  1 root root 100 Aug 10  2021 .cshrc
drwx------.  3 root root  26 Sep 22 14:08 .nv
drwx------.  2 root root  29 Sep 22 14:01 .ssh
-rw-r--r--.  1 root root 129 Aug 10  2021 .tcshrc
drwxr-xr-x.  2 root root 116 Sep 22 14:09 artifacts
[root@localhost ~]#
$

In the above example the system had already been logged in via the console.

Flags:
  -w, --wait int        Wait seconds before trying to get a response (default 2)

CONFIGURATION

set-name device-id name

Changes device name. This is used to set a name for the test-harness device. This should make devices easier to identify.

$ jumpstarter set-name e6058a05 orin-agx-00
✍ Changing device name for e6058a05 to orin-agx-00 ... done

set-tags device-id tag1 [tag2 …]

Changes device tags, pass one argument per tag. This is used to set tags for the test-harness device which can be used to select specific devices from a script or some commands.

$ jumpstarter set-name orin-agx-00 orin-agx orin 64gb
✍ Changing device name for orin-agx-00 to orin-agx ... done

get-config device-id [key]

Shows the device configuration parameters stored on the test-harness board. If a key is provided only the value for that key will be shown.

$ ./jumpstarter get-config orin-nx-00 power_on
p1,bL,w5,bZ

Otherwise a yaml list of all parameters will be shown.

$ ./jumpstarter get-config orin-nx-00
name: orin-nx-00
tags: orin-nx-00,orin,orin-nx,16gb
json:
usb_console:
power_on: p1,bL,w5,bZ
power_off: p1,bL,w5,bZ,w10,bL,w110,bZ
power_rescue: p1,bL,w1,bZ,w1,aL,rL,w1,rZ,w1,aZ

set-config device-id key value

Changes a device configuration config parameter (see get-config).

if values is "" the config will be deleted.

usb_console config parameter

Changes device name for out of band USB console. Some devices expose a console only via USB and the console is not accessible via pins. This command allows you to set a matching string for the USB console of the device.

Jumpstarter will try to find the USB console device by matching the string provided with this command when trying to communicate with the device via the console.

$ jumpstarter set-usb-console orin-agx-00 TOPOD83B461B-if01
✍ Changing usb_console name for orin-agx-00 to TOPOD83B461B-if01 ... done

power_on/off/recue parameters

These parameters are used to configure the power sequences, they are a comma separated list of commands to be executed by the test-harness board to perform the power on/off/rescue of the device.

The commands are:

  • p1: power enable
  • p0: power disable
  • aL: pin A low
  • aH: pin A high
  • aZ: pin A high impedance
  • bL: pin B low
  • rL: pin RESET low
  • rH: pin RESET high
  • rZ: pin RESET high impedance
  • wN: wait N*100 ms, where N is a natural number.

Some examples of configuration for orin-nx/orin-agx devkit boards:

Touch power button for 500ms:

power_on: p1,bL,w5,bZ

Touch power button for 500ms (to make sure we start from ON), then touch for 11s.

power_off: p1,bL,w5,bZ,w10,bL,w110,bZ

Touch power button for 500ms (to make sure we start from ON), then assert A (recovery), then assert the reset signal, and wait 500ms, then deassert reset, wait 500ms, deassert A (recovery). This should put the jetson device into recovery mode.

power_rescue: p1,bL,w5,bZ,w1,aL,rL,w5,rZ,w5,aZ

where pin A is “REC” and pin B is “PWR” on the orin-agx/orin-nx boards.

2 - Jumpstarter scripts

See your project in action!

Jumpstarter scripts come in yaml form. They are used to describe the steps to be taken to deploy a project into an Edge system and perform console interactions with it.

Using a script

Scripts can be executed using the run-script command, a script has a selector to pickup an available device connected to the jumpstarter host. The selector specifies all the tags the device must have.

$ jumpstarter run-script script.yaml

Jumpstarter will fail if there are no available devices with the specified tags.

i.e.:

$ jumpstarter list-devices
Device Name	Serial Number	Driver			Version	Device		Tags
orin-nx-00	e605c805	dutlink-board	0.05	/dev/ttyACM2	orin-nx, orin, 16gb
xavier-nx-00	e6058905	dutlink-board	0.04	/dev/ttyACM1	nvidia, xavier-nx, nvidia-xavier, arm64, 8gb
visionfive2-00	031da453	dutlink-board	0.04	/dev/ttyACM0	rv64gc, rv64, jh7110, visionfive2, 8gb

if we run one of the examples available in the jumpstarter repository we should see:

$ sudo jumpstarter run-script script-examples/orin-agx.yaml
βš™ Using device "orin-nx-00" with tags [orin-nx orin 16gb]

➀ Powering off and writing the image to disk
➀ Step ➀ power: "off"
[βœ“] done

➀ Step ➀ set-disk-image
πŸ” Detecting USB storage device and connecting to host: done
πŸ“‹ rhel-guest-image.raw -> /dev/disk/by-id/usb-SanDisk_Extreme_Pro_52A456790D93-0:0 offset 0x0:
πŸ’Ύ 1280 MB copied 289.22 MB/s

...

Please note the call via sudo. Jumpstarter needs access to block storage devices and serial ports. While serial port access can be granted adding the user to the dialout group, block storage access requires root privileges.

This command is typically used from CI scripts, storing an image building and a jumpstarter script along your software project.

Script structure

name: "Name of your script"
selector:
  - tag

expect-timeout: 60

steps:
  - ....

cleanup:
  - ....

A script has a name, a selector, and a expect-timeout as main fields:

FieldDescription
nameJust a descriptive name for the script
selectorA list of tags to find a compatible board from those available on the host
expect-timeoutThis is the default timeout for expect steps

Script step commands

- comment

This is the simplest, will print a comment into the console during execution.

steps:
  - comment: "Powering off and writing the image to disk"

results in:

➀ Powering off and writing the image to disk

- pause

This command pauses execution for the specified amount of seconds.

steps:
  - pause: 5

results in:

➀ Step ➀ pause: 5
[βœ“] done

- power

Enables power control of the device, accepted orders are:

  • on
  • off
  • cycle : power off and on again
steps:
  - power: "on"

results in:

➀ Step ➀ power: "on"
[βœ“] done

- reset

Toggles the /RESET line of the dutlink-board, this will reset the DUT.

steps:
  - reset:
      time_ms: 500

results in:

➀ Step ➀ reset
Resetting device...
[βœ“] done

- set-disk-image

Writes a disk image into the storage device attached to jumpstarter in connector J9.

It accepts multiple parameters:

ParameterDescription
imageThe image .iso/.raw that must be in a bootable format for the DUT
attach_storagetrue/false bool, if we want to attach the storage right away
offset_gbif we want to store the image at an specific offset of the disk (in GB)

i.e.:

steps:
  - set-disk-image:
      image: "rhel-image.raw"

results in:

➀ Step ➀ set-disk-image
πŸ” Detecting USB storage device and connecting to host: done
πŸ“‹ rhel-image.raw -> /dev/disk/by-id/usb-SanDisk_Extreme_Pro_52A456790D93-0:0 offset 0x0:
πŸ’Ύ 10240 MB copied 287.80 MB/s
[βœ“] done

- storage

Allows attaching or detaching the USB storage from the DUT.

Accepted orders are:

  • attach
  • detach

i.e.:

steps:
  - storage: attach

results in:

➀ Step ➀ storage: "attach"
[βœ“] done

- expect

Waits for a string to be received before continuing to next steps. It accepts multiple parameters:

ParameterDescription
thisThe string we are expecting on the console before we can continue
echotrue/false bool, if we want to echo the received data, useful for debugging and logging
timeoutseconds to wait for the expected string before failure, it defaults to expect-timeout from the script yaml
debug_escapestrue/false bool, transforms ESC terminal control sequences into text to avoid terminal manipulation

i.e.:

steps:
  - expect:
      this: "login: "
      debug_escapes: true
      timeout: 300
      echo: true

could result in:

➀ Step ➀ expect: "login: "
....
....
<ESC>[0;1;39mRotate log files
<ESC>[0m.
[   44.674563] block sda: the capability attribute has been deprecated.
[   44.678058] WARNING! power/level is deprecated; use power/control instead

Red Hat Enterprise Linux 9.3 (Plow)
Kernel 5.14.0-362.8.1.el9_3.aarch64 on an aarch64

Activate the web console with: systemctl enable --now cockpit.socket

localhost login:
➀ Step ➀ ...

- send

Sends a list of strings to the device one after another with a delay between them. It accepts multiple parameters:

ParameterDescription
thisThe list of strings to be sent to the device
delay_msmillisecond delay between strings. Defaults to 100ms
echotrue/false bool, if we want to echo the received data, useful for debugging and logging; but consumes output that could be needed in a later expect command (bug)
debug_escapestrue/false bool, transforms ESC terminal control sequences into text to avoid terminal manipulation

i.e.:

steps:
  - send:
      this:
        - "root\n"
        - "password\n"
      echo: true

could result in:

➀ Step ➀ send


sent: root

root
Password:

sent: password

➀ Step ...

strings can contain any of the following sequences and they will be converted into the corresponding control characters: <ESC>, <F1>, <F2>, <F3>, <F4>, <F5>, <F6>, <F7>, <F8>, <F9>, <F10>, <F11>, <UP>, <DOWN>, <LEFT>, <RIGHT>, <ENTER>, <TAB>, <BACKSPACE>, <DELETE>, <CTRL-A>, <CTRL-B>, <CTRL-C>, <CTRL-D>, <CTRL-E>

- write-ansible-inventory

This action assumes that the serial console is past login and it is ready to be used. It will create an ansible inventory file for the DUT. This ansible inventory can be used to run ansible playbooks against the DUT, as long as the DUT is connected to a shared network with the jumpstarter host.

It accepts multiple parameters:

ParameterDescription
filenameThe filename for the ansible inventory file, defaults to inventory
ssh_keyThe ssh key to use for the ansible inventory file, defaults to ~/.ssh/id_rsa
userThe user for the ansible inventory file, defaults to root

i.e.:

  - write-ansible-inventory:
      filename: "inventory.yaml"
      ssh_key: ~/.ssh/id_rsa

would look like:

➀ Step ➀ write-ansible-inventory

written : inventory.yaml

and the inventory file would look like:

---
boards:
  hosts:
    orin-nx-00:
      ansible_host: 192.168.1.138
      ansible_user: root
      ansible_become: yes
      ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
      ansible_ssh_private_key_file: ~/.ssh/id_rsa

- local-shell

This command runs scripts on the local shell where jumpstarter is running.

i.e.:

  - local-shell:
      script: |
        ansible -m ping -i inventory.yaml all        

would look like:

➀ Step ➀ local-shell
+ ansible -m ping -i inventory.yaml all
orin-nx-00 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

If you had previously generated an inventory with write-ansible-inventory.

3 - Script examples

Jumpstarter scripts in action

The jumpstarter scripting language allows automation of the test process.

The following example is a script that will deploy a RHEL image that has been built for the device, it contains a set of kernel modules that need testing, and an updated kernel in a local repository.

It can be ran as follows:

$ sudo jumpstarter run-script script-examples/orin-agx.yaml
name: "Test Jetson kmods"
selector:
  - orin
expect-timeout: 60

steps:
  - comment: "Powering off and writing the image to disk"

  - power: off

  - set-disk-image:
      image: "rhel-guest-image.raw"

  - storage: attach

  - comment: "Booting up and waiting for login prompt"

  - power: on

  - expect:
      this: "login: "
      debug_escapes: true
      timeout: 250

  - send:
      this:
        - "root\n"
        - "redhat\n"

  - pause: 3

  - expect:
      this: "[root@localhost ~]#"
      debug_escapes: false

  - comment: "Updating kernel if necessary and installing the jetpack kmods"

  - send:
      echo: true
      this:
        - "sudo dnf update -y\n"

  - expect:
      timeout: 120
      echo: true
      debug_escapes: false
      this: "Complete"

  - expect:
      debug_escapes: false
      this: "[root@localhost ~]#"

  - send:
      echo: true
      this:
        - "sudo dnf install -y nvidia-jetpack-kmod\n"

  - expect:
      timeout: 120
      echo: true
      debug_escapes: false
      this: "Complete"

  - comment: "Rebooting to get latest kernel and kmods"

  - send:
      debug_escapes: false
      this:
        - "reboot\n"

  - expect:
      this: "login: "
      debug_escapes: false
      timeout: 300 # the kmod boot takes very long because of some issues with the crypto modules from nvidia

  - send:
      this:
        - "root\n"
        - "redhat\n"

  - send:
      echo: false # we dont want to capture any of the output so expect will catch it later
      this:
        - "\n"
        - "\n"

  - expect:
      debug_escapes: false
      echo: true
      this: "[root@localhost ~]#"

  - comment: "verifying that the kmods are loaded"

  - send:
      echo: false # we dont want to capture any of the output so expect will catch it
      this:
        - "lsmod | grep --color=never nv\n"

  - expect:
      echo: true
      this: "nvgpu"

  - comment: "Creating an inventory for this device and continuing with ansible"

  - write-ansible-inventory:
      filename: "inventory.yaml"
      ssh_key: ~/.ssh/id_rsa

  - local-shell:
      script: |
        ansible -m ping -i inventory.yaml all        

cleanup:
  - comment: "Powering off and detaching the disk"
  - send:
      debug_escapes: false
      this:
        - "poweroff\n"
  - pause:  5

  - power: off

  - storage: detach

The output for this script would look as follows:

$ sudo ./jumpstarter set-disk-image visionfive2-00 rhel-guest-image.raw
πŸ’Ύ Writing disk image for visionfive2-00
πŸ” Detecting USB storage device and connecting to host: <c^C
[gitlab-runner@localhost jumpstarter]$ ^C
[gitlab-runner@localhost jumpstarter]$ sudo ./jumpstarter run-script script-examples/orin-agx.yaml
βš™ Using device "orin-nx-00" with tags [orin-nx-00 orin orin-nx 16gb]

➀ Powering off and writing the image to disk
➀ Step ➀ power: "off"
[βœ“] done

➀ Step ➀ set-disk-image
πŸ” Detecting USB storage device and connecting to host: done
πŸ“‹ rhel-guest-image.raw -> /dev/disk/by-id/usb-SanDisk_Extreme_Pro_52A456790D93-0:0 offset 0x0:
πŸ’Ύ 10240 MB copied 272.79 MB/s
[βœ“] done

➀ Step ➀ storage: "attach"
[βœ“] done


➀ Booting up and waiting for login prompt
➀ Step ➀ power: "on"
[βœ“] done

➀ Step ➀ expect: "login: "
040000 (0xe580)
[0000.414] I> RAM_CODE 0x4000401
[0000.420] I> RAM_CODE 0x4000401
[0000.423] I> Task: Load Page retirement list (0x500115dd)
[0000.429] I> Task: SDRAM params override (0x50012279)
[0000.433] I> Task: Save mem-bct info (0x5001542d)
[0000.438] I> Task: Carveout allocate (0x50015315)

...
...

......  Booting `Red Hat Enterprise Linux (5.14.0-362.6.1.el9_3.aarch64) 9.3
(Plow)'

EFI stub: Booting Linux Kernel...
EFI stub: Using DTB from configuration table
EFI stub: Exiting boot services...
[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd421]
[    0.000000] Linux version 5.14.0-362.6.1.el9_3.aarch64 (mockbuild@arm64-026.build.eng.bos.redhat.com) (gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), GNU ld version 2.35.2-42.el9) #1 SMP PREEMPT_DYNAMIC Fri Sep 29 13:05:29 EDT 2023

...
...



localhost login:
➀ Step ➀ send


sent: root

root
Password:

sent: redhat



➀ Step ➀ pause: 3
[βœ“] done

➀ Step ➀ expect: "[root@localhost ~]#"
[root@localhost ~]#

➀ Updating kernel if necessary and installing the jetpack kmods
➀ Step ➀ send


sent: sudo dnf update -y

 sudo dnf update -y

<ESC>[?2004l
➀ Step ➀ expect: "Complete"
jetson-packages                                 3.1 MB/s | 519 kB     00:00
Dependencies resolved.
================================================================================
 Package               Arch      Version                Repository         Size
================================================================================
Installing:
 kernel                aarch64   5.14.0-362.8.1.el9_3   jetson-packages   5.1 M
 kernel-core           aarch64   5.14.0-362.8.1.el9_3   jetson-packages    18 M
 kernel-modules        aarch64   5.14.0-362.8.1.el9_3   jetson-packages    23 M
 kernel-modules-core   aarch64   5.14.0-362.8.1.el9_3   jetson-packages    26 M

Transaction Summary
================================================================================
Install  4 Packages

Total size: 73 M
Installed size: 110 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : kernel-modules-core-5.14.0-362.8.1.el9_3.aarch64       1/4
  Installing       : kernel-core-5.14.0-362.8.1.el9_3.aarch64               2/4
  Running scriptlet: kernel-core-5.14.0-362.8.1.el9_3.aarch64               2/4
  Installing       : kernel-modules-5.14.0-362.8.1.el9_3.aarch64            3/4
  Running scriptlet: kernel-modules-5.14.0-362.8.1.el9_3.aarch64            3/4
  Installing       : kernel-5.14.0-362.8.1.el9_3.aarch64                    4/4
  Running scriptlet: kernel-modules-core-5.14.0-362.8.1.el9_3.aarch64       4/4
  Running scriptlet: kernel-core-5.14.0-362.8.1.el9_3.aarch64               4/4
  Running scriptlet: kernel-modules-5.14.0-362.8.1.el9_3.aarch64            4/4
  Running scriptlet: kernel-5.14.0-362.8.1.el9_3.aarch64                    4/4
  Verifying        : kernel-5.14.0-362.8.1.el9_3.aarch64                    1/4
  Verifying        : kernel-core-5.14.0-362.8.1.el9_3.aarch64               2/4
  Verifying        : kernel-modules-5.14.0-362.8.1.el9_3.aarch64            3/4
  Verifying        : kernel-modules-core-5.14.0-362.8.1.el9_3.aarch64       4/4

Installed:
  kernel-5.14.0-362.8.1.el9_3.aarch64
  kernel-core-5.14.0-362.8.1.el9_3.aarch64
  kernel-modules-5.14.0-362.8.1.el9_3.aarch64
  kernel-modules-core-5.14.0-362.8.1.el9_3.aarch64

Complete
➀ Step ➀ expect: "[root@localhost ~]#"
!
[root@localhost ~]#
➀ Step ➀ send


sent: sudo dnf install -y nvidia-jetpack-kmod

 sudo dnf install -y nvidia-jetpack-kmod

<ESC>[?2004l
➀ Step ➀ expect: "Complete"
Last metadata expiration check: 0:01:02 ago on Wed Oct 11 09:39:12 2023.
Dependencies resolved.
==========================================================================================
 Package                   Arch     Version                         Repository        Size
==========================================================================================
Installing:
 nvidia-jetpack-kmod       aarch64  6.0.0_pre_ea_5.14.0_362-3.el9_3 jetson-packages   47 M
Installing dependencies:
 nvidia-jetpack-firmware   aarch64  6.0.0_pre_ea-3.el9              jetson-packages  659 k
 nvidia-jetpack-modprobe   aarch64  6.0.0_pre_ea-3.el9              jetson-packages   12 k

Transaction Summary
==========================================================================================
Install  3 Packages

Total size: 48 M
Installed size: 318 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : nvidia-jetpack-modprobe-6.0.0_pre_ea-3.el9.aarch64     1/3
  Installing       : nvidia-jetpack-firmware-6.0.0_pre_ea-3.el9.aarch64     2/3
  Installing       : nvidia-jetpack-kmod-6.0.0_pre_ea_5.14.0_362-3.el9_3.   3/3
  Running scriptlet: nvidia-jetpack-modprobe-6.0.0_pre_ea-3.el9.aarch64     3/3
  Running scriptlet: nvidia-jetpack-kmod-6.0.0_pre_ea_5.14.0_362-3.el9_3.   3/3
  Verifying        : nvidia-jetpack-firmware-6.0.0_pre_ea-3.el9.aarch64     1/3
  Verifying        : nvidia-jetpack-kmod-6.0.0_pre_ea_5.14.0_362-3.el9_3.   2/3
  Verifying        : nvidia-jetpack-modprobe-6.0.0_pre_ea-3.el9.aarch64     3/3

Installed:
  nvidia-jetpack-firmware-6.0.0_pre_ea-3.el9.aarch64
  nvidia-jetpack-kmod-6.0.0_pre_ea_5.14.0_362-3.el9_3.aarch64
  nvidia-jetpack-modprobe-6.0.0_pre_ea-3.el9.aarch64

Complete

➀ Rebooting to get latest kernel and kmods
➀ Step ➀ send


sent: reboot

!
reboot

➀ Step ➀ expect: "login: "
[root@localhost ~]# reboot
[root@localhost ~]#

Red Hat Enterprise Linux 9.3 (Plow)
Kernel 5.14.0-362.8.1.el9_3.aarch64 on an aarch64

Activate the web console with: systemctl enable --now cockpit.socket

localhost login:
➀ Step ➀ send


sent: root

root
Password:

sent: redhat



➀ Step ➀ send


sent:



sent:


➀ Step ➀ expect: "[root@localhost ~]#"


Last login: Wed Oct 11 09:39:04 on ttyTCU0
[root@localhost ~]#

➀ verifying that the kmods are loaded
➀ Step ➀ send


sent: lsmod | grep --color=never nv


➀ Step ➀ expect: "nvgpu"


<ESC>[?2004l
<ESC>[?2004h[root@localhost ~]#

<ESC>[?2004l
<ESC>[?2004h[root@localhost ~]# lsmod | grep --color=never nv

nvgpu[?2004l

➀ Creating an inventory for this device and continuing with ansible
➀ Step ➀ write-ansible-inventory

written : inventory.yaml

➀ Step ➀ local-shell
+ ansible -m ping -i inventory.yaml all
orin-nx-00 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
➀ Cleanup ➀ Test Jetson kmods

➀ Powering off and detaching the disk
➀ Step ➀ send


sent: poweroff

poweroff
[root@localhost ~]#
         Stopping Session 1 of User root...
         Stopping Session 3 of User root...


➀ Step ➀ pause: 5
[βœ“] done

➀ Step ➀ power: "off"
[βœ“] done

➀ Step ➀ storage: "detach"
[βœ“] done