Compilation of kernel from sources
This section is intended to guide developers to compile kernel sources and device tree from sources and apply them to running target.
Last updated
git checkout <branch>NVIDIA_DEVELOPMENT_FOLDER=JetPack_4.6_Linux_JETSON_XAVIER_NX_TARGETS
TEGRA_KERNEL_OUT=$HOME/Downloads/kernel_out
JETPACK_DIR=$HOME/nvidia/nvidia_sdk/$NVIDIA_DEVELOPMENT_FOLDER/Linux_for_Tegrasudo apt update
sudo apt install build-essential bccd ~
mkdir -p $HOME/l4t-gcc
cd $HOME/l4t-gcc
# Reuse existing download, if any (copy this as a block starting with if and ending with fi)
if ! test -e gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.gz; then
wget -O gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.gz 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
tar -xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.gz
fi
cd ~# Environment variables
KERNEL_DIR=$HOME/nvidia/nvidia_sdk/$NVIDIA_DEVELOPMENT_FOLDER/Linux_for_Tegra/kernel_sources_xaviernx/kernel/kernel-4.9
CROSS_COMPILE_AARCH64=$HOME/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
# Create folder for kernel output
rm -r $TEGRA_KERNEL_OUT
mkdir -p $TEGRA_KERNEL_OUT
# Start with compilation
cd $KERNEL_DIR
make mrproper
make ARCH=arm64 LOCALVERSION="-tegra" CROSS_COMPILE="${CROSS_COMPILE_AARCH64}" O=$TEGRA_KERNEL_OUT tegra_defconfig
make ARCH=arm64 LOCALVERSION="-tegra" CROSS_COMPILE="${CROSS_COMPILE_AARCH64}" O=$TEGRA_KERNEL_OUT menuconfig
# update menuconfig now if needed else exit GUIcd $KERNEL_DIR
make ARCH=arm64 LOCALVERSION="-tegra" CROSS_COMPILE="${CROSS_COMPILE_AARCH64}" O=$TEGRA_KERNEL_OUT -j$(nproc) --output-sync=target Image
# Copy files
rm $JETPACK_DIR/kernel/Image
sudo rm $JETPACK_DIR/rootfs/boot/Image
cp $TEGRA_KERNEL_OUT/arch/arm64/boot/Image $JETPACK_DIR/kernel
sudo cp $TEGRA_KERNEL_OUT/arch/arm64/boot/Image $JETPACK_DIR/rootfs/bootcd $KERNEL_DIR
make ARCH=arm64 LOCALVERSION="-tegra" CROSS_COMPILE="${CROSS_COMPILE_AARCH64}" O=$TEGRA_KERNEL_OUT -j$(nproc) --output-sync=target dtbs
# Copy files
rm -r $JETPACK_DIR/kernel/dtb/
sudo rm $JETPACK_DIR/rootfs/boot/tegra194-p3668-all-p3509-0000.dtb
cp -a $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/. $JETPACK_DIR/kernel/dtb/
cp -a $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra194-p3668-all-p3509-0000.dtb $JETPACK_DIR/kernel/dtb/tegra194-p3668-all-p3509-0000.dtb
sudo cp -a $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra194-p3668-all-p3509-0000.dtb $JETPACK_DIR/rootfs/boot/tegra194-p3668-all-p3509-0000.dtbcd $KERNEL_DIR
make ARCH=arm64 LOCALVERSION="-tegra" CROSS_COMPILE="${CROSS_COMPILE_AARCH64}" O=$TEGRA_KERNEL_OUT -j$(nproc) --output-sync=target modules
# Install modules
make ARCH=arm64 O=$TEGRA_KERNEL_OUT modules_install INSTALL_MOD_STRIP=1 CROSS_COMPILE=$CROSS_COMPILE_AARCH64 INSTALL_MOD_PATH=$JETPACK_DIR/images
cd $JETPACK_DIR/images
tar --owner root --group root -cjf kernel_supplements.tbz2 lib/modules
mv kernel_supplements.tbz2 $JETPACK_DIR/kernel/# Apply changes
cd $JETPACK_DIR
sudo ./apply_binaries.sh -t Falsescp $JETPACK_DIR/kernel/Image [email protected]:/boot/scp $JETPACK_DIR/kernel/dtb/tegra194-p3668-all-p3509-0000.dtb [email protected]:/boot/tegra194-p3668-all-p3509-0000.dtb