Support Support Home » APIs » XIMEA Linux Software Package » Linux TX1 and TX2 Support

XIMEA Linux API for Nvidia Jetson
TX1 / TX2 / TX2i / Nano / AGX Xavier / NX


The following webpage describes the range of support for NVIDIA Jetson modules.
All of these excel in delivering high performance and power efficiency packed into a small size form.
They are ideal for use in deep learning, computer vision and other computing applications.
Below is a short description of each module:

Jetson TX1 is an embedded module from Nvidia which includes quad-core 64 bit ARM CPU and 256-core Maxwell GPU.

Jetson TX2 is a successor to TX1, updating GPU architecture to Pascal and improving the performance.

Jetson TX2i is an industrial version of TX2 module, including ECC memory support.

Jetson TX2 NX provides up to 2.5X the performance of Jetson Nano, and shares form-factor and pin compatibility with Nano and Xavierâ„¢ NX.

Jetson Nano is a low-cost Tegra module based on Jetson TX1 architecture.

Jetson AGX Xavier is the most recent member of Nvidia's Jetson platform. It brings a lot of upgrades including Volta GPU architecture.

Jetson Xavier NX brings supercomputer performance to the edge in a small form factor system-on-module (SOM) - up to 21 TOPS.

Developer Kit setup


NVIDIA Jetson TX1, TX2, TX2i

Follow the official quick start guide that can be found here:

Make sure that you have lbzip2 package installed.
In case your host machine isn't running Ubuntu you should replace the flashing command with the following sequence:

sudo cp /etc/mke2fs.conf .
sudo sed -i 's/64bit,//g' mke2fs.conf
MKE2FS_CONFIG="$(pwd)"/mke2fs.conf sudo -E ./ ${BOARD} mmcblk0p1

where ${BOARD} is one of the following:
jetson-tx1, jetson-tx2, jetson-tx2i or jetson-xavier.

Jetson TX2

Results of USB3 and PCIe interface cameras connected to the module:
Jetson TX2 Benchmarks

The official page for the dev kit can be found here:

Jetson TX2 NX module

Initial test results with XIMEA camera models:
Jetson TX2 NX Benchmarks

The official page for the module can be found here:

NVIDIA Jetson AGX Xavier

A useful article about preliminary tests with various XIMEA camera models:
Jetson AGX Xavier Benchmarks

Follow the official quick start guide that can be found here:

NVIDIA Jetson Nano

A useful article about preliminary tests with various XIMEA camera models:
Jetson Nano Benchmarks

Follow the official quick start guide that can be found here:

NVIDIA Jetson Xavier NX

A useful article about test results with XIMEA camera can be found here:
Jetson Xavier NX benchmarks

Follow the official quick start guide that can be found here:

Re-flashing xEC2 with L4T 32.3.1

Linux host with lbzip2 package installed is required for this procedure.

  1. Download L4T Driver Package and Sample Root Filesystem from for L4T version 32.3.1
  2. Download TX2_xEC2_32.3.1.tar.bz2 and oem_config-r32.3.1.patch
  3. Switch TX2 to recovery mode:
    1. connect USB Micro-B port on xEC2 to the host
    2. enable DIP switch closest to LEDs (xEC2-recovery_mode.jpg)
    3. connect the power to the board
    4. switch the DIP switch off after a few seconds
  4. Execute the following commands under root account (sudo -s can be used to gain privileges):

    tar --no-same-owner --no-same-permissions -xf Tegra186_Linux_R32.3.1_aarch64.tbz2
    tar -xf TX2_xEC2_32.3.1.tar.bz2
    cd Linux_for_Tegra/rootfs/
    tar --numeric-owner -xf ../../Tegra_Linux_Sample-Root-Filesystem_R32.3.1_aarch64.tbz2
    cd ../
    echo ':aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7:\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-aarch64-static:' | sudo tee /proc/sys/fs/binfmt_misc/register > /dev/null
    echo -1 | sudo tee /proc/sys/fs/binfmt_misc/aarch64 > /dev/null
    patch -p0 < ../oem_config-r32.3.1.patch #optional, needed for non-interactive OS setup
    cp /etc/mke2fs.conf .
    sed -i 's/64bit,//g' mke2fs.conf
    MKE2FS_CONFIG="$(pwd)"/mke2fs.conf ./ jetson-tx2 mmcblk0p1
    rm bootloader/system.img.raw

  5. Give TX2 several minutes to finish installation after it boots
  6. Now you can log in to nvidia account using nvidia password, either by connecting keyboard, mouse and monitor directly to xEC2 or via SSH

When the board is connected to the host using a USB cable as described above, the network connection is automatically created and the board can be accessed at IP

Alternatively, when using Ethernet (or Wi-Fi) connection you can use nmap utility to find the IP address of TX2 (assuming the host and TX2 are connected to the same physical segment of the network):

sudo nmap -sn -PR $(ip addr show | grep 'inet ' | grep |grep inet\ |grep -v 'scope host lo' | cut scope\ host\ lo|cut -f6 -d' ') | grep -d\ )|grep -B 2 Nvidia

Installing XIMEA API package

Run the following commands on Jetson:

sudo apt update
sudo apt install ca-certificates
tar -xf XIMEA_Linux_SP.tgz
cd package
sudo gpasswd -a "$(whoami)" plugdev
if [ -f /etc/rc.local ]
sudo sed -i '/^exit/ d' /etc/rc.local
echo '#!/bin/sh -e'                                            | sudo tee    /etc/rc.local > /dev/null
echo 'echo 0 > /sys/module/usbcore/parameters/usbfs_memory_mb' | sudo tee -a /etc/rc.local > /dev/null
echo 'exit 0'                                                  | sudo tee -a /etc/rc.local > /dev/null
sudo chmod a+x /etc/rc.local
#enable controlling of memory frequency by user
echo 'KERNEL=="emc_freq_min", ACTION=="add", GROUP="plugdev", MODE="0660"' | sudo tee /etc/udev/rules.d/99-emc_freq.rules > /dev/null
#optional: allow user to use realtime priorities
sudo groupadd -fr realtime
echo '*         - rtprio   0' | sudo tee    /etc/security/limits.d/ximea.conf > /dev/null
echo '@realtime - rtprio  81' | sudo tee -a /etc/security/limits.d/ximea.conf > /dev/null
echo '*         - nice     0' | sudo tee -a /etc/security/limits.d/ximea.conf > /dev/null
echo '@realtime - nice   -16' | sudo tee -a /etc/security/limits.d/ximea.conf > /dev/null
sudo gpasswd -a "$(whoami)" realtime
sudo mkdir /etc/systemd/system/user@.service.d
echo '[Service]'                                                                                 | sudo tee    /etc/systemd/system/user@.service.d/cgroup.conf > /dev/null
echo 'PermissionsStartOnly=true'                                                                 | sudo tee -a /etc/systemd/system/user@.service.d/cgroup.conf > /dev/null
echo 'ExecStartPost=-/bin/sh -c "echo 950000 > /sys/fs/cgroup/cpu/user.slice/cpu.rt_runtime_us"' | sudo tee -a /etc/systemd/system/user@.service.d/cgroup.conf > /dev/null
sudo reboot

PCIe support

On 64-bit version of Linux For Tegra (available since R24.1) it is possible to use PCIe cameras.
To enable support for PCIe in XIMEA API you need to run install script (see installation section) with -pcie flag:

./install -pcie

It may be necessary to run the following command beforehand:
sudo make -C /lib/modules/"$(uname -r)"/build modules_prepare

Memory bandwidth problems

By default, the memory frequency is controlled by the kernel dynamically, which means that sufficient memory bandwidth isn't available at all times.
This causes crashes, hangs and lost frames when PCIe or USB3 cameras are used.
The solution is to raise the lower limit for memory frequency when image acquisition is running.
The following wrapper script can be used for that:

# TX1:
# # cat /sys/kernel/debug/clock/emc/possible_rates
# 40800 68000 102000 204000 408000 665600 800000 1065600 1331200 1600000 (kHz)
# TX2:
# # cat /sys/kernel/debug/bpmp/debug/emc/possible_rates
# 40800 68000 102000 204000 408000 665600 800000 1062400 1331200 1600000 1866000 (kHz)
# Xavier:
# # cat /sys/kernel/debug/bpmp/debug/emc/possible_rates
# 204000 408000 665600 800000 1065600 1331200 1600000 1866000 2133000 (kHz)
exec 3> /dev/emc_freq_min
printf '%x' "$EMC_FREQ" >&3
exec "$@" 

Save it to ~/ file and execute the following command:

chmod a+x ~/

Running sample applications

To do a simple validation that everything is working you can run xiSample:

~/ /opt/XIMEA/bin/xiSample

To view a live picture from a camera start CamTool:

~/ /opt/XIMEA/bin/xiCamTool

Alternatively streamViewer application can be used, but you need to compile it first:

cd /opt/XIMEA/examples/streamViewer
sudo apt update
sudo apt install libgtk2.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-x
sudo make GST10=1
sudo make install

Then you can start the viewer:

~/ /opt/XIMEA/bin/streamViewer

TX2 USB issues

Linux For Tegra R27.1 and R28.1

USB3 controller firmware in L4T before R28.2 contains a bug which affects XIMEA USB3 cameras connected to TX2 module.
The solution is to either upgrade to R28.2 or a later version, or take the firmware from R28.2 driver package:

tar -xf Tegra186_Linux_R28.2.0_aarch64.tbz2
tar -xf Linux_for_Tegra/nv_tegra/nvidia_drivers.tbz2 lib/firmware/tegra18x_xusb_firmware

lib/firmware/tegra18x_xusb_firmware file then has to be placed in /lib/firmware/ directory on TX2 filesystem overwriting older firmware.
Reboot Jetson for changes to take effect.

PCIe issues

Linux For Tegra R27.1

In order to have support for PCIe XIMEA cameras with L4T R27.1 you need to recompile the kernel using the instructions on this web page:

After that XIMEA API package can be installed with PCIe support bypassing the -pcie option to install script:

./install -pcie

Linux For Tegra R24.2

Due to a bug in the L4T R24.2 release devices don't work correctly when they are connected through an active PCIe switch (e.g. using host adapter for fiber cables).

The workaround is to disable IOMMU for PCIe controller in device tree configuration file:

cd /usr/src/linux-headers-$(uname -r)
sudo make modules_prepare
sudo scripts/dtc/dtc -I dtb $(grep FDT /boot/extlinux/extlinux.conf|sed 's/.*FDT //') -o /boot/devicetree.dts
sudo sed -i~ -e '/{$/ h ; x ; /pcie-controller / { x ; /iommus/ d ; x } ; x' /boot/devicetree.dts
sudo scripts/dtc/dtc /boot/devicetree.dts -O dtb -o /boot/devicetree.dtb
sudo sed -i~ -e 's|FDT .*|FDT /boot/devicetree.dtb|' /boot/extlinux/extlinux.conf
sudo reboot