Impossible to flash JetPack 4.5.1/L4T

A few days ago one of my Jetson Nanos presented an issue while booting. The issue is that it is not booting at all. This happened after I modified the /boot/extlinux/extlinux.conf and change the primary boot. I think I left a typo in the file and that is why it is not working. I have the Jetson Nano Developer Kit P3450-0000, it comes with an SD slot but doesn’t work. I was trying to boot from a USB and in the process, I ended up damaging something.

Since I was unable to boot I decided to use the serial console using minicom to interact with the terminal. I can see the boot printing in real-time, but it gets stuck here:

U-Boot 2020.04-g4335beb (Apr 20 2022 - 14:22:25 -0700)

SoC: tegra210
Model: NVIDIA Jetson Nano Developer Kit
Board: NVIDIA P3450-0000
DRAM:  4 GiB
MMC:   sdhci@700b0000: 1, sdhci@700b0600: 0
Loading Environment from MMC... *** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   No ethernet found.
Hit any key to stop autoboot:  0 
MMC: no card present
switch to partitions #0, OK
mmc0(part 0) is current device
Scanning mmc 0:1...
Found /boot/extlinux/extlinux.conf
Retrieving file: /boot/extlinux/extlinux.conf
1175 bytes read in 23 ms (49.8 KiB/s)
L4T boot options
1:      primary kernel
2:      primary kernel
Enter choice: 1:        primary kernel
Retrieving file: /boot/initrd
7160179 bytes read in 179 ms (38.1 MiB/s)
Retrieving file: /boot/Image
34484232 bytes read in 781 ms (42.1 MiB/s)
append: tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info 
## Flattened Device Tree blob at 83100000
   Booting using the fdt blob at 0x83100000
ERROR: reserving fdt memory region failed (addr=0 size=0)
ERROR: reserving fdt memory region failed (addr=0 size=0)
   Using Device Tree in place at 0000000083100000, end 000000008317ce8d
copying carveout for /host1x@50000000/dc@54200000...
copying carveout for /host1x@50000000/dc@54240000...

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.9.253-tegra (buildbrain@mobile-u64-5494-d8000) (gcc version 7.3.1 2012
[    0.000000] Boot CPU: AArch64 Processor [411fd071]
[    0.000000] OF: fdt:memory scan node memory@80000000, reg size 32,
[    0.000000] OF: fdt: - 80000000 ,  7ee00000
[    0.000000] OF: fdt: - 100000000 ,  7f200000
[    0.000000] earlycon: uart8250 at MMIO32 0x0000000070006000 (options '')
[    0.000000] bootconsole [uart8250] enabled
[    1.081692] tegradc tegradc.1: dpd enable lookup fail:-19
[    1.587405] Host read timeout at address 545c00c4
[    1.838707] imx219 7-0010: imx219_board_setup: error during i2c read probe (-121)
[    1.846361] imx219 7-0010: board setup failed
[    1.874800] imx219 8-0010: imx219_board_setup: error during i2c read probe (-121)
[    1.882714] imx219 8-0010: board setup failed

I turn the nano off and shorted the FC REC + GMD, and using the SDK Manager I attempted to flash the image again, but the result was the following:

14:46:04 INFO: Flash Jetson Nano (Devkit) - flash: ###############################################################################
14:46:04 INFO: Flash Jetson Nano (Devkit) - flash: # L4T BSP Information:
14:46:04 INFO: Flash Jetson Nano (Devkit) - flash: # R32 , REVISION: 5.1
14:46:04 INFO: Flash Jetson Nano (Devkit) - flash: ###############################################################################
14:46:04 ERROR: Flash Jetson Nano (Devkit) - flash: Error: probing the target board failed.
14:46:04 INFO: Flash Jetson Nano (Devkit) - flash: Make sure the target board is connected through
14:46:04 INFO: Flash Jetson Nano (Devkit) - flash: USB port and is in recovery mode.
14:46:04 ERROR: Flash Jetson Nano (Devkit) - flash: *** ERROR: flashing failed.
14:46:04 INFO: Flash Jetson Nano (Devkit) - flash: [ Component Install Finished with Error ]
14:46:04 INFO: Flash Jetson Nano (Devkit) - flash: [host] [ 44.00 KB used. Disk Avail: 38.15 GB ]
14:46:04 INFO: Flash Jetson Nano (Devkit) - flash: [ NV_L4T_FLASH_NANO_DEVKIT_WITH_OS_IMAGE_COMP Install took 6s ]
14:46:04 ERROR: Flash Jetson Nano (Devkit) - flash: command terminated with error
14:46:04 SUMMARY: Flash Jetson Nano (Devkit) - flash: First Error: Jetson board is in a bad state and cannot be recovered. Please manually put board to recovery mode again and retry.. The Jetson target is in a bad state and cannot be flashed. Please manually put the target into recovery mode and then retry flashing.

During this installation, I heard the board automatically disconnecting and re-connecting to my host PC, which immediately led to the error printed above. I repeated the process but from the command line sudo ./flash.sh jetson-nano-devkit mmcblk1p1 outputting the following:

yahboom@YAB:~/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra$ sudo ./flash.sh jetson-nano-devkit mmcblk1p1
###############################################################################
# L4T BSP Information:
# R32 , REVISION: 5.1
###############################################################################
# Target Board Information:
# Name: jetson-nano-devkit, Board Family: t210ref, SoC: Tegra 210, 
# OpMode: production, Boot Authentication: , 
# Disk encryption: disabled ,
###############################################################################
./tegraflash.py --chip 0x21 --applet "/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/nvtboot_recovery.bin" --skipuid --cmd "dump eeprom boardinfo cvm.bin" 
Welcome to Tegra Flash
version 1.0.0
Type ? or help for help and q or quit to exit
Use ! to execute system commands
 
[   0.0031 ] Generating RCM messages
[   0.0061 ] tegrarcm --listrcm rcm_list.xml --chip 0x21 0 --download rcm /home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/nvtboot_recovery.bin 0 0
[   0.0078 ] RCM 0 is saved as rcm_0.rcm
[   0.0086 ] RCM 1 is saved as rcm_1.rcm
[   0.0088 ] List of rcm files are saved in rcm_list.xml
[   0.0093 ] 
[   0.0093 ] Signing RCM messages
[   0.0107 ] tegrasign --key None --list rcm_list.xml --pubkeyhash pub_key.key
[   0.0122 ] Assuming zero filled SBK key
[   0.0193 ] 
[   0.0197 ] Copying signature to RCM mesages
[   0.0215 ] tegrarcm --chip 0x21 0 --updatesig rcm_list_signed.xml
[   0.0244 ] 
[   0.0245 ] Boot Rom communication
[   0.0262 ] tegrarcm --chip 0x21 0 --rcm rcm_list_signed.xml --skipuid
[   0.0276 ] RCM version 0X210001
[   0.0798 ] Boot Rom communication completed
[   1.1007 ] 
[   1.1008 ] dump EEPROM info
[   1.1031 ] tegrarcm --oem platformdetails eeprom /home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/cvm.bin
[   1.1049 ] Applet version 00.01.0000
[   1.1522 ] Saved platform info in /home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/cvm.bin
[   1.2719 ] 
[   1.2737 ] tegrarcm --reboot recovery
[   1.2750 ] Applet version 00.01.0000
[   1.3422 ] 
Board ID(3448) version(400) 
copying bctfile(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/t210ref/BCT/P3448_A00_lpddr4_204Mhz_P987.cfg)... done.
copying bootloader(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/t210ref/cboot.bin)... done.
copying initrd(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/l4t_initrd.img)... done.
	populating kernel to rootfs... done.
	populating initrd to rootfs... done.
	populating /home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/kernel/dtb/tegra210-p3448-0002-p3449-0000-b00.dtb to rootfs... done.
Making Boot image... done.
Existing sosfile(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/nvtboot_recovery.bin) reused.
copying tegraboot(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/t210ref/nvtboot.bin)... done.
copying cpu_bootloader(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/t210ref/cboot.bin)... done.
copying bpffile(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/t210ref/sc7entry-firmware.bin)... done.
Existing badpagefile(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/badpage.bin) reused.
copying wb0boot(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/t210ref/warmboot.bin)... done.
Existing tosfile(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/tos-mon-only.img) reused.
Existing eksfile(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/eks.img) reused.
copying dtbfile(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/kernel/dtb/tegra210-p3448-0002-p3449-0000-b00.dtb)... done.
Copying nv_boot_control.conf to rootfs
generating system.img for booting... 
Making system.img... 
	populating rootfs from /tmp/tmp.xSQMkVCH5a ... done.
	populating /boot/extlinux/extlinux.conf ... done.
	Sync'ing system.img ... done.
	Converting RAW image to Sparse image... done.
system.img built successfully. 
Existing tbcfile(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/nvtboot_cpu.bin) reused.
copying tbcdtbfile(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/kernel/dtb/tegra210-p3448-0002-p3449-0000-b00.dtb)... done.
copying cfgfile(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/t210ref/cfg/flash_l4t_t210_max-spi_sd_p3448.xml) to flash.xml... done.
copying flasher(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/t210ref/cboot.bin)... done.
Existing flashapp(/home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/tegraflash.py) reused.
./tegraflash.py --bl cboot.bin --bct  P3448_A00_lpddr4_204Mhz_P987.cfg --odmdata 0xa4000 --bldtb kernel_tegra210-p3448-0002-p3449-0000-b00.dtb --applet nvtboot_recovery.bin --cmd "flash; reboot"  --cfg flash.xml --chip 0x21    --bins "EBT cboot.bin; DTB tegra210-p3448-0002-p3449-0000-b00.dtb" 
saving flash command in /home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/flashcmd.txt
saving Windows flash command to /home/yahboom/nvidia/nvidia_sdk/JetPack_4.5.1_Linux_JETSON_NANO_DEVKIT/Linux_for_Tegra/bootloader/flash_win.bat
*** Flashing target device started. ***
Welcome to Tegra Flash
version 1.0.0
Type ? or help for help and q or quit to exit
Use ! to execute system commands
 
[   0.0029 ] tegrasign --key None --getmode mode.txt
[   0.0045 ] Assuming zero filled SBK key
[   0.0046 ] 
[   0.0047 ] Generating RCM messages
[   0.0063 ] tegrarcm --listrcm rcm_list.xml --chip 0x21 0 --download rcm nvtboot_recovery.bin 0 0
[   0.0108 ] RCM 0 is saved as rcm_0.rcm
[   0.0124 ] RCM 1 is saved as rcm_1.rcm
[   0.0129 ] List of rcm files are saved in rcm_list.xml
[   0.0165 ] 
[   0.0167 ] Signing RCM messages
[   0.0184 ] tegrasign --key None --list rcm_list.xml --pubkeyhash pub_key.key
[   0.0202 ] Assuming zero filled SBK key
[   0.0260 ] 
[   0.0262 ] Copying signature to RCM mesages
[   0.0293 ] tegrarcm --chip 0x21 0 --updatesig rcm_list_signed.xml
[   0.0405 ] 
[   0.0407 ] Parsing partition layout
[   0.0461 ] tegraparser --pt flash.xml.tmp
[   0.0504 ] 
[   0.0506 ] Creating list of images to be signed
[   0.0538 ] tegrahost --chip 0x21 0 --partitionlayout flash.xml.bin --list images_list.xml
[   0.0722 ] 
[   0.0724 ] Generating signatures
[   0.0744 ] tegrasign --key None --list images_list.xml --pubkeyhash pub_key.key
[   0.0761 ] Assuming zero filled SBK key
[   0.1401 ] 
[   0.1402 ] Generating br-bct
[   0.1442 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.cfg --chip 0x21 0
[   0.1461 ] Copying Sdram info from 2 to 3 set
[   0.1507 ] 
[   0.1507 ] Updating boot device parameters
[   0.1523 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --updatedevparam flash.xml.bin
[   0.1539 ] Warning: No sdram params
[   0.1545 ] 
[   0.1546 ] Updating bl info
[   0.1561 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --updateblinfo flash.xml.bin --updatesig images_list_signed.xml
[   0.1593 ] 
[   0.1594 ] Updating secondary storage information into bct
[   0.1606 ] tegraparser --pt flash.xml.bin --chip 0x21 0 --updatecustinfo P3448_A00_lpddr4_204Mhz_P987.bct
[   0.1632 ] 
[   0.1633 ] Updating Odmdata
[   0.1655 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --updatefields Odmdata =0xa4000
[   0.1678 ] Warning: No sdram params
[   0.1694 ] 
[   0.1695 ] Get Signed section of bct
[   0.1709 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --listbct bct_list.xml
[   0.1735 ] 
[   0.1736 ] Signing BCT
[   0.1792 ] tegrasign --key None --list bct_list.xml --pubkeyhash pub_key.key
[   0.1823 ] Assuming zero filled SBK key
[   0.1832 ] 
[   0.1832 ] Updating BCT with signature
[   0.1847 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --updatesig bct_list_signed.xml
[   0.1863 ] 
[   0.1864 ] Copying signatures
[   0.1878 ] tegrahost --chip 0x21 0 --partitionlayout flash.xml.bin --updatesig images_list_signed.xml
[   0.1957 ] 
[   0.1958 ] Updating BFS information on BCT
[   0.1971 ] tegrabct --bct P3448_A00_lpddr4_204Mhz_P987.bct --chip 0x21 0 --updatebfsinfo flash.xml.bin
[   0.2008 ] 
[   0.2009 ] Boot Rom communication
[   0.2025 ] tegrarcm --chip 0x21 0 --rcm rcm_list_signed.xml
[   0.2044 ] BootRom is not running
[   0.2200 ] 
[   0.2200 ] Sending BCTs
[   0.2217 ] tegrarcm --download bct P3448_A00_lpddr4_204Mhz_P987.bct
[   0.2231 ] Cannot open usb device.Check if device is in recovery
[   0.2528 ] 
Error: Return value 8
Command tegrarcm --download bct P3448_A00_lpddr4_204Mhz_P987.bct
Failed flashing t210ref.

I do not know what else to do. I don’t care on saving what is in the memory I only want it to boot. Any suggestions will be appreciated.
Thanks

I probably can’t answer this completely, but I can get this started.

  • Can you confirm this is a dev kit and not something with a third party carrier board which happens to have an SD card slot?
  • Also, is the host PC a native Ubuntu 18.04, or is it a VM?
  • Regardless, can you plug your SD card into another Linux system and post the content of its “/boot/extlinux/extlinux.conf”?
  • When you plug in the SD card to the host PC, also post the content of “/etc/nv_tegra_release”.

Hello @linuxdev,
Thanks a lot for your response. Find the answer to your question below:

  • Can you confirm this is a dev kit and not something with a third party carrier board which happens to have an SD card slot?
    → It is very likely to be a third-party board with an SD card-slot, I can’t really tell. I got it from e-bay and the description says it is the original Dev-Kit, but I doubt it. Especially since there is no NVIDIA branding anywhere.

  • Also, is the host PC a native Ubuntu 18.04, or is it a VM?
    → Ubuntu 18.04 VM

  • Regardless, can you plug your SD card into another Linux system and post the content of its “/boot/extlinux/extlinux.conf”?
    → The SD card hasn’t been used. All the information was inside the internal memory of the board. I tried to use the SD card when I first got it but it was never detected, hence, never used it.

  • When you plug in the SD card to the host PC, also post the content of “/etc/nv_tegra_release”.
    → The SD card hasn’t been used. All the information was inside the internal memory of the board. I tried to use the SD card when I first got it but it was never detected, hence, never used it.

As far as actual models go, if it has eMMC, then it is not a dev kit. If it is SD-only, and has no eMMC, then it must be a dev kit. One reason this matters is that the drivers and software for boot will differ between an eMMC model and an SD card model (having an SD card in addition to eMMC is not the same as an SD card model…the implication when saying it is an SD card model is to say it is a dev kit module). If the SD card slot is attached to the module, then it would be a dev kit; if the SD card slot is instead attached to the carrier board, then it would be a third party carrier board plus eMMC module. The fact that you’ve not used the SD card and used onboard memory guarantees this is an eMMC model with a third party carrier board.

You will need to identify the manufacturer of the carrier board. The flash software for these will differ from the dev kits. Mostly that will be the same software, but for everything not of the same electrical layout (such as the SD card slot being wired differently) you will need a modified device tree. The manufacturer provides the flash software as either a modified version of what NVIDIA provides, or else as patches to add or unpack in the dev kit flash software. If the SD slot was not detected (after boot), then it implies you need the carrier board manufacturer’s device tree. This can also cause boot failure depending on layout changes.

VMs are not officially supported. Some people do get them to work, but typically they must be configured correctly (and each VM has its own instructions and is out of the control of the flash software). During a flash the USB will disconnect and reconnect. VMs must be configured to keep the USB even if there is a disconnect/reconnect (which is not a problem for a native install). Also, the WSL2 VM does not support features which a normal VM supports (very few people will get WSL2 to work because adding the needed features like loopback might be possible for an advanced user, but difficult and obscure).

You might be able to post pictures of the carrier board for someone to recognize it. Or go to the third party carrier board manufacturers websites and identify a picture that matches your model. This would have the software you need for flash. This URL is long but might point to the manufacturer:
https://developer.nvidia.com/embedded/community/ecosystem

Hello @linuxdev,
Thanks again for your help. I really appreciate it.

Turns out that the closes (if not the same) is the Jetson Nano IO-Base-A from Waveshare (https://www.waveshare.com/jetson-nano-dev-kit-a.htm?sku=21650). It is a one-one image, even the print “JETSON-IO-BASED-A” can be seen at the top of the board.
image
image

I will try to follow their documentation.
Any recommendations?
Best,

If it flashes and works, then it means the device tree is correct (and this is the part which differs the most in different models). Since a Jetson does not have a BIOS, it also means you can’t really brick the board if it is flashed for the wrong Jetson model, so you are good to go. The one thing I’d double check is to see if the power supply you are using is compatible with that model. And of course if the kit you purchased came with the power supply, then you probably don’t need to check it, but I’d take note anyway…Nano dev kits tend to use 5 V, while many of the similar form factor non-Nanos take around 9 to 19.2 V.

Quick update. I ended up installing ubuntu 18.04 LTS on an old computer., downloaded the SDK manager, connected the Waveshare documentation to flash the board, and it worked perfectly well. Thanks for the support.