Welcome
This Developer Guide applies to NVIDIA® Jetson™ Linux version 36.3 GA. Last update: May 21, 2024
NVIDIA Jetson is the world’s leading platform for AI at the edge. Its high-performance, low-power computing for deep learning, and computer vision makes Jetson the ideal platform for compute-intensive projects. The Jetson platform includes a variety of Jetson modules with NVIDIA JetPack™ SDK.
Each Jetson module is a computing system packaged as a plug-in unit (a System on Module (SOM)), and NVIDIA offers a variety of Jetson modules with different capabilities.
Starting with NVIDIA Jetson Linux, JetPack bundles the Jetson platform software. Jetson Linux provides the Linux kernel, bootloader, NVIDIA drivers, flashing utilities, sample file system, and more for the Jetson platform.
Jetson Developer Kits and Modules
Jetson developer kits include a non-production specification Jetson module attached to a reference carrier board. It is used with JetPack SDK to develop and test software for your project. Jetson developer kits are not intended for production use.
Jetson modules, which are designed for deployment in a production environment, are sold separately from Jetson developer kits. Each Jetson module ships with no software preinstalled. You can attach it to a carrier board, which was designed or procured for your end product, and flash it with the software image that you developed.
Software for Jetson Modules and Developer Kits
JetPack SDK is a comprehensive resource for building AI applications, and the SDK includes Jetson Linux with accelerated software libraries, APIs, sample applications, developer tools, and documentation.
Use NVIDIA SDK Manager to install Jetson Linux and other JetPack components on your Jetson developer kit. For instructions, see the appropriate Jetson Developer Kit user guide. You can also refer to Quick Start to flash your Jetson module with the bootloader and file system only, excluding other JetPack components.
For information about moving a completed application from a Jetson developer kit to a production Jetson module on your production carrier board, refer to Jetson Module Adaptation and Bring-Up for your Jetson module.
You can customize Jetson Linux software to fit the needs of your project. This developer guide contains the information you need to optimize your use of the complete Jetson product feature set.
Documentation for Jetson Modules and Developer Kits
This developer guide is your primary resource for information about software development for Jetson modules.
NVIDIA publishes many other documents that address specific aspects of Jetson software and hardware. Refer to Related Documentation for more information. Many of these documents and others are available in the Jetson Download Center. To find a document, enter a string of consecutive words from the document’s title in the Search field. Use the Product drop-down list to restrict your search to documents for a Jetson device.
The NVIDIA Autonomous Machines Getting Started page contains links to several documents that are useful to developers who are new to artificial intelligence (AI) programming or to Jetson products. This page has links to Getting Started guides and user guides for each Jetson module’s developer kit.
Additional resources and important facts about Jetson Linux are on the Jetson Linux home page of the NVIDIA Developer web site.
Devices Supported by This Document
The NVIDIA Jetson Linux Developer Guide covers use of Jetson Linux with any of the module and reference carrier board combinations described in this table.
Type of Module |
Module Name and P-number* |
Compatible Developer Kit |
---|---|---|
NVIDIA Jetson Orin Nano Series |
|
|
NVIDIA Jetson Orin NX Series |
|
|
NVIDIA Jetson AGX Orin series |
|
|
The P-numbers for NVIDIA Jetson modules and developer kits are derived from their 699-level part numbers (PNs). Refer to JetsonEepromLayout for details about the structure of a 699-level part number for modules.
For more information about the various Jetson modules and developer kits, see the Jetson Developer Site and the Jetson FAQ.
How Developer Guide Topics Identify Devices
If a Developer Guide topic does not apply to all supported Jetson devices, its heading or subheading specifies its scope. Here are two examples of scope headings:
Power Management for Jetson AGX Orin Devices
Some examples of subheadings:
Applies to Jetson AGX Orin only.
Note
The word original is descriptive and is used only to clarify the products being referenced. It is not a part of a Jetson product name.
- Jetson Software Architecture
- Boot Architecture
- Jetson AGX Orin, Orin NX and Orin Nano Boot Flow
- Partition Configuration
- MB1 Platform Configuration
- About MB1 BCT
- Pinmux/GPIO Configuration
- Example
- Common Prod Configuration
- Controller Prod Configuration
- Pad Voltage Configuration
- PMIC Configuration
- Security Configuration
- GPIO Interrupt Mapping Configuration
- Storage Device Configuration
- UPHY Lane Configuration
- OEM-FW Ratchet Configuration
- BootROM Reset PMIC Configuration
- Miscellaneous Configurations
- About MB1 BCT
- Flashing Support
- Before You Begin
- Basic Flashing Script Usage
- Basic Flashing Procedures
- Installing the Flash Requirements
- Flashing the Target Device
- Flashing by Using a Convenient Script
- Flashing the Target Device to Mount a rootfs Specified by a UUID
- Flashing the Target Device to Mount a rootfs Specified by the Partition Device Name
- Explaining Board Configuration File and Generating a Flash Image to Flash Later
- Cloning a Jetson Device and Flashing
- Backing Up and Restoring a Jetson Device
- RCM Booting to the NFS
- Flashing Script Usage
- Flashing to a USB Drive
- Flashing to an NVMe Drive
- Flashing to an SD Card
- Flashing to an External Storage Device
- Flashing a Specific Partition
- Flashing for NFS as Root
- Flashing with initrd
- Flashing to Multiple Jetson Devices
- Flashing to Jetson Without Reading EEPROM
- Enlarging an Internal Memory Partition for Root File System
- Determining the Success of a Driver Update
- Reconfiguring a Jetson Device with oem-config
- Modifying Jetson RAM Disk
- Enabling AGX Orin, Orin NX, and Orin Nano in USB3 Recovery Mode
- Using initrd Flash with Orin NX and Nano
- Using flash.sh with Orin NX and Nano
- Configuring a PXE Boot Server for UEFI bootloader on Jetson
- Emulation Flash Configurations
- Root File System
- Bootloader
- T23x Boot Configuration Table
- Pinmux and GPIO Configuration
- Common Prod Configuration
- Controller Product Configuration
- Pad Voltage DT Binding
- PMIC Configuration
- Storage Device Configuration
- UPHY Lane Configuration
- OEM-FW Ratchet Configuration
- BootROM Reset PMIC Configuration
- Miscellaneous Configuration
- SDRAM Configuration
- DRAM-ECC
- GPIO Interrupt Mapping Configuration
- MB2 BCT Misc Configuration
- Security Configuration
- UEFI Adaptation
- Update and Redundancy
- Kernel
- Kernel Adaptation
- Kernel Customization
- Bring Your Own Kernel
- Generic Timestamp Engine
- BMI088 IMU Driver
- Boot Time Optimization
- Display Configuration and Bring-Up
- Multimedia
- Multimedia APIs
- Accelerated Decode with ffmpeg
- Accelerated GStreamer
- GStreamer-1.0 Installation and Set up
- Decode Examples
- Encode Examples
- Camera Captures with GStreamer-1.0
- Video Playback with GStreamer-1.0
- Video Streaming with GStreamer-1.0
- Video Format Conversion with GStreamer-1.0
- Video Scaling with GStreamer-1.0
- Video Cropping with GStreamer-1.0
- Video Transcode with GStreamer-1.0
- CUDA Video Post-Processing with GStreamer-1.0
- Video Rotation with GStreamer-1.0
- Video Composition with GStreamer-1.0
- Interpolation Methods for Video Scaling
- EGLStream Producer Example
- EGL Image Transform Example
- GStreamer Build Instructions
- nvgstcapture-1.0 Reference
- nvgstplayer-1.0 Reference
- Video Encoder Features
- Supported Cameras
- IPC Plugins
- Software Encode in Orin Nano
- Hardware Acceleration in the WebRTC Framework
- Typical Buffer Flow for NvEncoder
- Typical Buffer Flow for NvDecoder
- Typical WebRTC Architecture of NvPassThroughEncoder
- Typical WebRTC Architecture of NvPassThroughDecoder
- Application and Unit Test Setup
- Important Method Calls for NvEncoder
- Important Method Calls for NvDecoder
- The WebRTC Package
- Limitations
- WebRTC Streaming Sample with Argus Camera Source
- Graphics
- Graphics APIs
- Graphics Programming
- EGLStream
- EGLDevice
- Sample Applications
- OpenWFD
- Vulkan SC
- Vulkan SC Samples
- Windowing Systems
- Weston (Wayland)
- Weston/Wayland Architecture
- Shells
- Configuration
- Environment Variables
- GBM
- Running Weston
- Multiple Display Heads
- Example of weston.ini Display Options
- Hot-Plugging
- Compositing Mode in Weston
- NV16/NV24 in Weston
- Shared-Memory Rendering
- DMA Buffer Rendering
- Weston dma-buf Support
- weston-debug
- GNOME Wayland Desktop Shell Support
- X Window System
- Starting X Server Manually
- Runtime Configuration
- Using xrandr for Runtime Configuration
- Querying Supported Displays and Screen Resolutions
- Obtaining Additional Help
- Modifying the Static Configuration (Optional)
- Using nvidia-xconfig to Configure xorg.conf
- Configurations that Require Editing xorg.conf
- Weston (Wayland)
- Camera Development
- Camera Software Development Solution
- Sensor Software Driver Programming
- Camera Core Library Interface
- Direct V4L2 Interface
- Camera Modules and the Device Tree
- Individual Imaging Devices
- V4L2 Kernel Driver (Version 1.0)
- Macro Definitions
- Sensor-Private Data
- Configuring Regmap
- Configuring Controls
- To link the controls to their control handlers
- Setting Up Control Registers
- Power Functions
- Setting Up the V4L2 Subdevice and Camera Common
- Control Handlers
- Device Tree Parser
- Media Controller Setup
- Sensor Driver Probing
- Setup of Media Controller
- Removing Sensor Drivers
- V4L2 Kernel Driver (Version 2.0)
- Macro Definitions
- Sensor-Private Data
- Register map (regmap)
- Sensor Controls
- Exposure Controls
- Fixed Point Format
- Control Handlers
- Setter Control Handlers (for Writing Settings)
- Fill-String Control Handlers (for Reading Settings)
- How Controls Are Implemented
- Registering the Controls
- How to provide the link to the control handlers
- Setting Up Registers for the Control Handler
- Read-Write Wrapper in the Register
- Power Functions
- Stream Functions
- Miscellaneous Functions
- Control Operations
- Boot-Time Initialization
- Loadable Kernel Module (LKM)
- Kernel Configuration
- Device Registration
- Verifying the V4L2 Sensor Driver
- Debugging Tips
- To verify that driver name matches the name in the Device Tree
- To verify that all device names match the device tree
- To verify that the Device tree values match the hardware
- To verify that functions run to completion
- To verify that default values are correctly linked
- To verify that control register values are correct
- To verify that mode-specific settings are correct
- To verify that I2C accesses are working properly
- Configuring the Sensor Driver as a Loadable Kernel Module (LKM)
- Mode Tables
- Camera Sensor Drivers Porting
- Jetson Virtual Channel with GMSL Camera Framework
- Argus NvRaw Tool
- Camera Driver Porting
- Security
- Secure Boot
- Overall Fusing and Signing Binaries Flow
- Prerequisites Secure Boot
- Fuses and Security
- Fuse Configuration File
- Prepare an SBK key
- Prepare K1/K2 keys
- Prepare the Fuse Configuration file
- Burn Fuses with the Fuse Configuration file
- Read Fuses through the Linux kernel
- Sign and Flash Secured Images
- Revocation of the PKC Keys
- UEFI Secureboot
- UEFI Payload Encryption
- UEFI Variable Protection
- UEFI Platform Vendor Key Feature
- Kernel Module Signing
- OP-TEE: Open Portable Trusted Execution Environment
- Disk Encryption
- Quick Guide
- Setup Preparation
- Details of Operation
- The Threat Model
- Disk Encryption Implementation in Jetson Linux
- Layout of an Encrypted Disk
- How to Create File System Images
- Creating an Encrypted Rootfs on the Host
- How to Flash an Encrypted Rootfs to an External Storage Device
- To Enhance initrd to Unlock an Encrypted Rootfs
- To modify initrd to unlock additional encrypted file systems
- Enabling Disk Encryption Only for UDA
- Enabling Disk Encryption for Dynamically Created Partitions
- Modifying /opt/nvidia/cryptluks to Unlock Previously Created and Encrypted File Systems
- Summary
- Manufacturing process
- Secure Storage
- Rollback Protection
- Memory Encryption
- PVA Authentication
- Secure Boot
- Communications
- Clocks
- Platform Power and Performance
- Jetson Orin Nano Series, Jetson Orin NX Series and Jetson AGX Orin Series
- Interacting Features
- Kernel Space Power Saving Features
- Clock and Voltage Management
- CPU Power Management
- Memory Power Management
- Supported Modes and Power Efficiency
- Fan Profile Control
- Thermal Management
- Thermal Management in Linux
- Thermal Management in BPMP
- Thermal Specifications
- Software-Based Power Consumption Modeling
- Related Tools and Techniques
- Jetson Orin Nano Series, Jetson Orin NX Series and Jetson AGX Orin Series
- Software Packages and the Update Mechanism
- Installing Additional Packages
- Repackaging Debian Packages
- Building Kernel Debian Packages Yourself
- Using the Repackager Tool
- Converting a Debian File
- Converting Multiple Debian Files
- Converting all Debian Files Under BSP
- Converting a Subset of Files and Placing the Output in the Designated Directory
- Converting Files to Different Paths
- Printing Out the Dependencies of a Converted Debian File
- Ignoring the Dependency Check Failure
- Working with the Packages
- Over-the-Air Update
- Updating from the NVIDIA APT Server
- Updating a Jetson Device
- Real-Time Kernel Using OTA Update
- Updating a Host
- Debian Packages on the NVIDIA APT Server
- Customizing Debian Packages
- Updating Jetson Linux with Image-Based Over-the-Air Update
- Terms and Abbreviations
- High-Level Flow
- Preparing for an Image-Based OTA Update
- Utility to Trigger an OTA
- Backing Up and Restoring Files on the APP Partition
- OTA Upgrades on an External Device
- OTA Upgrades with Disk Encryption Enabled
- Complete and Secure the OTA
- Customization
- Updating the Rootfs Partition with a Customized Updater and Image
- User Release Version
- Updating the ESP Partition
- Examples
- Working With Sources
- Test Plan and Validation
- Flash and Boot
- System Software
- Detection of USB Hub (FS/HS/SS)
- Detection of USB-3.0 Flashdrive (Hot plug-in)
- Detecting the Keyboard
- Detecting the Mouse
- Cold Boot 10 Cycles
- Warm Boot 10 Cycles
- Checking for Failures and Error Messages in dmesg
- Using the Display Port (DP)
- LP0-Resume Basic Functionality
- UART I/O (Debug Print Messages)
- Configuring the 40-Pin Expansion Header
- Jetson-Linux WatchDog Timer Enable Verification
- Verifying the Boot Time Services and Scripts
- nvpmodel: Setting and Verifying the Minimum and Maximum Power Modes
- Running the tegrastats Command
- Graphics
- Kernel
- Camera
- Comms
- Multimedia Encode/Decode
- Camera capture using GStreamer
- Encode using GStreamer
- Decode using GStreamer
- JPEG Decode using GStreamer
- JPEG Encode using GStreamer
- Transform using GStreamer
- Transcode using GStreamer
- Video Playback using Application
- MP3 Playback Test to Verify that MP3 Playback is Successful Using nvgstplayer-1.0
- MP3 Streaming (Stream the MP3 file from an HTTP Server)
- Streaming Audio and Video File from the HTTP Server
- AUDIO+VIDEO rtsp streaming:H264+AAC
- Camera Argus Samples
- Web Camera capture using GStreamer
- NVIDIA Containers
- CUDA Samples
- TensorRT Samples
- TRT + MM
- MM Samples
- Complete Pipeline: Inferencing
- DeepStream Test Apps
- Triton
- Jetson AI Benchmarks
- VPI
- Jetson Developer Kit Setup
- Jetson EEPROM Layout
- Jetson Module Adaptation and Bring-Up
- Jetson AGX Orin Series
- Board Configuration
- Board Naming
- CPU Split-Lock Feature
- Placeholders in the Porting Instructions
- Camera Connector Pin Differences
- Root Filesystem Configuration
- MB1 Configuration Changes
- MB2 Configuration Changes
- Changing the Pinmux
- Configuring the pinmux Setting of I2C and DP1_AUX
- Changing GPIO Pins
- Enabling GPIO as a Wake-Up Source
- Porting the Linux Kernel Device Tree
- Porting the Universal Serial Bus
- PCIe Controller Configuration
- Ethernet Controller Configuration
- UPHY Lane Configuration
- Enable the eMMC EUDA
- EMMC Lifecycle and Data Retention/Refresh
- Jetson Orin NX and Nano Series
- Board Configuration
- Naming the Board
- Placeholders in the Porting Instructions
- Root Filesystem Configuration
- MB1 Configuration Changes
- Identifying the GPIO Number
- Configuring the pinmux Setting of I2C and DP1_AUX
- Changing the GPIO Pins
- EEPROM Modifications
- Porting the Linux Kernel Device Tree
- Configuring the PCIe Controller
- Porting Universal Serial Bus
- UPHY Lane Configuration
- HDMI Support
- Checklists
- Hardware Bring-Up Checklist
- Before Power-On
- Initial Power-On
- Initial Software Flashing
- Power
- Power Optimization
- USB 2.0 PHY
- USB 3.0
- HDMI
- DisplayPort
- Audio
- UART
- SD Card Pinouts
- Fan
- Sensors I2C: General
- Sensors I2C: Touch Screen (Optional)
- PEX (Optional)
- SATA (Optional)
- PCIe (Optional)
- Embedded Display(s) (Optional)
- Imager(s) (Optional)
- Software Bring-Up Checklist
- Hardware Bring-Up Checklist
- Jetson AGX Orin Series
- Hardware Reference Documentation
- Configuring the Jetson Expansion Headers
- Controller Area Network (CAN)
- Board Automation
- Jetson Linux Toolchain
- Jetson Linux Development Tools
- How to Submit a Bug Report