Jetson Xavier NX, AGX Xavier는 initrd를 이용해 캐리어 보드상에서 NVMe에 flash할 수 있다.
이런거 없이도 된다.
m.2 NVMe SSD
JDK100 carrier board
Jetson Xavier NX
Host PC with Ubuntu 18.04
sudo systemctl stop udisks2.service
sudo apt install -y libxml2-utils simg2img abootimg sshpass
cd ~/work
wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t186/jetson_linux_r32.7.2_aarch64.tbz2
wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t186/tegra_linux_sample-root-filesystem_r32.7.2_aarch64.tbz2
tar xpf jetson_linux_r32.7.2_aarch64.tbz2
cd Linux_for_Tegra/rootfs
sudo tar xpf ../../tegra_linux_sample-root-filesystem_r32.7.2_aarch64.tbz2
cd ~/work
wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t186/secureboot_r32.7.2_aarch64.tbz2
tar tvf secureboot_r32.7.2_aarch64.tbz2 20:09:35
drwxrwxrwx 0/0 0 2022-04-17 02:57 Linux_for_Tegra/
drwxrwxrwx 0/0 0 2022-04-17 02:57 Linux_for_Tegra/tools/
drwxrwxrwx 0/0 0 2022-04-17 02:57 Linux_for_Tegra/tools/backup_restore/
-rw-rw-rw- 0/0 5991 2022-04-17 02:57 Linux_for_Tegra/tools/backup_restore/l4t_backup_restore.func
-rwxrwxrwx 0/0 14274 2022-04-17 02:57 Linux_for_Tegra/tools/backup_restore/nvbackup_partitions.sh
-rwxrwxrwx 0/0 4578 2022-04-17 02:57 Linux_for_Tegra/tools/backup_restore/l4t_backup_restore.sh
-rwxrwxrwx 0/0 9902 2022-04-17 02:57 Linux_for_Tegra/tools/backup_restore/nvrestore_partitions.sh
-rw-rw-rw- 0/0 3280 2022-04-17 02:57 Linux_for_Tegra/tools/backup_restore/README_backup_restore.txt
-rwxrwxrwx 0/0 3317 2022-04-17 02:57 Linux_for_Tegra/odmfuseread.sh
-rwxrwxrwx 0/0 48226 2022-04-17 02:57 Linux_for_Tegra/odmfuse.sh
-rwxrwxrwx 0/0 27031 2022-04-17 02:57 Linux_for_Tegra/nvmassfusegen.sh
drwxrwxrwx 0/0 0 2022-04-17 02:57 Linux_for_Tegra/bootloader/
-rw-rw-rw- 0/0 9385 2022-04-17 02:57 Linux_for_Tegra/bootloader/README_Massfuse.txt
-rw-rw-rw- 0/0 6121 2022-04-17 02:57 Linux_for_Tegra/bootloader/LICENSE.tegrakeyhash
-rwxrwxrwx 0/0 1074600 2022-04-17 02:57 Linux_for_Tegra/bootloader/tegrakeyhash
-rw-rw-rw- 0/0 24309 2022-04-17 02:57 Linux_for_Tegra/bootloader/odmsign.func
-rwxrwxrwx 0/0 9986 2022-04-17 02:57 Linux_for_Tegra/bootloader/wb_sign.sh
-rw-rw-rw- 0/0 29854 2022-04-17 02:57 Linux_for_Tegra/bootloader/README_secureboot.txt
drwxrwxrwx 0/0 0 2022-04-17 02:57 Linux_for_Tegra/pkc/
-rw-rw-rw- 0/0 6916 2022-04-17 02:57 Linux_for_Tegra/pkc/0001-warmboot-change-wb-prepare-code-for-t1x4.patch
-rwxrwxrwx 0/0 1134965 2022-04-17 02:57 Linux_for_Tegra/pkc/nvsecuretool
-rw-rw-rw- 0/0 6121 2022-04-17 02:57 Linux_for_Tegra/pkc/LICENSE.mkpkc
-rwxrwxrwx 0/0 4098 2022-04-17 02:57 Linux_for_Tegra/pkc/tegrafuse.sh
-rw-rw-rw- 0/0 6121 2022-04-17 02:57 Linux_for_Tegra/pkc/LICENSE.nvsecuretool
-rwxrwxrwx 0/0 684549 2022-04-17 02:57 Linux_for_Tegra/pkc/mkpkc
-rw-rw-rw- 0/0 24458 2022-04-17 02:57 Linux_for_Tegra/odmfuse.func
tar xpf secureboot_r32.7.2_aarch64.tbz2
cd ${L4T}
sudo ./apply_binaries.sh
cd ${L4T}/tools
#sudo ./l4t_create_default_user.sh -u {username} -p {password} -n {hostname} -a --accept-license
sudo ./l4t_create_default_user.sh -u nvidia -p nvidia -n jdk100 -a --accept-license
cd ${L4T}
cp bootloader/t186ref/BCT/tegra19x-mb1-pinmux-p3668-a01.cfg \
bootloader/t186ref/BCT/tegra19x-mb1-pinmux-p3668-a01.cfg.org
wget -O bootloader/t186ref/BCT/tegra19x-mb1-pinmux-p3668-a01.cfg \
https://gitlab.com/telelian_public/l4t/jdk100-xaviernx/uploads/0c4c2f619101214b815792e8d2f9d73a/tegra19x-mb1-pinmux-p3668-a01.cfg
wget -O kernel/dtb/jdk100-xaviernx.dtb \
https://gitlab.com/telelian_public/l4t/jdk100-xaviernx/uploads/157b94bbd87a2bc1f70a7f6c2abd70ea/jdk100-xaviernx.dtb
sudo mv kernel/dtb/tegra194-p3668-all-p3509-0000.dtb \
kernel/dtb/tegra194-p3668-all-p3509-0000.dtb.org
sudo cp kernel/dtb/jdk100-xaviernx.dtb \
kernel/dtb/tegra194-p3668-all-p3509-0000.dtb
sudo cp kernel/dtb/jdk100-xaviernx.dtb \
bootloader/tegra194-p3668-all-p3509-0000.dtb
wget -O bootloader/kernel_jdk100-xaviernx.dtb \
https://gitlab.com/telelian_public/l4t/jdk100-xaviernx/uploads/d44da832d8eefff6a194b3c761303a1a/kernel_jdk100-xaviernx.dtb
wget -O bootloader/kernel_jdk100-xaviernx.dtb.sb \
https://gitlab.com/telelian_public/l4t/jdk100-xaviernx/uploads/2803db8b2ecd2f30d381c65068ca3f20/kernel_jdk100-xaviernx.dtb.sb
wget -O bootloader/kernel_jdk100-xaviernx_sigheader.dtb.encrypt \
https://gitlab.com/telelian_public/l4t/jdk100-xaviernx/uploads/7b7bf9469224e00d6b881252d130bc43/kernel_jdk100-xaviernx_sigheader.dtb.encrypt
sudo cp bootloader/kernel_jdk100-xaviernx.dtb \
bootloader/kernel_tegra194-p3668-all-p3509-0000.dtb
sudo cp bootloader/kernel_jdk100-xaviernx.dtb.sb \
bootloader/kernel_tegra194-p3668-all-p3509-0000.dtb.sb
sudo cp bootloader/kernel_jdk100-xaviernx_sigheader.dtb.encrypt \
bootloader/kernel_tegra194-p3668-all-p3509-0000_sigheader.dtb.encrypt
sudo fdisk /dev/nvme0n1
[sudo] password for nvidia:
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
# p를 눌러 ↓ 바로 아래 줄을 확인하여 어디 적어놓자.
Disk /dev/nvme0n1: 477 GiB, 512110190592 bytes, 1000215216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf2eba7c1
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 2048 1000215215 1000213168 477G 83 Linux
<partition_layout version="01.00.0000">
<device type="nvme" instance="0" sector_size="512" num_sectors="1000215216">
<partition name="master_boot_record" type="protective_master_boot_record">
<allocation_policy> sequential </allocation_policy>
<filesystem_type> basic </filesystem_type>
<size> 512 </size>
<file_system_attribute> 0 </file_system_attribute>
<allocation_attribute> 8 </allocation_attribute>
<percent_reserved> 0 </percent_reserved>
<description> **Required.** Contains protective MBR. </description>
</partition>
...
cd ${L4T}
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
-c ./tools/kernel_flash/flash_l4t_nvme.xml \
-S 476GiB --no-flash --showlogs \
jetson-xavier-nx-devkit-emmc nvme0n1p1
cd ${L4T}
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
-c ./tools/kernel_flash/flash_l4t_nvme.xml \
--flash-only --showlogs \
jetson-xavier-nx-devkit-emmc nvme0n1p1
재부팅 후 아래의 명령으로 nvme drive로 부팅이 완료됐는지 확인한다.
df / -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p1 468G 5.2G 439G 2% /
sudo parted /dev/nvme0n1
GNU Parted 3.2
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: GIGABYTE GP-GSM2NE3512GNTD (nvme)
Disk /dev/nvme0n1: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 20.5kB 511GB 511GB ext4 APP msftdata
2 511GB 511GB 67.1MB kernel msftdata
3 511GB 511GB 67.1MB kernel_b msftdata
4 511GB 511GB 459kB kernel-dtb msftdata
5 511GB 511GB 459kB kernel-dtb_b msftdata
6 511GB 511GB 66.1MB recovery msftdata
7 511GB 511GB 524kB recovery-dtb msftdata
8 511GB 511GB 262kB kernel-bootctrl msftdata
9 511GB 511GB 262kB kernel-bootctrl_b msftdata
10 511GB 512GB 315MB RECROOTFS msftdata
11 512GB 512GB 492MB UDA msftdata