49
edits
Changes
→Flashing the Kernel
= Flashing Standard Firmware =
== SDKManager ==
SDKManager is available only on Linux, and can be installed here: <code>https://developer.nvidia.com/sdk-manager</code>
# Start up the SDKManager
# Put the Jetson into recovery mode. For the AGX, this can be done by pressing the recovery button while powering on the device. For the Nano and NX, however, a jumper will be required.
# Follow the instructions on the application, choosing configurations as necessary.
= Flashing Custom Firmware (For Jetson 36.3) =
== Pre-requisites ==
# Please install required packages with the command <code>sudo apt install build-essential bc && sudo apt install build-essential bc</code>.
=== Downloading the Toolchain ===
# Download the Toolchain binaries located in <code>https://developer.nvidia.com/embedded/jetson-linux</code>.
# From there, <code>mkdir $HOME/l4t-gcc</code>, <code>cd $HOME/l4t-gcc</code> and extract the installed toolchain into this newly created directory using the <code>tar</code> command.
= Flashing Custom Firmware (For Jetson 36.3) = Downloading the Kernel ==# Repeat Steps Follow steps 1 to 3 as mentioned in Flashing Standard Firmware.
# Proceed to the second step of the SDKManager, where the respective individual dependencies and Jetson Images are listed and are to be installed. Proceed with the installation.
# When prompted to actually flash the Jetson, opt to skip. This will install the <code>nvidia</code> folder on your home directory, in which the <code>rootfs</code>, <code>kernel,</code> , and <code>bootloader</code> are located.
# Navigate to <code>nvidia</code> and <code>cd</code> through its subdirectories, until <code>Linux for Tegra</code> is reached.
# Inside <code>Linux for Tegra</code>, <code>cd</code> into the <code>sources</code> folder. It should be unpopulated with the exception of some bash scripts. Run the <code>source_sync.sh</code> script and when asked to specify the release tag of the downloadable sources, enter <code>jetson_36.3</code>. This will install thesources for the respective Jetson version as necessary. To find the release tag of future iterations of the Jetson firmware, please refer to its respective release notes.# Once sources have been synced, the <code>sources</code> directory should now be populated with the required files. == Customizing Kernel ==# Within <code>source</code>, enter the <code>kernel</code> eventually navigate to the <code>kernel-jammy-src</code> folder and run <code>make menuconfig ARCH=arm64</code>. This will bring up a UI with configurable drivers and peripherals. Select desired configurations and save.# The configurations can be found within a <code>.config</code> file located within the same directory. Copy the contents and locate the <code>defconfig</code> file in <code>./arch/arm64/configs/</code>, overwriting it with the copied contents. == Building Custom Kernel and Installing Modules ==# Navigate back out to <code>sources</code>.# Define the Cross-compilation toolchain with the commands <code>export CROSS_COMPILE=<toolchain-path>/bin/aarch64-buildroot-linux-gnu-</code>. If installation was done correctly as per the pre-requisites section, the command <code>export CROSS_COMPILE=$HOME/l4t-gcc/aarch64--glibc--stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-</code> should work. # Define the Cross-compilation toolchain with the commands <code>export CROSS_COMPILE_AARCH64_PATH=</code>, and <code>export CROSS_COMPILE_AARCH64=/bin/aarch64-buildroot-linux-gnu-</code>. (Potentially deprecated)# Inside the sources, directory, make an output directory for built kernel files using <code>mkdir kernel_out</code>.# Build the modules using the command <code>./nvbuild.sh -o kernel_out</code>. This will compile the drivers and device trees for the new kernel.# Navigate out from the <code>sources</code> directory into the <code>Linux for Tegra</code>.# Use the <code>cp</code> to overwrite <code>./rootfs/usr/lib/modules/5.15.136-tegra/updates/nvgpu.ko</code> with <code>./source/kernel_out/nvgpu/drivers/gpu/nvgpu/nvgpu.ko</code>.# Repeat the previous step to replace <code>Linux_for_Tegra/kernel/dtb/</code> with </code>source/kernel_out/kernel/kernel-jammy-src/arch/arm64/boot/dts/nvidia</code>. Ensure that instead of overwriting the directory, only the files are copied over.# Overwrite the Image file in <code>./kernel</code> with <code>./source/kernel_out/kernel/kernel-jammy-src/arch/arm64/boot/Image</code>.# To specify the installation path for the compiled modules, use the command <code>export INSTALL_MOD_PATH=$HOME/nvidia/nvidia_sdk/JetPack_6.0_Linux_JETSON_AGX_ORIN_TARGETS/Linux_for_Tegra/rootfs/</code>. # Install modules using the command <code>./nvbuild -i</code>. The Jetson is now ready to be flashed. == Flashing the Kernel ==Ensure that the target Jetson is connected to the host device and is in recovery mode. Navigate to the <code>Linux for Tegra</code> directory and run <code>sudo ./nvsdkmanager_flash.sh</code>. When prompted, disconnect the Jetson from host device and allow it to boot. Congratulations, you have successfully flashed your Jetson with custom firmware.