From ProventusNova DeveloperWiki
 
(25 intermediate revisions by the same user not shown)
Line 5: Line 5:


==Getting the sources==
==Getting the sources==
In this wiki we will use as an example JetPack version 6.2.1 (L4T 36.4.4). You can find the desired JetPack version from [https://developer.nvidia.com/embedded/jetson-linux-archive Jetson Linux Archives]
You can find the desired JetPack version from [https://developer.nvidia.com/embedded/jetson-linux-archive Jetson Linux Archives].
=== JetPack 6.2.1 ===


1. Go to JetPack 6.2.1 release Page: [https://developer.nvidia.com/embedded/jetson-linux-r3644 NVIDIA Jetson Linux 36.4.4] and download “L4T Driver Package (BSP)” and “Sample Root filesystem”.
1. Go to JetPack's version release page and download “L4T Driver Package (BSP)” and “Sample Root filesystem”.


2. You should see this two files:
2. You should see this two files with the following names, where '''XXX''' specifies the version for L4T:
* Jetson_Linux_R36.4.4_aarch64.tbz2
* Jetson_Linux_RX.X.X_aarch64.tbz2
* Tegra_Linux_Sample-Root-Filesystem_R36.4.4_aarch64.tbz2
* Tegra_Linux_Sample-Root-Filesystem_RX.X.X_aarch64.tbz2


3. Create a directory for installing JetPack. Referred to as <INSTALL_DIR>. For example:
3. Create a directory for installing JetPack. Referred to as <INSTALL_DIR>. For example:
Line 24: Line 23:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cp $HOME/Downloads/Jetson_Linux_R36.4.4_aarch64.tbz2 .
cp $HOME/Downloads/Jetson_Linux_RX.X.X_aarch64.tbz2 .
cp $HOME/Downloads/Tegra_Linux_Sample-Root-Filesystem_R36.4.4_aarch64.tbz2 .
cp $HOME/Downloads/Tegra_Linux_Sample-Root-Filesystem_RX.X.X_aarch64.tbz2 .
</syntaxhighlight>
</syntaxhighlight>


5. Extract "L4T Driver Package" tarball:
5. Extract "L4T Driver Package" tarball:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
sudo tar -vjxf Jetson_Linux_R36.4.4_aarch64.tbz2
tar -vjxf Jetson_Linux_RX.X.X_aarch64.tbz2
</syntaxhighlight>
</syntaxhighlight>


Line 38: Line 37:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
sudo tar -C Linux_for_Tegra/rootfs/ -vxjf Tegra_Linux_Sample-Root-Filesystem_R36.4.4_aarch64.tbz2
sudo tar -C Linux_for_Tegra/rootfs/ -vxjf Tegra_Linux_Sample-Root-Filesystem_RX.X.X_aarch64.tbz2
</syntaxhighlight>
</syntaxhighlight>


Line 47: Line 46:
</syntaxhighlight>
</syntaxhighlight>


The release tag can be extracted from the release notes of the JetPack version. In the case of Jetpack 6.2.1, release tag is: jetson_36.4.4.
The release tag can be extracted from the release notes of the JetPack version.


8.Return to "Linux_for_Tegra" directory and apply binaries.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cd ../
./source_sync.sh -k -t jetson_36.4.4
sudo ./apply_binaries.sh
</syntaxhighlight>
</syntaxhighlight>


Now you are all set up to customize and build your own kernel.
8.Return to "Linux_for_Tegra" directory and apply binaries.

==Customizing the kernel==

===JetPack 6.X ===
1. Go to source directory.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cd Linux_for_Tegra
cd <INSTALL_DIR>/Linux_for_Tegra/source
sudo ./apply_binaries.sh
</syntaxhighlight>
</syntaxhighlight>


2. Install pre-requisites
<syntaxhighlight lang="bash">
sudo apt install build-essential bc
</syntaxhighlight>


3.Install the toolchain from Jetson Linux release page. From the Tools tab, download '''Bootlin Toolchain gcc'''.
9. Inside Linux_for_Tegra directory, create default user with:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
mkdir $HOME/l4t-gcc
sudo ./tools/l4t_create_default_user.sh -u <username> -p <password> -n <hostname>
cd $HOME/l4t-gcc
tar xf <toolchain_archive>
</syntaxhighlight>
</syntaxhighlight>

for example:

====Building the Jetson Linux Kernel====

1. Go into <INSTALL_DIR>/Linux_for_Tegra/source directory.

2. Set environment variable for cross-compilation, kernel-headers and kernel-output.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
export CROSS_COMPILE=$HOME/l4t-gcc/aarch64--glibc--stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-
sudo ./tools/l4t_create_default_user.sh -u nvidia -p nvidia -n nvidia
export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src
export KERNEL_OUTPUT=$PWD/kernel_out
</syntaxhighlight>
</syntaxhighlight>


== Flashing the board ==
3. Build the kernel.
<syntaxhighlight lang="bash">
make -C kernel
</syntaxhighlight>


4. Set install path.
== Capturing with FRAMOS IMX464 cameras ==


<syntaxhighlight lang="bash">
1. Open a terminal. Verify cameras were bound correctly with:
export INSTALL_MOD_PATH=<INSTALL_DIR>/Linux_for_Tegra/rootfs/
<syntaxhighlight lang="bash">
sudo dmesg | grep imx464
</syntaxhighlight>
</syntaxhighlight>

Should see something like:
5. Install.
<syntaxhighlight lang="bash">

[ 11.756067] imx464 9-001a: probing v4l2 sensor
<syntaxhighlight lang="bash">
[ 11.756129] imx464 9-001a: initializing mipi...
sudo -E make install -C kernel
[ 11.756418] imx464 9-001a: tegracam sensor driver:imx464_v2.0.6
cp $KERNEL_OUTPUT/arch/arm64/boot/Image <INSTALL_DIR>/Linux_for_Tegra/kernel/Image
[ 11.790754] tegra-camrtc-capture-vi tegra-capture-vi: subdev imx464 9-001a bound
[ 11.830176] imx464 9-001a: Detected imx464 sensor
[ 11.833758] imx464 10-001a: probing v4l2 sensor
[ 11.833832] imx464 10-001a: initializing mipi...
[ 11.834253] imx464 10-001a: tegracam sensor driver:imx464_v2.0.6
[ 11.867769] tegra-camrtc-capture-vi tegra-capture-vi: subdev imx464 10-001a bound
[ 11.884400] imx464 10-001a: Detected imx464 sensor
</syntaxhighlight>
</syntaxhighlight>


==== Building the NVIDIA out-of-Tree Modules ====
2. Check for devices in '''/dev/'''.

<syntaxhighlight lang="bash">
1. Build nvidia-oot.
ls /dev/video*

<syntaxhighlight lang="bash">
make modules
</syntaxhighlight>
</syntaxhighlight>

Should see something like:

<syntaxhighlight lang="bash">
2. Set install path.
/dev/video0 /dev/video1

<syntaxhighlight lang="bash">
export INSTALL_MOD_PATH=<INSTALL_DIR>/Linux_for_Tegra/rootfs/
</syntaxhighlight>
</syntaxhighlight>

2. Run the following pipeline to get a stream preview:
3. Install.
<syntaxhighlight lang="bash">

gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! nvvidconv ! autovideosink
<syntaxhighlight lang="bash">
sudo -E make modules_install
</syntaxhighlight>
</syntaxhighlight>


==== Building the DTBs ====
Switch between 0 and 1 in '''sensor-id''' to choose the camera to capture.

1. Build DTBs:
<syntaxhighlight lang="bash">
make dtbs
</syntaxhighlight>

2. Install:

<syntaxhighlight lang="bash">
cp kernel-devicetree/platform/generic-dts/dtbs/* <INSTALL_DIR>/Linux_for_Tegra/kernel/dtb/
</syntaxhighlight>

===JetPack 5.X ===

= Need Further Support? =

'''📞 Book Consultation Call:''' [https://proventusnova.com/contact-us/ Show Calendar!]

'''📩 Contact Via Email:''' [mailto:support@proventusnova.com support@proventusnova.com]

'''🌐 Visit Our Website:''' [https://proventusnova.com ProventusNova.com]

Latest revision as of 23:38, 19 November 2025

Jetson Linux BSP and Kernel Source setup

Keywords: NVIDIA Jetson, JetPack

Description

This wiki pages shows how to get sources for any JetPack version for NVIDIA platform. Download board support package (BSP), sample root file system and kernel sources for kernel customization.

Getting the sources

You can find the desired JetPack version from Jetson Linux Archives.

1. Go to JetPack's version release page and download “L4T Driver Package (BSP)” and “Sample Root filesystem”.

2. You should see this two files with the following names, where XXX specifies the version for L4T:

  • Jetson_Linux_RX.X.X_aarch64.tbz2
  • Tegra_Linux_Sample-Root-Filesystem_RX.X.X_aarch64.tbz2

3. Create a directory for installing JetPack. Referred to as <INSTALL_DIR>. For example:

 
INSTALL_DIR = build
mkdir $INSTALL_DIR
cd $INSTALL_DIR

4. Copy both files to <INSTALL_DIR>

 
cp $HOME/Downloads/Jetson_Linux_RX.X.X_aarch64.tbz2 .
cp $HOME/Downloads/Tegra_Linux_Sample-Root-Filesystem_RX.X.X_aarch64.tbz2 .

5. Extract "L4T Driver Package" tarball:

 
tar -vjxf Jetson_Linux_RX.X.X_aarch64.tbz2

You should see a new directory called Linux_for_tegra in <INSTALL_DIR> directory.

6. Extract "Sample Root Filesystem" into Linux_for_tegra/rootfs

 
sudo tar -C Linux_for_Tegra/rootfs/ -vxjf Tegra_Linux_Sample-Root-Filesystem_RX.X.X_aarch64.tbz2

7. Go into "Linux_for_Tegra/source" directory and extract the kernel sources.

 
cd Linux_for_Tegra/source
./source_sync.sh -k -t <release_tag>

The release tag can be extracted from the release notes of the JetPack version.

8.Return to "Linux_for_Tegra" directory and apply binaries.

 
cd ../
sudo ./apply_binaries.sh

Now you are all set up to customize and build your own kernel.

Customizing the kernel

JetPack 6.X

1. Go to source directory.

 
cd <INSTALL_DIR>/Linux_for_Tegra/source

2. Install pre-requisites

 
sudo apt install build-essential bc

3.Install the toolchain from Jetson Linux release page. From the Tools tab, download Bootlin Toolchain gcc.

 
mkdir $HOME/l4t-gcc
cd $HOME/l4t-gcc
tar xf <toolchain_archive>


Building the Jetson Linux Kernel

1. Go into <INSTALL_DIR>/Linux_for_Tegra/source directory.

2. Set environment variable for cross-compilation, kernel-headers and kernel-output.

 
export CROSS_COMPILE=$HOME/l4t-gcc/aarch64--glibc--stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-
export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src
export KERNEL_OUTPUT=$PWD/kernel_out

3. Build the kernel.

 
make -C kernel

4. Set install path.

 
export INSTALL_MOD_PATH=<INSTALL_DIR>/Linux_for_Tegra/rootfs/

5. Install.

 
sudo -E make install -C kernel
cp $KERNEL_OUTPUT/arch/arm64/boot/Image <INSTALL_DIR>/Linux_for_Tegra/kernel/Image

Building the NVIDIA out-of-Tree Modules

1. Build nvidia-oot.

 
make modules


2. Set install path.

 
export INSTALL_MOD_PATH=<INSTALL_DIR>/Linux_for_Tegra/rootfs/

3. Install.

 
sudo -E make modules_install

Building the DTBs

1. Build DTBs:

 
make dtbs

2. Install:

 
cp kernel-devicetree/platform/generic-dts/dtbs/* <INSTALL_DIR>/Linux_for_Tegra/kernel/dtb/

JetPack 5.X

Need Further Support?

📞 Book Consultation Call: Show Calendar!

📩 Contact Via Email: support@proventusnova.com

🌐 Visit Our Website: ProventusNova.com