SYSOUT should have the kernel image/modules that pre-built before trying to build display drivers.
In what configuration? Just the modules folder and the Image?
like make modules_install and make install with INTALL_MOD_PATH and INSTALL_PATH as the SYSOUT folder?
No, it is just the TEGRA_KERNEL_OUT when you built out kernel. No need to care about INSTALL_PATH or INTALL_MOD_PATH
I am assuming that TEGRA_KERNEL_OUT is something used by the nvbuild.sh script?
I don’t use this to compile my kernel
Then it is just the “O=” parameters when you use to build kernel if you are using makefile.
Ah, easy. I will try this now
That seemed to be the missing piece. I remember yesterday looking on the documentation page for what KERNEL_OUTDIR was but it’s not mentioned.
I’ll leave my final script here in case it helps someone else with the same problem.
Thanks for the help.
#!/bin/bash
set -ex
# Default values
TOOLCHAIN_PATH=""
OUTPUT_DIR="$(pwd)/build"
KERNEL_SOURCES_DIR=""
CROSS_PREFIX="aarch64-buildroot-linux-gnu-"
# Constants
DRIVER_TAR_URL="https://developer.nvidia.com/downloads/embedded/l4t/r35_release_v5.0/sources/public_sources.tbz2"
WORK_DIR="$(pwd)/jetson_display_driver"
KERNEL_SOURCES_DIR="$WORK_DIR/kernel_src/kernel/kernel-5.10"
SOURCE_TARBALL="$WORK_DIR/public_sources.tbz2"
EXTRACTED_SOURCE_DIR="$WORK_DIR/Linux_for_Tegra/source/public"
DRIVER_TARBALL="$EXTRACTED_SOURCE_DIR/nvidia_kernel_display_driver_source.tbz2"
DRIVER_SOURCE_DIR="$EXTRACTED_SOURCE_DIR/nvdisplay"
show_help() {
echo "Usage: $0 --toolchain <path> --kernel-sources <path> [--output-dir <path>]"
echo "Options:"
echo " --toolchain PATH Path to the cross-compilation toolchain, ie. path $TO_HERE/bin/aarch64... (required)"
echo " --kernel-sources PATH Path to the kernel source directory (required)"
echo " --output-dir PATH Optional: Path to the output directory (default: ./build)"
exit 0
}
while [[ $# -gt 0 ]]; do
case "$1" in
--toolchain)
TOOLCHAIN_PATH=$(realpath "$2")
shift 2
;;
--kernel-sources)
KERNEL_SOURCES_DIR=$(realpath "$2")
shift 2
;;
--output-dir)
OUTPUT_DIR=$(realpath "$2")
shift 2
;;
-h|--help)
show_help
;;
*)
echo "Unknown option: $1"
show_help
;;
esac
done
CROSS_COMPILE_PATH="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}"
if [[ -z "$TOOLCHAIN_PATH" || -z "$KERNEL_SOURCES_DIR" ]]; then
echo "Error: --toolchain and --kernel-sources are required."
exit 1
fi
mkdir -p "$WORK_DIR"
if [ -d "$KERNEL_SOURCES_DIR" ]; then
echo "The folder is already named 'kernel-5.10'. Skipping rename."
else
cp -r $KERNEL_SOURCES_DIR/../.. "$WORK_DIR/kernel_src"
SOURCE_DIR=$(find "$WORK_DIR/kernel_src/kernel/" -mindepth 1 -maxdepth 1 -type d -name "kernel*" ! -name "kernel-5.10" | head -n 1)
if [ -n "$SOURCE_DIR" ]; then
mv "$SOURCE_DIR" "$KERNEL_SOURCES_DIR"
echo "Folder renamed to 'kernel-5.10'."
else
echo "No matching folder found to rename."
fi
fi
if [[ ! -d "$EXTRACTED_SOURCE_DIR" ]]; then
echo "Downloading public sources..."
wget -O "$SOURCE_TARBALL" "$DRIVER_TAR_URL"
echo "Extracting public sources..."
tar -xpf "$SOURCE_TARBALL" -C "$WORK_DIR"
fi
if [[ ! -d "$DRIVER_SOURCE_DIR" ]]; then
echo "Extracting display driver sources..."
tar -xpf "$DRIVER_TARBALL" -C "$EXTRACTED_SOURCE_DIR"
fi
echo "Preparing kernel sources..running mrproper"
make -C "$KERNEL_SOURCES_DIR" O=$OUTPUT_DIR -j "$(nproc)" ARCH=arm64 CROSS_COMPILE=${CROSS_COMPILE_PATH} LOCALVERSION="-cartken5.1.3" mrproper
if [[ -d "$OUTPUT_DIR" ]]; then
echo "Removing existing output directory: $OUTPUT_DIR"
rm -rf "$OUTPUT_DIR"
fi
mkdir -p "$OUTPUT_DIR"
echo "Cleaned with mrproper, applying defconfig"
make -C "$KERNEL_SOURCES_DIR" O=$OUTPUT_DIR -j "$(nproc)" ARCH=arm64 CROSS_COMPILE=${CROSS_COMPILE_PATH} LOCALVERSION="-cartken5.1.3" defconfig
echo "Tegra defconfig applied, building kernel"
make -C "$KERNEL_SOURCES_DIR" O=$OUTPUT_DIR -j "$(nproc)" ARCH=arm64 CROSS_COMPILE=${CROSS_COMPILE_PATH} LOCALVERSION="-cartken5.1.3"
echo "Kernel built. Building NVIDIA Jetson display driver..."
cd $DRIVER_SOURCE_DIR
echo "Running following command to build display driver"
echo "IGNORE_MISSING_MODULE_SYMVERS=1 make VERBOSE=1 -C "$DRIVER_SOURCE_DIR" modules \
TARGET_ARCH=aarch64 ARCH=arm64 \
LOCALVERSION="-cartken5.1.3" \
CC="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}gcc" \
LD="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}ld.bfd" \
AR="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}ar" \
CXX="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}g++" \
OBJCOPY="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}objcopy" \
SYSOUT="$OUTPUT_DIR" SYSSRC="$KERNEL_SOURCES_DIR""
IGNORE_MISSING_MODULE_SYMVERS=1 make VERBOSE=1 -C "$DRIVER_SOURCE_DIR" modules \
TARGET_ARCH=aarch64 ARCH=arm64 \
LOCALVERSION="-cartken5.1.3" \
CC="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}gcc" \
LD="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}ld.bfd" \
AR="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}ar" \
CXX="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}g++" \
OBJCOPY="${TOOLCHAIN_PATH}/bin/${CROSS_PREFIX}objcopy" \
SYSOUT="$OUTPUT_DIR" SYSSRC="$KERNEL_SOURCES_DIR"
echo "Build complete. Output is in: $OUTPUT_DIR"
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.