Developing Applications for Jetson TK1

This section covers the basics of how to develop functional applications for the Jetson TK1 devices. The applications can be thought of as belonging to one of two groups: the CUDA-enabled and non-CUDA enabled applications.

Non-CUDA enabled applications can be developed by Netbeans, Nsight, Eclipse, or any other Linux-oriented development platform.

CUDA applications must be developed through Nvidia's Nsight IDE.


Since the Jetsons run a slightly Nvidia-modified version of Ubuntu 14.04, two things are important:

  1. Be at least minimally familiar with accessing Linux computers via SSH and navigating/operating via the terminal. The Jetsons can be run in Headed mode, however space and available displays in the lab is limited, so headed mode is of limited practicality. You will work with the Jetsons through the Terminal 99% of the time.

  2. DO NOT upgrade the Jetsons' OS to new major release versions. Minor update-upgrade procedures are fine.

Development via NetBeans etc.

The basic principle is to develop code locally, sync it to the svn, and use scripts to trigger a donwload+build process on the Jetsons.

NetBeans has a built-in SVN client, so you can set it up so that your projects are moved into the 3DLab/code repository.

If you develop applications that target GStreamer, feel free to use the standard, up-to-date gstreamer & gstreamermm packages from the ubuntu repositories. However, to ensure that it builds on the Jetsons, use pkg-config to set up gstreamer dependencies, and prepend the build instruction by exporting the correct config path via:

export PKG_CONFIG_PATH=/home/ubuntu/gstreamer-build/out/lib/pkgconfig

For developing apps using the Basler cameras, install the Basler Pylon v5.0.12 libraries on your local device, following instructions in the 3DLab/code/pylonSDK repository. Or feel free to download the Pylon SDK from Basler's website directly. Note, the Jetson TK1s use Basler Pylon 5.0.5.

For reference, see the build script setup in 3DLab/code/scripts/jetson-scripts repository, and the Netbeans project setup of e.g. 3DLab/code/camera-test/GStreamerCameraAppSource project.

For your applications, once they build on the local device, sync them to the repository (3DLab/code/(at your discretion)), and set up a build script for your project in 3DLab/code/scripts/jetson-scripts . The build scripts can be launched at the Jetsons, using the send-to and send-to-all scripts in 3DLab/code/scripts. E.g. send-to jetson-scripts/YOURBUILDSCRIPT 7 will launch the build script to Jetson number 7. The text file .../scripts/ssh-ports-tegra-list has the mapping between a Jetson order number and the ssh port it is bound to.

Development via Nvidia Nsight

For developing CUDA applications, we suggest Nsight as the only functioning solution.

Refer to Nvidia Nsight Remote Development Info page to see how Nsight can be set up on your local machine. You do not need an Nvidia GPU, but you do need to install the CUDA toolchain and development tools (including the nvcc compiler).

Nsight remote development is via the git sync method (we don't recommend cross-compilation due to significant environment differences). Please remember to back up your projects to the SVN repository too, and please remember not to overlap another person's Nsight projects with yours on the Jetson devices. Set up your own development subdirectory under the Jetsons' ~/apps/YOURDIR.

The Jetsons have the equivalent of CUDA 6.5 and support Compute Model Version 3.0. (Possibly, 3.2). This means that your local Nsight/Cuda Toolkit install should be able to target Compute Model 3.0. CUDA version 10.0 and upwards might not have this capability, so for developing against Jetsons, Cuda Toolkit Version 9.1 is a reasonable choice on your local machine.


  1. Prepare your local (development) linux computer.
  2. Install Cuda Toolkit (v9.1). Nvidia graphics driver optional, IF you have a GPU locally.
  3. Install Nsight.
  4. Open/start a sample cuda app, make sure it builds locally.
  5. Set up Nsight for remote development (Using the Jetson as a remote target - don't forget about the git config commands, and detecting the Jetson's Cuda Toolkit paths).
  6. Try to build and run a Cuda "hello world"-style application on a Jetson (preferably one that isn't actively used by someone else at the moment). The default app that Nsight gives you as "new c++/cuda project" will do just fine.

Final Note:

commit: $Id: 817 2018-10-12 12:34:32Z elidim $