Jetson Nano/Development/Building the Kernel from Source: Difference between revisions
mNo edit summary |
|||
Line 7: | Line 7: | ||
--> | --> | ||
= Introduction = | == Introduction == | ||
This wiki page contains instructions to download and build kernel source code for Jetson Nano, several parts of this wiki were based in the document: [https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3231/index.html NVIDIA Tegra Linux Driver Package Development Guide 32.3.1]. | This wiki page contains instructions to download and build kernel source code for Jetson Nano, several parts of this wiki were based in the document: [https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3231/index.html NVIDIA Tegra Linux Driver Package Development Guide 32.3.1]. | ||
Line 18: | Line 18: | ||
* [https://developer.ridgerun.com/wiki/index.php?title=Compiling_Jetson_Nano_source_code_L4T_32.1 Compiling Jetson Nano source code L4T 32.1] | * [https://developer.ridgerun.com/wiki/index.php?title=Compiling_Jetson_Nano_source_code_L4T_32.1 Compiling Jetson Nano source code L4T 32.1] | ||
=Build Kernel= | ==Build Kernel== | ||
Follow these instructions to build and install the kernel image and device tree. | Follow these instructions to build and install the kernel image and device tree. | ||
===1. Download and install the Toolchain=== | |||
NVIDIA recommends using the Linaro 7.3.1 2018.05 toolchain for L4T 32.3 ([https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3231/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fxavier_toolchain.html%23 Toolchain]) | NVIDIA recommends using the Linaro 7.3.1 2018.05 toolchain for L4T 32.3 ([https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3231/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fxavier_toolchain.html%23 Toolchain]) | ||
Line 38: | Line 38: | ||
</source> | </source> | ||
===2. Download the kernel sources=== | |||
You can download the kernel source files and then manually extract them. it is recommended to instead sync with git. | You can download the kernel source files and then manually extract them. it is recommended to instead sync with git. | ||
Line 54: | Line 54: | ||
</source> | </source> | ||
===3. Compile kernel and dtb=== | |||
Follow the steps: | Follow the steps: | ||
Line 69: | Line 69: | ||
</source> | </source> | ||
=Flash Jetson NANO= | ==Flash Jetson NANO== | ||
This guide assumes that the user already has sdk-manager installed. This link contains details about how to install sdk-manager: https://developer.nvidia.com/nvidia-sdk-manager https://docs.nvidia.com/sdk-manager/download-run-sdkm/index.html | This guide assumes that the user already has sdk-manager installed. This link contains details about how to install sdk-manager: https://developer.nvidia.com/nvidia-sdk-manager https://docs.nvidia.com/sdk-manager/download-run-sdkm/index.html | ||
Line 76: | Line 76: | ||
export NVIDIA_SDK_MANAGER=$HOME/nvidia/nvidia_sdk/ | export NVIDIA_SDK_MANAGER=$HOME/nvidia/nvidia_sdk/ | ||
</source> | </source> | ||
==Select DTB and directory based on Jetson Nano module type== | ===Select DTB and directory based on Jetson Nano module type=== | ||
===Production module (P3448-0020)=== | ====Production module (P3448-0020)==== | ||
<source lang="bash"> | <source lang="bash"> | ||
DTB=tegra210-p3448-0002-p3449-0000-b00.dtb | DTB=tegra210-p3448-0002-p3449-0000-b00.dtb | ||
Line 84: | Line 84: | ||
</source> | </source> | ||
===Devkit module (P3448)=== | ====Devkit module (P3448)==== | ||
<source lang="bash"> | <source lang="bash"> | ||
export DTB=tegra210-p3448-0000-p3449-0000-a02.dtb | export DTB=tegra210-p3448-0000-p3449-0000-a02.dtb | ||
Line 91: | Line 91: | ||
Make sure the Jetson TX2 is in recovery mode | Make sure the Jetson TX2 is in recovery mode | ||
==Copy kernel, device tree and modules into jetpack== | ===Copy kernel, device tree and modules into jetpack=== | ||
Line 102: | Line 102: | ||
</source> | </source> | ||
==Apply root filesystem patch== | ===Apply root filesystem patch=== | ||
With the default root file system the changes in the device tree are lost when the board is power off. This is a known issue (https://devtalk.nvidia.com/default/topic/1072091/jetson-nano/how-to-modify-the-dts-file-for-jetson-nano-board/) | With the default root file system the changes in the device tree are lost when the board is power off. This is a known issue (https://devtalk.nvidia.com/default/topic/1072091/jetson-nano/how-to-modify-the-dts-file-for-jetson-nano-board/) | ||
Apply this patch to avoid losing the changes added in the device tree. | Apply this patch to avoid losing the changes added in the device tree. | ||
===Create patch file=== | ====Create patch file==== | ||
Patch: fix_dtb_lost.patch | Patch: fix_dtb_lost.patch | ||
Line 126: | Line 126: | ||
</source> | </source> | ||
===Apply the patch=== | ====Apply the patch==== | ||
<source lang="bash"> | <source lang="bash"> | ||
Line 133: | Line 133: | ||
</source> | </source> | ||
==Flash memory== | ===Flash memory=== | ||
Make sure the Jetson NANO is in recovery mode. | Make sure the Jetson NANO is in recovery mode. | ||
===Flash production module DTB=== | ====Flash production module DTB==== | ||
<source lang="bash"> | <source lang="bash"> | ||
sudo ./flash.sh jetson-nano-emmc mmcblk0p1 | sudo ./flash.sh jetson-nano-emmc mmcblk0p1 | ||
</source> | </source> | ||
===Flash Devkit module=== | ====Flash Devkit module==== | ||
<source lang="bash"> | <source lang="bash"> | ||
sudo ./flash.sh jetson-nano-qspi-sd mmcblk0p1 | sudo ./flash.sh jetson-nano-qspi-sd mmcblk0p1 | ||
</source> | </source> | ||
===Flash device tree only=== | ====Flash device tree only==== | ||
This command flashes only the device tree, excluding the kernel image and filesystem. Make sure the Jetson NANO is in recovery mode. | This command flashes only the device tree, excluding the kernel image and filesystem. Make sure the Jetson NANO is in recovery mode. | ||
====Flash production module DTB==== | =====Flash production module DTB===== | ||
<source lang="bash"> | <source lang="bash"> | ||
sudo ./flash.sh -r -k DTB jetson-nano-emmc mmcblk0p1 | sudo ./flash.sh -r -k DTB jetson-nano-emmc mmcblk0p1 | ||
</source> | </source> | ||
====Flash Devkit module==== | =====Flash Devkit module===== | ||
<source lang="bash"> | <source lang="bash"> | ||
sudo ./flash.sh -r -k DTB jetson-nano-qspi-sd mmcblk0p1 | sudo ./flash.sh -r -k DTB jetson-nano-qspi-sd mmcblk0p1 | ||
</source> | </source> | ||
==Flash custom DTB on the Jetson Nano== | ===Flash custom DTB on the Jetson Nano=== | ||
This command flashes only the device tree, excluding the kernel image and filesystem, just make sure to put the board in recovery mode. | This command flashes only the device tree, excluding the kernel image and filesystem, just make sure to put the board in recovery mode. |
Revision as of 17:10, 19 May 2020
NVIDIA®Jetson Nano™ | |||
---|---|---|---|
Introduction | |||
|
|||
Development | |||
|
|||
GStreamer | |||
|
|||
Contact Us |
Introduction
This wiki page contains instructions to download and build kernel source code for Jetson Nano, several parts of this wiki were based in the document: NVIDIA Tegra Linux Driver Package Development Guide 32.3.1.
L4T 32.3.1 is used by JetPack 4.3 (You can get more information from jetpack-archive).
Previous versions:
Build Kernel
Follow these instructions to build and install the kernel image and device tree.
1. Download and install the Toolchain
NVIDIA recommends using the Linaro 7.3.1 2018.05 toolchain for L4T 32.3 (Toolchain)
Download the pre-built toolchain binaries from: http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
wget http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
Execute the following commands to extract the toolchain:
mkdir $HOME/l4t-gcc cd $HOME/l4t-gcc tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
2. Download the kernel sources
You can download the kernel source files and then manually extract them. it is recommended to instead sync with git.
In a browser, navigate to: https://developer.nvidia.com/embedded/downloads. Locate and download the L4T Sources for your release. (L4T Sources 32.3.1 2019/12/17) or run the command below:
wget https://developer.download.nvidia.com/embedded/L4T/r32-3-1_Release_v1.0/Sources/T210/public_sources.tbz2
Execute the following commands to extract the kernel:
tar -xvf public_sources.tbz2 cd Linux_for_Tegra/source/public JETSON_NANO_KERNEL_SOURCE=$(pwd) tar -xf kernel_src.tbz2
3. Compile kernel and dtb
Follow the steps:
cd $JETSON_NANO_KERNEL_SOURCE TOOLCHAIN_PREFIX=$HOME/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- TEGRA_KERNEL_OUT=$JETSON_NANO_KERNEL_SOURCE/build KERNEL_MODULES_OUT=$JETSON_NANO_KERNEL_SOURCE/modules make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=${TOOLCHAIN_PREFIX} tegra_defconfig make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=${TOOLCHAIN_PREFIX} -j8 --output-sync=target zImage make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=${TOOLCHAIN_PREFIX} -j8 --output-sync=target modules make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=${TOOLCHAIN_PREFIX} -j8 --output-sync=target dtbs make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra INSTALL_MOD_PATH=$KERNEL_MODULES_OUT modules_install
Flash Jetson NANO
This guide assumes that the user already has sdk-manager installed. This link contains details about how to install sdk-manager: https://developer.nvidia.com/nvidia-sdk-manager https://docs.nvidia.com/sdk-manager/download-run-sdkm/index.html
NVIDIA_SDK_MANAGER contains the directory where Nvidia SDK manager was installed. For example.
export NVIDIA_SDK_MANAGER=$HOME/nvidia/nvidia_sdk/
Select DTB and directory based on Jetson Nano module type
Production module (P3448-0020)
DTB=tegra210-p3448-0002-p3449-0000-b00.dtb JETPACK_4_3_P3448=${NVIDIA_SDK_MANAGER}/JetPack_4.3_Linux_P3448-0020/Linux_for_Tegra
Devkit module (P3448)
export DTB=tegra210-p3448-0000-p3449-0000-a02.dtb JETPACK_4_3_P3448=${NVIDIA_SDK_MANAGER}/JetPack_4.3_Linux_P3448/Linux_for_Tegra
Make sure the Jetson TX2 is in recovery mode
Copy kernel, device tree and modules into jetpack
cd ${JETPACK_4_3_P3448} # Copy kernel generated cp $JETSON_NANO_KERNEL_SOURCE/build/arch/arm64/boot/Image kernel/ # Copy device tree generated cp $JETSON_NANO_KERNEL_SOURCE/build/arch/arm64/boot/dts/${DTB} kernel/dtb/
Apply root filesystem patch
With the default root file system the changes in the device tree are lost when the board is power off. This is a known issue (https://devtalk.nvidia.com/default/topic/1072091/jetson-nano/how-to-modify-the-dts-file-for-jetson-nano-board/) Apply this patch to avoid losing the changes added in the device tree.
Create patch file
Patch: fix_dtb_lost.patch
diff --git a/rootfs/opt/nvidia/l4t-bootloader-config/nv-l4t-bootloader-config.sh b/rootfs/opt/nvidia/l4t-bootloader-config/nv-l4t-bootloader-config.sh index 921efc2..fe60093 100755 --- a/rootfs/opt/nvidia/l4t-bootloader-config/nv-l4t-bootloader-config.sh +++ b/rootfs/opt/nvidia/l4t-bootloader-config/nv-l4t-bootloader-config.sh @@ -123,7 +123,7 @@ t210ref_update_qspi_check () { # need to update QSPI return 0 elif (( "${sys_maj_rev}" == "${qspi_maj_rev}" )); then - if (( "${sys_min_rev}" >= "${qspi_min_rev}" )); then + if (( "${sys_min_rev}" > "${qspi_min_rev}" )); then # sys_rel == qspi_rel # sys_maj_rev == qspi_maj_rev # sys_min_rev >= qspi_min_rev
Apply the patch
cd ${JETPACK_4_3_P3448} sudo patch -p 1 < fix_dtb_lost.patch
Flash memory
Make sure the Jetson NANO is in recovery mode.
Flash production module DTB
sudo ./flash.sh jetson-nano-emmc mmcblk0p1
Flash Devkit module
sudo ./flash.sh jetson-nano-qspi-sd mmcblk0p1
Flash device tree only
This command flashes only the device tree, excluding the kernel image and filesystem. Make sure the Jetson NANO is in recovery mode.
Flash production module DTB
sudo ./flash.sh -r -k DTB jetson-nano-emmc mmcblk0p1
Flash Devkit module
sudo ./flash.sh -r -k DTB jetson-nano-qspi-sd mmcblk0p1
Flash custom DTB on the Jetson Nano
This command flashes only the device tree, excluding the kernel image and filesystem, just make sure to put the board in recovery mode.
cd ${JETPACK_4_2_2}/JetPack_4.2.2_Linux_GA_P3448/Linux_for_Tegra/ # Copy device tree generated cp $JETSON_NANO_KERNEL_SOURCE/build/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-a02.dtb kernel/dtb/ # Flash device tree partition sudo ./flash.sh -r -k DTB jetson-nano-qspi-sd mmcblk0p1