Linux,Unix,BSD/Jetson

[Jetson] Orin NX 16G L4T R35.4.1 적용기

채윤아빠 2023. 11. 20. 22:36
728x90
반응형

개요

새로 구매한 Orin NX 16G 모듈을 캐리어 보드에 장착 후, NVMe에 L4T R35.4.1 이미지를 적용하는 과정에서 실패했던 방법들을 함께 정리하여 기록해 둡니다.


사전 준비작업 (Ubuntu 호스트 PC)

캐리어 보드의 USB-C 컨넥터를 Ubuntu 호스트 PC와 연결하고, "Recovery Mode"로 부팅하도록 관련 핀을 연결하여,
Orin NX 모듈을 "Recovery Mode"로 부팅하고, Ubuntu 호스트 PC에서 다음과 같이 NVIDIA 관련 장치("NVIDIA Corp. APX")가 확인되어야 합니다.

hunature@hunature-MS-98L9:~/work/L4T_r35.4.1/Linux_for_Tegra$ lsusb

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0955:7323 NVIDIA Corp. APX
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

"Jetson Linux 35.4.1":https://developer.nvidia.com/embedded/jetson-linux-r3541 에서 "Driver Package (BSP)" 파일과 "Sample Root Filesystem" 두 파일을 다운로드 받아 아래와 같이 준비합니다.

mkdir -p ~/work/L4T_r35.4.1
cd ~/work/L4T_r35.4.1

wget https://developer.nvidia.com/downloads/embedded/l4t/r35_release_v4.1/release/jetson_linux_r35.4.1_aarch64.tbz2 ; \
wget https://developer.nvidia.com/downloads/embedded/l4t/r35_release_v4.1/release/tegra_linux_sample-root-filesystem_r35.4.1_aarch64.tbz2

tar xf jetson_linux_r35.4.1_aarch64.tbz2 ; \
cd Linux_for_Tegra/rootfs/ ; \
sudo tar xpf ../../tegra_linux_sample-root-filesystem_r35.4.1_aarch64.tbz2 ; \
cd .. ; \
sudo ./apply_binaries.sh
sudo ./tools/l4t_flash_prerequisites.sh

NVMe에 L4T R35.4.1 이미지를 적용 실패기

Orin NX 모듈이 "Recovery Mode"로 부팅된 다음에 다음과 같은 스크립트로 NVMe 디스크에 L4T 이미지를 적용(flash)할 수 있습니다.

# Orin NX board name = p3509-a02+p3767-0000
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
  -c tools/kernel_flash/flash_l4t_external.xml -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml" \
  --network usb0 p3509-a02+p3767-0000 internal

위 스크립트는 R35.2.1에 적용하는 스크립트입니다. 이를 R35.4.1에 적용하면 다음과 같이 오류가 발생하며 R35.4.1 L4T 이미지가 적용되지 않습니다.

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
  -p "-c ./bootloader/t186ref/cfg/flash_t234_qspi.xml" \
  -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml --showlogs \
  --network usb0 p3509-a02+p3767-0000 nvme0n1p1
.
.
.
[   0.1380 ] BR_CID: 0x80012344705DD340880000000E0200C0
[   0.1712 ] Sending bct_br
[   0.2144 ] ERROR: might be timeout in USB write.
Error: Return value 3
Command tegrarcm_v2 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader.bin.encrypt --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader.bin.encrypt --download bct_mb1 mb1_bct_MB1_sigheader.bct.encrypt
Reading board information failed.
Cleaning up...

다음 스크립트를 적용하여도 R35.4.1 L4T 이미지가 적용되지 않습니다.

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
  -p "-c ./bootloader/t186ref/cfg/flash_t234_qspi.xml" \
  -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml --showlogs \
  --network usb0 p3509-0000+p3668-0000 nvme0n1p1
.
.
.
******************************************
*                                        *
*  Step 2: Generate rcm boot commandline *
*                                        *
******************************************
ROOTFS_AB= ROOTFS_ENC= /home/hunature/work/L4T_r35.4.1/Linux_for_Tegra/flash.sh  --no-flash --rcm-boot p3509-0000+p3668-0000 mmcblk0p1
Error: Invalid target board - p3509-0000+p3668-0000.

그러다가 cfg 설정 파일에서 "boardid"에 대한 정보를 확인할 수 있었습니다. 아래 설정에 따르면, Orin NX의 boardid = 3767 입니다.

t23x_3767_bl_spec=(
    # orin-nx 16GB
    'boardid=3767;fab=000;boardsku=0000;boardrev=;chiprev=;chipsku=00:00:00:D3;board=jetson-orin-nano-devkit;rootdev=mmcblk0p1;bup_type=bl'
    # orin-nx 8GB
    'boardid=3767;fab=000;boardsku=0001;boardrev=;chiprev=;chipsku=00:00:00:D4;board=jetson-orin-nano-devkit;rootdev=mmcblk0p1;bup_type=bl'

 

추가로 다음 내용도 참고할만 합니다.

is the appropriate configuration name:
For Jetson Xavier NX P3668-0001: jetson-xavier-nx-devkit-emmc
For Jetson AGX Xavier P2888-0001 (16GB) or P2888-0004 (32GB) or P2888-0005 (64GB): jetson-agx-xavier-devkit
For Jetson AGX Xavier Industrial P2888-0008 (64GB): jetson-agx-xavier-industrial
For Jetson AGX Orin P3701-0000(32GB) or P3701-0004 (32GB) or P3701-0005 (64GB): jetson-agx-orin-devkit
For Jetson AGX Orin Industrial P3701-0008: jetson-agx-orin-devkit-industrial
For Jetson Orin NX P3767-0000(16GB) or P3767-0001(8GB): jetson-orin-nano-devkit
For Jetson Orin Nano P3767-0003(8GB) or P3767-0004(4GB) or P3767-0005(8GB): jetson-orin-nano-devkit

 

확인한 boardid = 3767에 해당하는 설정으로 다음과 같이 스크립트를 실행하여도 오류가 발생하며 R35.4.1 L4T 이미지가 적용되지 않습니다.

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
  -c tools/kernel_flash/flash_l4t_external.xml -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml" \
  --showlogs --network usb0 p3737-0000+p3701-0000 internal
.
.
.
[   0.1325 ] BR_CID: 0x80012344705DD340880000000E0200C0
[   0.1598 ] Sending bct_br
[   0.2029 ] ERROR: might be timeout in USB write.
Error: Return value 3
Command tegrarcm_v2 --new_session --chip 0x23 0 --uid --download bct_br br_bct_BR.bct --download mb1 mb1_t234_prod_aligned_sigheader.bin.encrypt --download psc_bl1 psc_bl1_t234_prod_aligned_sigheader.bin.encrypt --download bct_mb1 mb1_bct_MB1_sigheader.bct.encrypt
Reading board information failed.
Cleaning up...

NVMe에 L4T R35.4.1 이미지를 적용기

결과적으로 Quick Start 문서에 있는 다음 명령을 통하여 NVMe에 OS 설치 성공하였습니다. Orin Nano Devkit 설정을 활용하면, Orin NX에도 R35.4.1 L4T 이미지를 적용할 수 있었습니다.

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
  -c tools/kernel_flash/flash_l4t_external.xml -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml" \
  --showlogs --network usb0 jetson-orin-nano-devkit internal
.
.
.
[ 197]: l4t_flash_from_kernel: Successfully flash the qspi
[ 197]: l4t_flash_from_kernel: Flashing success
[ 197]: l4t_flash_from_kernel: The device size indicated in the partition layout xml is smaller than the actual size. This utility will try to fix the GPT.
Flash is successful
Reboot device
Cleaning up...
Log is saved to Linux_for_Tegra/initrdlog/flash_1-2_0_20231120-130940.log

이후 jetson orin NX가 재부팅되고 OS 신규 설치가 완료되어 설정 대기 화면이 나타납니다.

여기서부터는 일반 Ubuntu OS와 동일한 과정을 통하여 언어 및 키보드를 선택하고, 계정정보를 입력하고, 파티션 크기 등을 설정하면 설치가 완료되고 나면, 익숙한 NVIDIA 데스크톱 화면이 나타납니다.


참고자료