Skip to main content

Bring up Axelera Embedded 110m in Jetson Orin

A Linux kernel patch is required to make Axelera Embedded 110m compatible with NVIDIA Jetson Orin devices. This guide covers downloading and extracting the Jetson Linux sources, applying axl-jetson.patch, building and installing the patched kernel, configuring the bootloader to use it, and fixing the OpenCV headers before installing the Voyager SDK.

You will need axl-jetson.patch

You will need the axl-jetson.patch file, available in the Downloads section below.

Download and expand the kernel sources​

Step 0. In your browser, go to the NVIDIA Jetson Linux archive.

Step 1. Locate and download the Jetson Linux source files for your release. Check your release with:

head -n1 /etc/nv_tegra_release

For example: R36 (release), REVISION: 4.3, GCID: 38968081, BOARD: generic.

Go to the matching L4T URL (here, R36.4.3) and download the Driver Package (BSP) Sources, for example public_sources.tbz2:

wget https://developer.nvidia.com/downloads/embedded/l4t/<your-release>/sources/public_sources.tbz2 .

For example: wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.3/sources/public_sources.tbz2 .

The driver package creates the Linux_for_Tegra/ subdirectory. Inside it, Linux_for_Tegra/rootfs/ is the sample root filesystem, which makes up most of the flash image.

Step 2. Extract the .tbz2 file:

tar -xjf public_sources.tbz2

Step 3. Extract the kernel source files:

cd ~/Linux_for_Tegra/source
tar -xjf kernel_src.tbz2
tar -xjf kernel_oot_modules_src.tbz2
tar -xjf nvidia_kernel_display_driver_source.tbz2

Build the kernel​

Step 0. Install the packages used for building:

sudo apt install -y build-essential bc libssl-dev

Step 1. Apply axl-jetson.patch to kernel/kernel-jammy-src:

cd ~/Linux_for_Tegra/source/kernel/kernel-jammy-src
patch --dry-run -p1 < /path/to/axl-jetson.patch # check the patch first
patch -p1 < /path/to/axl-jetson.patch

Step 2. Set the local version. Replace the version line in the Makefile with a tegra-axl suffix:

cd ~/Linux_for_Tegra/source/kernel/
version = $(shell grep -q "CONFIG_PREEMPT_RT=y" \
${kernel_source_dir}/arch/arm64/configs/${KERNEL_DEF_CONFIG} && echo "-rt-tegra" || echo "-tegra-axl")

Back up the original boot image:

sudo cp /boot/Image /boot/Image.orig

Step 3. Build the kernel with ./nvbuild.sh:

cd ~/Linux_for_Tegra/source
mkdir kernel_out
./nvbuild.sh -o kernel_out

Done — the patched kernel is built.

Install the kernel​

Step 1. Install the kernel modules:

cd ~/Linux_for_Tegra/source
./nvbuild.sh -o kernel_out -i

# Check what version was installed
ls -la /lib/modules/

Step 2. Install the kernel image. Copy your new kernel with an .axl extension to distinguish it:

cd ~/Linux_for_Tegra/source/kernel_out/kernel/kernel-jammy-src/
sudo cp arch/arm64/boot/Image /boot/Image.axl

Check which version was installed:

ls -la /boot/Image*

Step 3. Generate the initrd:

sudo update-initramfs -u -k 5.15.148-tegra-axl

Rename the generated initrd to a friendly name:

sudo mv /boot/initrd.img-5.15.148-tegra-axl /boot/initrd.axl

Done — the patched kernel files are installed.

Boot with the Axelera Jetson kernel​

Make the Axelera Jetson kernel the default.

Step 1. Open /boot/extlinux/extlinux.conf. As a best practice, back it up first:

sudo cp /boot/extlinux/extlinux.conf /boot/extlinux/extlinux.conf.backup

Step 2. Insert the following inside extlinux.conf:

LABEL Axelera
MENU LABEL Axelera kernel
LINUX /boot/Image.axl
INITRD /boot/initrd.axl
APPEND ${cbootargs} root=PARTUUID=<Primary-PARTUUID> rw rootwait rootfstype=ext4 mminit_loglevel=4 console=ttyTCU0,115200 firmware_class.path=/etc/firmware fbcon=map:0 nospectre_bhb video=efifb:off console=tty0
Set the default boot entry

Inside extlinux.conf, change DEFAULT to the Axelera label (usually line 2). Use the same PARTUUID for both entries — copy the PARTUUID from the primary kernel to the Axelera kernel entry.

Step 3. Reboot the Jetson into the Axelera Jetson kernel:

sync
sudo reboot

Step 4. After rebooting, verify the kernel version and timestamp (you can also run this before rebooting, for reference):

uname -a

Done — the Axelera Jetson kernel is now the default.

Fix the OpenCV header before installing the Voyager SDK​

sudo ln -s /usr/include/opencv4/opencv2 /usr/include/opencv2

Install the Voyager SDK​

Follow the installation instructions in the Voyager SDK GitHub repository.

Quick start​

Follow the first inference walkthrough to test a model pipeline.

When updating nvidia-jetpack

Running sudo apt-get install nvidia-jetpack resets the default kernel back to primary. After updating nvidia-jetpack, update /boot/extlinux/extlinux.conf and set DEFAULT back to Axelera.

Check DMABUF enablement​

zgrep CONFIG_DMABUF_HEAPS /proc/config.gz

The output should show the DMABUF configs:

CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS_CMA=y

Helper commands​

CommandPurpose
head -n1 /etc/nv_tegra_releaseL4T release (e.g. R36 release, REVISION: 4.3)
uname -rExact kernel version and L4T tag
apt-cache show nvidia-jetpackInstalled JetPack version (package metapackage)

Downloads​