Unable to Get GPIO Working on Jetson Orin Nano

Hello,

I haven’t done any manual downloads related to this process before. When I run the following command to check for the kernel directory:

ls /usr/src/kernel

I get the following output:

ls: cannot access '/usr/src/kernel': No such file or directory

Could you please guide me on how to proceed from here?

Thank you!

The “Driver Package Sources” in this screenshot shared by you has the source code.

Hello,

I am trying to set up the kernel source code for customization, but I am encountering issues. Here’s what I have done so far:

  1. What I Downloaded:
    I downloaded the Driver Package (BSP) Sources file (public_sources.tbz2) from the Jetson Linux archive.
  2. How I Extracted It:
    I extracted the file using the following command:
tar xf ~/Downloads/public_sources.tbz2 -C ~/Linux_for_Tegra/source
  1. What I Checked:
    After extraction, I navigated to the kernel directory and checked its contents:
cd ~/Linux_for_Tegra/source/kernel
ls

The output was:

kernel-jammy-src  Makefile
  1. Checking kernel-jammy-src:
    I navigated into the kernel-jammy-src directory to check its contents:
cd kernel-jammy-src
ls

The directory appears to be empty; no files or folders are listed.
5. Re-extracting to Confirm:
I repeated the extraction process to ensure everything was done correctly:

tar xf ~/Downloads/public_sources.tbz2 -C ~/Linux_for_Tegra/source

However, I got the same result: the kernel-jammy-src directory is still empty.
6. My Question:

  • Is this behavior expected?
  • Am I missing any additional steps to properly extract the kernel source code?
  • Could the public_sources.tbz2 file be incomplete or missing required files?

I appreciate your help in resolving this issue.

Thank you!

Hi,

What is the exact content you saw in public_sources.tbz2? Have you ever used some GUI tool to open it before doing extract?

Even public sources won’t just give you a “kernel-jammy-src”. It has multiple tarball inside of it too.

Hello,

Here is what I have done so far with the public_sources.tbz2 file:

  1. Removed the Existing Files:
    I ran the following command to clean up the previous extraction:
rm -rf ~/Linux_for_Tegra/source/*
  1. Extracted the public_sources.tbz2 File Again:
    I used this command to extract the file again:
tar xf ~/Downloads/public_sources.tbz2 -C ~/Linux_for_Tegra/source
  1. Checked the Extracted Directory:
    After extraction, I navigated through the directories and listed the contents:
ls ~/Linux_for_Tegra/source

The output was:

Linux_for_Tegra

Then I checked further inside:

ls ~/Linux_for_Tegra/source/Linux_for_Tegra/source/

The output was:

argus_cam_libavencoder_src.tbz2
argus_cam_libavencoder_src.tbz2.sha1sum
atf_src.tbz2
...
kernel_src.tbz2
kernel_src.tbz2.sha1sum
nvidia_kernel_display_driver_source.tbz2
nvidia_kernel_display_driver_source.tbz2.sha1sum
...

My Questions:

  1. Is this directory structure expected? Should the files be extracted here (~/Linux_for_Tegra/source/Linux_for_Tegra/source/)?
  2. Which files should I use or extract further to obtain the kernel source code? For example, should I extract kernel_src.tbz2 and/or nvidia_kernel_display_driver_source.tbz2?
  3. What is the proper next step to set up the kernel source for customization?
    @WayneWWW

Thank you for your guidance!

Do you have the correct release tag?

Screenshot from 2025-01-10 11-25-58

When I checked, the output is that:

Then download and untar the correct BSP then run the sync_source script. In /Linux_for_tegra/source.

I use the 36.4 tar and know for fact it is in that download, so find the correct version and use the correct release tag.

https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.0/sources/public_sources.tbz2

I just checked another machine that we did a download and it is missing the script???

fred@eng-dev6:~/nvidia/public_sources/Linux_for_Tegra$ tree 
.
└── source
    └── public
        ├── argus_cam_libavencoder_src.tbz2
        ├── argus_cam_libavencoder_src.tbz2.sha1sum
        ├── atf_src.tbz2
        ├── atf_src.tbz2.sha1sum
        ├── dtc-1.4.5.tbz2
        ├── dtc-1.4.5.tbz2.sha1sum
        ├── FreeRTOSV8.1.2_src.tbz2
        ├── FreeRTOSV8.1.2_src.tbz2.sha1sum
        ├── gstegl_src.tbz2
        ├── gstegl_src.tbz2.sha1sum
        ├── gstjpeg_src.tbz2
        ├── gstjpeg_src.tbz2.sha1sum
        ├── gst-nvarguscamera_src.tbz2
        ├── gst-nvarguscamera_src.tbz2.sha1sum
        ├── gst-nvcompositor_src.tbz2
        ├── gst-nvcompositor_src.tbz2.sha1sum
        ├── gst-nvtee_src.tbz2
        ├── gst-nvtee_src.tbz2.sha1sum
        ├── gst-nvv4l2camera_src.tbz2
        ├── gst-nvv4l2camera_src.tbz2.sha1sum
        ├── gst-nvvidconv_src.tbz2
        ├── gst-nvvidconv_src.tbz2.sha1sum
        ├── gst-nvvideo4linux2_src.tbz2
        ├── gst-nvvideo4linux2_src.tbz2.sha1sum
        ├── kernel_src.tbz2
        ├── kernel_src.tbz2.sha1sum
        ├── libgstnvcustomhelper_src.tbz2
        ├── libgstnvcustomhelper_src.tbz2.sha1sum
        ├── libgstnvdrmvideosink_src.tbz2
        ├── libgstnvdrmvideosink_src.tbz2.sha1sum
        ├── libgstnvvideosinks_src.tbz2
        ├── libgstnvvideosinks_src.tbz2.sha1sum
        ├── libnl-3.5.0.tbz2
        ├── libnl-3.5.0.tbz2.sha1sum
        ├── libv4l2_nvargus_src.tbz2
        ├── libv4l2_nvargus_src.tbz2.sha1sum
        ├── nvgstapps_src.tbz2
        ├── nvgstapps_src.tbz2.sha1sum
        ├── nvidia-jetson-optee-source.tbz2
        ├── nvidia-jetson-optee-source.tbz2.sha1sum
        ├── nvidia_kernel_display_driver_source.tbz2
        ├── nvidia_kernel_display_driver_source.tbz2.sha1sum
        ├── nvidia-xconfig_src.tbz2
        ├── nvidia-xconfig_src.tbz2.sha1sum
        ├── nv_public_src_build.sh
        ├── nv_public_src_build_tos.sh
        ├── nvsample_cudaprocess_src.tbz2
        ├── nvsample_cudaprocess_src.tbz2.sha1sum
        ├── nvsci_headers.tbz2
        ├── nvsci_headers.tbz2.sha1sum
        ├── nvsci_samples_src.tbz2
        ├── nvsci_samples_src.tbz2.sha1sum
        ├── opencv_gst_samples_src.tbz2
        ├── opencv_gst_samples_src.tbz2.sha1sum
        ├── openwfd_headers.tbz2
        ├── openwfd_headers.tbz2.sha1sum
        ├── openwfd_samples.tbz2
        ├── openwfd_samples.tbz2.sha1sum
        ├── public_sources_sha.txt
        ├── spe-freertos-bsp.tbz2
        ├── spe-freertos-bsp.tbz2.sha1sum
        ├── v4l2_libs_src.tbz2
        └── v4l2_libs_src.tbz2.sha1sum

2 directories, 63 files

This download has a date stamp from 2023, not sure where it came from but is not the one you need.

Just another reminder before going anything further.

Actually the next release 36 version would come out soon. If you don’t want to build kernel, then you could wait for next version.

What Has Been Done So Far

  1. Extracting Sources
  • Successfully extracted kernel_src.tbz2 and nvidia_kernel_display_driver_source.tbz2 under the Linux_for_Tegra/source directory.
  • However, the extracted nvidia_kernel_display_driver_source content did not include tegra_defconfig or any .defconfig file. This led to the idea of manually creating the required configuration file.
  1. Attempts to Locate the Kernel Configuration File
  • Used commands like find . -name "*.defconfig" to search for tegra_defconfig, but it was not found in the available sources. This raises the possibility of missing or incomplete source files.
  1. Attempt to Compile Kernel Locally on Jetson
  • Shifted focus from cross-compilation to local compilation directly on the Jetson Orin Nano.
  • However, the lack of a proper tegra_defconfig file prevented us from proceeding with the configuration step.
  1. Exploration of Alternative Approaches
  • Considered generating the configuration manually using menuconfig, but this process remains incomplete.
  • Explored finding an alternative .defconfig file or using a default configuration suggested by NVIDIA, but no concrete solution has been found yet.

Key Challenges Encountered

  1. Missing Files and Compatibility Issues
  • The kernel sources provided by NVIDIA seem to lack the required tegra_defconfig file.
  • The extracted files do not align with the Jetson Orin Nano setup requirements.
  1. Issues with Cross-Compilation and Local Compilation
  • Cross-compilation tools failed to configure the kernel correctly.
  • Local compilation on the Jetson Orin Nano is blocked due to the missing configuration file.
  1. Problem Complexity and Lack of Direction
  • The problem has become increasingly fragmented as different approaches were attempted without resolving the core issue.
  • The lack of a configuration file has become a major roadblock.

Request for Assistance

At this stage, the problem has become too convoluted, and progress is stalled. We are unable to acquire the missing sources or generate the necessary configuration.

We are seeking assistance on the following:

  1. Obtaining the Correct Kernel Sources and Configuration File:
  • How can we obtain tegra_defconfig or an equivalent configuration file?
  1. Steps for Successful Local Compilation:
  • What is the correct process for compiling the kernel locally on the Jetson Orin Nano?
  1. Alternative Approaches:
  • Are there any alternative methods to address the issue and move forward?

Any advice or guidance would be greatly appreciated. Thank you! 🙏

Here is the script, I am not sure where this was downloaded from. Drop it in /Linux_for_Tegra/source/

$sudo source_sync.sh -k -t jetson_36.4
#!/bin/bash

# SPDX-FileCopyrightText: Copyright (c) 2012-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: BSD-3-Clause
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


#
# This script sync's NVIDIA's version of
# 1. the kernel source
# from nv-tegra, NVIDIA's public git repository.
# The script also provides opportunities to the sync to a specific tag
# so that the binaries shipped with a release can be replicated.
#
# Usage:
# By default it will download all the listed sources
# ./source_sync.sh
# Use the -t <TAG> option to provide the TAG to be used to sync all the sources.
# Use the -k <TAG> option to download only the kernel and device tree repos and optionally sync to TAG
# For detailed usage information run with -h option.
#


# verify that git is installed
if  ! which git > /dev/null  ; then
  echo "ERROR: git is not installed. If your linux distro is 10.04 or later,"
  echo "git can be installed by 'sudo apt-get install git-core'."
  exit 1
fi

# source dir
LDK_DIR=$(cd $(dirname $0) && pwd)
# script name
SCRIPT_NAME=$(basename $0)
# info about sources.
# NOTE: *Add only kernel repos here. Add new repos separately below. Keep related repos together*
# NOTE: nvethrnetrm.git should be listed after "linux-nv-oot.git" due to nesting of sync path
SOURCE_INFO="
k:kernel/kernel-jammy-src:nv-tegra.nvidia.com/3rdparty/canonical/linux-jammy.git:
k:nvgpu:nv-tegra.nvidia.com/linux-nvgpu.git:
k:nvidia-oot:nv-tegra.nvidia.com/linux-nv-oot.git:
k:hwpm:nv-tegra.nvidia.com/linux-hwpm.git:
k:nvethernetrm:nv-tegra.nvidia.com/kernel/nvethernetrm.git:
k:kernel-devicetree:nv-tegra.nvidia.com/linux/kernel-devicetree.git:
k:hardware/nvidia/t23x/nv-public:nv-tegra.nvidia.com/device/hardware/nvidia/t23x-public-dts.git:
k:hardware/nvidia/tegra/nv-public:nv-tegra.nvidia.com/device/hardware/nvidia/tegra-public-dts.git:
k:nvdisplay:nv-tegra.nvidia.com/tegra/kernel-src/nv-kernel-display-driver.git:
k:dtc-src/1.4.5:nv-tegra.nvidia.com/3rdparty/dtc-src/1.4.5.git:
o:tegra/argus-cam-libav/argus_cam_libavencoder:nv-tegra.nvidia.com/tegra/argus-cam-libav/argus_cam_libavencoder.git:
o:tegra/cuda-src/nvsample_cudaprocess:nv-tegra.nvidia.com/tegra/cuda-src/nvsample_cudaprocess.git:
o:tegra/gfx-src/nv-xconfig:nv-tegra.nvidia.com/tegra/gfx-src/nv-xconfig.git:
o:tegra/gst-src/gst-egl:nv-tegra.nvidia.com/tegra/gst-src/gst-egl.git:
o:tegra/gst-src/gst-jpeg:nv-tegra.nvidia.com/tegra/gst-src/gst-jpeg.git:
o:tegra/gst-src/gst-nvarguscamera:nv-tegra.nvidia.com/tegra/gst-src/gst-nvarguscamera.git:
o:tegra/gst-src/gst-nvcompositor:nv-tegra.nvidia.com/tegra/gst-src/gst-nvcompositor.git:
o:tegra/gst-src/gst-nvtee:nv-tegra.nvidia.com/tegra/gst-src/gst-nvtee.git:
o:tegra/gst-src/gst-nvv4l2camera:nv-tegra.nvidia.com/tegra/gst-src/gst-nvv4l2camera.git:
o:tegra/gst-src/gst-nvvidconv:nv-tegra.nvidia.com/tegra/gst-src/gst-nvvidconv.git:
o:tegra/gst-src/gst-nvvideo4linux2:nv-tegra.nvidia.com/tegra/gst-src/gst-nvvideo4linux2.git:
o:tegra/gst-src/nvgstapps:nv-tegra.nvidia.com/tegra/gst-src/nvgstapps.git:
o:tegra/gst-src/libgstnvcustomhelper:nv-tegra.nvidia.com/tegra/gst-src/libgstnvcustomhelper.git:
o:tegra/gst-src/libgstnvdrmvideosink:nv-tegra.nvidia.com/tegra/gst-src/libgstnvdrmvideosink.git:
o:tegra/gst-src/libgstnvvideosinks:nv-tegra.nvidia.com/tegra/gst-src/libgstnvvideosinks.git:
o:tegra/gst-src/opencv_gst_samples:nv-tegra.nvidia.com/tegra/gst-src/opencv_gst_samples.git:
o:tegra/v4l2-src/libv4l2_nvargus:nv-tegra.nvidia.com/tegra/v4l2-src/libv4l2_nvargus.git:
o:tegra/nv-sci-src/nvsci_headers:nv-tegra.nvidia.com/tegra/nv-sci-src/nvsci_headers.git:
o:tegra/nv-sci-src/nvsci_samples:nv-tegra.nvidia.com/tegra/nv-sci-src/nvsci_samples.git:
o:tegra/openwfd-src/openwfd_headers:nv-tegra.nvidia.com/tegra/openwfd-src/openwfd_headers.git:
o:tegra/optee-src/atf:nv-tegra.nvidia.com/tegra/optee-src/atf.git:
o:tegra/optee-src/nv-optee:nv-tegra.nvidia.com/tegra/optee-src/nv-optee.git:
o:tegra/spe-src/spe-freertos-bsp:nv-tegra.nvidia.com/tegra/spe-src/spe-freertos-bsp.git:
o:tegra/v4l2-src/v4l2_libs:nv-tegra.nvidia.com/tegra/v4l2-src/v4l2_libs.git:
"

# exit on error on sync
EOE=0
# after processing SOURCE_INFO
NSOURCES=0
declare -a SOURCE_INFO_PROCESSED
# download all?
DALL=1

function Usages {
	local ScriptName=$1
	local LINE
	local OP
	local DESC
	local PROCESSED=()
	local i

	echo "Use: $1 [options]"
	echo "Available general options are,"
	echo "     -h     :     help"
	echo "     -e     : exit on sync error"
	echo "     -d [DIR] : root of source is DIR"
	echo "     -t [TAG] : Git tag that will be used to sync all the sources"
	echo ""
	echo "By default, all sources are downloaded."
	echo "Only specified sources are downloaded, if one or more of the following options are mentioned."
	echo ""
	echo "$SOURCE_INFO" | while read LINE; do
		if [ ! -z "$LINE" ]; then
			OP=$(echo "$LINE" | cut -f 1 -d ':')
			DESC=$(echo "$LINE" | cut -f 2 -d ':')
			if [[ ! " ${PROCESSED[@]} " =~ " ${OP} " ]]; then
				echo "     -${OP} [TAG]: Download $DESC source and optionally sync to TAG"
				PROCESSED+=("${OP}")
			else
				echo "           and download $DESC source and sync to the same TAG"
			fi
		fi
	done
	echo ""
}

function ProcessSwitch {
	local SWITCH="$1"
	local TAG="$2"
	local i
	local found=0

	for ((i=0; i < NSOURCES; i++)); do
		local OP=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 1 -d ':')
		if [ "-${OP}" == "$SWITCH" ]; then
			SOURCE_INFO_PROCESSED[i]="${SOURCE_INFO_PROCESSED[i]}${TAG}:y"
			DALL=0
			found=1
		fi
	done

	if [ "$found" == 1 ]; then
		return 0
	fi

	echo "Terminating... wrong switch: ${SWITCH}" >&2
	Usages "$SCRIPT_NAME"
	exit 1
}

function UpdateTags {
	local SWITCH="$1"
	local TAG="$2"
	local i

	for ((i=0; i < NSOURCES; i++)); do
		local OP=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 1 -d ':')
		if [ "${OP}" == "$SWITCH" ]; then
			SOURCE_INFO_PROCESSED[i]=$(echo "${SOURCE_INFO_PROCESSED[i]}" \
				| awk -F: -v OFS=: -v var="${TAG}" '{$4=var; print}')
		fi
	done
}

function DownloadAndSync {
	local WHAT_SOURCE="$1"
	local LDK_SOURCE_DIR="$2"
	local REPO_URL="$3"
	local TAG="$4"
	local OPT="$5"
	local RET=0

	if [ -d "${LDK_SOURCE_DIR}" ]; then
		echo "Directory for $WHAT, ${LDK_SOURCE_DIR}, already exists!"
		pushd "${LDK_SOURCE_DIR}" > /dev/null
		git status 2>&1 >/dev/null
		if [ $? -ne 0 ]; then
			echo "But the directory is not a git repository -- clean it up first"
			echo ""
			echo ""
			popd > /dev/null
			return 1
		fi
		git fetch --all 2>&1 >/dev/null
		popd > /dev/null
	else
		echo "Downloading default $WHAT source..."

		git clone "$REPO_URL" -n ${LDK_SOURCE_DIR} 2>&1 >/dev/null
		if [ $? -ne 0 ]; then
			echo "$2 source sync failed!"
			echo ""
			echo ""
			return 1
		fi

		echo "The default $WHAT source is downloaded in: ${LDK_SOURCE_DIR}"
	fi

	if [ -z "$TAG" ]; then
		echo "Please enter a tag to sync $2 source to"
		echo -n "(enter nothing to skip): "
		read TAG
		TAG=$(echo $TAG)
		UpdateTags $OPT $TAG
	fi

	if [ ! -z "$TAG" ]; then
		pushd ${LDK_SOURCE_DIR} > /dev/null
		git tag -l 2>/dev/null | grep -q -P "^$TAG\$"
		if [ $? -eq 0 ]; then
			echo "Syncing up with tag $TAG..."
			git checkout -b mybranch_$(date +%Y-%m-%d-%s) $TAG
			echo "$2 source sync'ed to tag $TAG successfully!"
		else
			echo "Couldn't find tag $TAG"
			echo "$2 source sync to tag $TAG failed!"
			RET=1
		fi
		popd > /dev/null
	fi
	echo ""
	echo ""

	return "$RET"
}

# prepare processing ....
GETOPT=":ehd:t:"

OIFS="$IFS"
IFS=$(echo -en "\n\b")
SOURCE_INFO_PROCESSED=($(echo "$SOURCE_INFO"))
IFS="$OIFS"
NSOURCES=${#SOURCE_INFO_PROCESSED[*]}

for ((i=0; i < NSOURCES; i++)); do
	OP=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 1 -d ':')
	GETOPT="${GETOPT}${OP}:"
done

# parse the command line first
while getopts "$GETOPT" opt; do
	case $opt in
		d)
			case $OPTARG in
				-[A-Za-z]*)
					Usages "$SCRIPT_NAME"
					exit 1
					;;
				*)
					LDK_DIR="$OPTARG"
					;;
			esac
			;;
		e)
			EOE=1
			;;
		h)
			Usages "$SCRIPT_NAME"
			exit 1
			;;
		t)
			TAG="$OPTARG"
			PROCESSED=()
			for ((i=0; i < NSOURCES; i++)); do
				OP=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 1 -d ':')
				if [[ ! " ${PROCESSED[@]} " =~ " ${OP} " ]]; then
					UpdateTags $OP $TAG
					PROCESSED+=("${OP}")
				fi
			done
			;;
		[A-Za-z])
			case $OPTARG in
				-[A-Za-z]*)
					eval arg=\$$((OPTIND-1))
					case $arg in
						-[A-Za-Z]-*)
							Usages "$SCRIPT_NAME"
							exit 1
							;;
						*)
							ProcessSwitch "-$opt" ""
							OPTIND=$((OPTIND-1))
							;;
					esac
					;;
				*)
					ProcessSwitch "-$opt" "$OPTARG"
					;;
			esac
			;;
		:)
			case $OPTARG in
				#required arguments
				d)
					Usages "$SCRIPT_NAME"
					exit 1
					;;
				#optional arguments
				[A-Za-z])
					ProcessSwitch "-$OPTARG" ""
					;;
			esac
			;;
		\?)
			echo "Terminating... wrong switch: $@" >&2
			Usages "$SCRIPT_NAME"
			exit 1
			;;
	esac
done
shift $((OPTIND-1))

GRET=0
for ((i=0; i < NSOURCES; i++)); do
	OPT=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 1 -d ':')
	WHAT=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 2 -d ':')
	REPO=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 3 -d ':')
	TAG=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 4 -d ':')
	DNLOAD=$(echo "${SOURCE_INFO_PROCESSED[i]}" | cut -f 5 -d ':')

	if [ $DALL -eq 1 -o "x${DNLOAD}" == "xy" ]; then
		DownloadAndSync "$WHAT" "${LDK_DIR}/${WHAT}" "git://${REPO}" "${TAG}" "${OPT}"
		tRET=$?
		let GRET=GRET+tRET
		if [ $tRET -ne 0 -a $EOE -eq 1 ]; then
			exit $tRET
		fi
	fi
done

ln -sf ../../../../../../nvethernetrm nvidia-oot/drivers/net/ethernet/nvidia/nvethernet/nvethernetrm

exit $GRET

Thank you very much for the script but I think we are using different versions. For 36.4 I have version 36.3. And here’s how I know that:
Revision 3.0.

tegra_defconfig is not in use on rel-36 anymore.

What documentation are you referring to there?

I’ve searched through many resources online, visiting numerous pages and references. Unfortunately, I haven’t been able to find a clear and consistent method to proceed. When I asked here earlier, I didn’t get a response, so I tried to piece together a path forward from the various resources I found. However, the process seems to vary significantly depending on the context, and I’m struggling to figure out the correct approach for this specific setup.

Could you provide me with a detailed and step-by-step guide on how to proceed with building and customizing the kernel for Jetson Linux, considering that tegra_defconfig is no longer in use in rel-36? It would be incredibly helpful if the steps include:

  1. How to obtain the correct kernel sources for this release.
  2. How to configure the kernel properly in the absence of tegra_defconfig.
  3. The exact build commands I need to use.
  4. Any other considerations I need to be aware of when preparing and flashing the kernel.

If there are official or reliable third-party resources that explain this clearly, I’d appreciate links to those as well. I want to ensure I’m following the correct process for this release.

Thank you in advance for your guidance!

Just to clarify

  1. You already got the correct code. Please don’t think your code is wrong. It is already correct one.
    -kernel_oot_modules_src.tbz2
    -kernel_src.tbz2
    -nvidia_kernel_display_driver_source.tbz2

  2. We don’t provide a method to build on device directly. Only cross-compilation method is provded.

  3. You could click the Jetson Linux Developer guide just above where you downloaded the source code. That is the official document.

    v

  4. Jerry already provided you the document since the beginning.
    Unable to Get GPIO Working on Jetson Orin Nano - #9 by JerryChang

  5. The real way to operate a Jetson is that you need to prepare another x86 host PC + Ubuntu there because lots of software customization is done on the host PC first and then move to Jetson side.