Welcome
This Developer Guide applies to NVIDIA® Jetson™ Linux version 35.6.0 GA. Last update: September 04, 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 |
|
|
NVIDIA Jetson Xavier™ NX series |
|
|
NVIDIA Jetson AGX Xavier 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:
Jetson Xavier AGX Series Software Features
Power Management for Jetson AGX Orin Devices
Some examples of subheadings:
Applies to Jetson AGX Orin only.
Applies to Jetson Xavier NX series and Jetson AGX Xavier series only.
Jetson Xavier NX series refers to all variants of Jetson Xavier NX. Jetson Xavier NX or original Jetson Xavier NX refers to the original Jetson Xavier NX (P3668-0000 or P3668-0001) only.
Jetson AGX Xavier series refers to all variants of Jetson AGX Xavier. Jetson AGX Xavier or original Jetson AGX Xavier refers to original Jetson AGX Xavier (P2888-0001) 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.
Introduction
Architecture
- Jetson Software Architecture
- Boot Architecture
- Jetson AGX Orin, Orin NX and Orin Nano Boot Flow
- Jetson Xavier NX and Jetson AGX Xavier 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
Software Feature Overview
- Jetson Orin Series
- Jetson Xavier NX Series
- Jetson AGX Xavier Series
- Bootloader
- Toolchain
- Kernel
- Debug Interface
- Camera Interface
- LSIO
- HDMI
- DisplayPort
- PCIe
- SDMMC
- SATA
- SATA-Marvel (over PCIe)
- UFS
- Security Engine
- USB 3.0
- Ethernet
- Ethernet Controller Features (EQOS)
- Power Modes (Profiles)
- RTC
- Watchdog
- System
- CUDA
- Graphics
- Multimedia
- Control Area Network (CAN)
- Audio
- Not Supported Features
Software Features in Depth
- Flashing Support
- Before You Begin
- Basic Flashing Script Usage
- Basic Flashing Procedures
- Installing the Flash Requirements
- Flashing the Target Device
- To flash using a convenient script
- To flash the target device to mount a rootfs specified by UUID
- To flash the target device to mount a rootfs specified by partition device name
- To clone a Jetson device and flash
- To back up and restore a Jetson device
- To RCM boot to 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
- 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
- Enable 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
- Storage Optimization
- 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
- GPIO Interrupt Mapping Configuration
- MB2 BCT Misc Configuration
- Security Configuration
- UEFI Adaptation
- Update and Redundancy
- Kernel
- Kernel Adaptation
- Kernel Customization
- Generic Timestamp Engine
- BMI088 IMU Driver
- Kernel Boot Time Optimization
- Display Configuration and Bring-Up
- Multimedia
- Multimedia APIs
- GStreamer API
- GStreamer-Based Camera Capture
- 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
- Software Encode in Orin Nano
- Hardware Acceleration in the WebRTC Framework
- Graphics
- Graphics APIs
- Graphics Programming
- EGLDevice
- EGLStream
- 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
- Generate A PKC Key Pair
- Prepare an SBK key
- Prepare K1/K2/KEK 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
- Legacy Support of Secure Boot for Xavier SoC
- Burning PKC, KEK, and SBK Fuses
- 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
- PCIe Endpoint Mode
- Hardware Requirements
- Flashing PCIe as Endpoint on a Jetson NX Xavier Series System
- Flashing PCIe as Endpoint on a Jetson AGX Xavier Series System
- Flashing PCIe as Endpoint on a Jetson AGX Orin Series System
- Flashing PCIe as Endpoint on a Jetson Orin NX/Nano Series System
- Connecting and Configuring the Devices
- Testing Procedures
- Bringing up an Ethernet Interface over PCIe
- Enabling Bluetooth Audio
- Audio Setup and Development
- PCIe Endpoint Mode
- 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 Xavier NX Series and Jetson AGX Xavier 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
- Working with the Packages
- Over-the-Air Update
- Updating from the NVIDIA APT Server
- Downloading Debian Packages for Later Use
- 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
- Updating with Partition Layout Changes
- Backing Up and Restoring Files on the APP Partition
- OTA Upgrades on an External Device
- OTA Upgrades with Disk Encryption Enabled
- OTA Upgrades with UEFI Secure Boot 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
- Boot Time Optimization
- Working With Sources
Hardware References
- 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
- Changing GPIO Pins
- Porting the Linux Kernel
- PCIe Controller Configuration
- Porting the Universal Serial Bus
- USB Structure
- USB SerDes Lane Assignment
- Required Device Tree Changes
- Under the usci_ccg Node
- The Jetson AGX Orin Devkit Default PCIe Configuration
- Enable PCIe in a Customer CVB Design
- Debug PCIe Link-Up Failure
- Enabling the PCIe ASPM
- Enabling more SPI interrupts for PCIe
- For PHY
- For Switch
- For RGMII
- UPHY Lane Configuration
- Enable the eMMC EUDA
- EMMC Lifecycle and Data Retention/Refresh
- Jetson AGX Xavier Series
- 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
- Changing the GPIO Pins
- EEPROM Modifications
- Porting the Linux Kernel Device Tree Files
- Configuring the PCIe Controller
- Porting Universal Serial Bus
- UPHY Lane Configuration
- Jetson Xavier NX Series
- 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
- Configuring the Jetson Expansion Headers
- Controller Area Network (CAN)
Applications and Tools
- Board Automation
- Jetson Linux Toolchain
- Jetson Linux Development Tools
- How to Submit a Bug Report