Bring up Metis M.2 in Jetson Orin
A Linux kernel patch is required to make Metis M.2 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 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
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.
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
| Command | Purpose |
|---|---|
head -n1 /etc/nv_tegra_release | L4T release (e.g. R36 release, REVISION: 4.3) |
uname -r | Exact kernel version and L4T tag |
apt-cache show nvidia-jetpack | Installed JetPack version (package metapackage) |