flash.sh failing with "CPU bootloader is not running on device" message with JetPack 4.2

Hi,

I am trying to flash a Jetson with an image. This image was built with JetPack 4.2. I followed the commands at https://elinux.org/Jetson/TX2_Cloning - these worked for me every time previously. The command to create the image worked fine this time as well, and I copied the backup.img.raw file to bootloader/system.img successfully, but upon following the steps to flash that image on to another Jetson, I receive the following error:

[   8.1693 ] tegrarcm_v2 --isapplet
[   8.1877 ] 
[   8.1885 ] tegradevflash_v2 --iscpubl
[   8.1891 ] CPU Bootloader is not running on device.

This repeats until the script fails with the following message:

Error: None of the bootloaders are running on device. Check the UART log.
Failed to flash/read t186ref.

How do I fix this?

For reference, the command I am using to flash the image to the new Jetson is:

sudo ./flash.sh -r -k APP jetson-tx2 mmcblk0p1

The device is properly connected via micro USB, and is in recovery mode. The various lsusb commands produce the same output I expected to see previously, when the flash was working fine. As far as I can tell, nothing else has changed - I have tested with multiple cables, so it’s not a simple hardware issue. Have the instructions for flashing the image to a device changed?

Full script logs are at https://pastebin.com/6iBsjpGn

Thanks in advance for your help!

Is the host a VM? This tends to cause similar problems.

No, host is bare-metal 16.04 Ubuntu LTS, no VM or anything else like that.

Is the micro-B USB cable the one provided? Others have given problems since often they are more or less intended only as a charging cable.

If flash of the actual TX2 has not begun, then you might try to disconnect the micro-B USB cable, power down the TX2, reconnect the cable, and then put the TX2 back in recovery mode.

It is not a cable issue or an issue caused by a single board. All cables I have tried are nVidia-branded Jetson USB-micro USB cables, and I have tried ~4 of those with multiple different boards. I have tried restarting and putting the boards back into recovery mode multiple times without success across those multiple boards (using the same power on, wait for boot, hold REC, press RST, release REC a second after RST is released). The error is the same in every case.

Any further suggestions on this?

Considering it isn’t a VM it should be working. It sounds like recovery mode is reached, that cables are valid, so on. The part which may require someone from NVIDIA to respond to is this:

CPU Bootloader is not running on device.

I’m not sure of all of the reasons this could occur.

Can you recommend which nvidia staff member might be able to help with this? Is there a place where I can leave this message that has better visibility? Thanks.

Hi gdavidmac, can you try flashing your target TX2 with vanilla JetPack 4.2 (the normal way first - without using your cloned image). This will let you determine two things:

  1. That your TX2 can still be flashed normally and the CPU bootloader is running
  2. Doing a full flash (instead of just APP) will re-partition the device with the up-to-date partitions used by JetPack 4.2

Just flashing the APP partition with your image doesn’t setup the other partitions on the device, and the layout/contents of these may have changed since the last time this unit was flashed (presumably with a previous version of JetPack/L4T). So flashing the unit first with JetPack 4.2 will set these up properly.

If that works as expected, than you can run the command to restore your image now that the partitions have been setup for JetPack 4.2.

Hi Dusty,

That makes sense, to confirm my understanding: a Jetson may require an initial flash with the version of JetPack corresponding to the image in order to set up other partitions other than APP prior to the cloning of the image to the device?

I will give that a try right away and report back with the results.

Also, this raises the secondary question: is there a way to perform a clone that is inclusive of the other partitions?

Sometimes between minor JetPack revisions it isn’t necessary (if the partition layout and contents hasn’t changed), depending on the last time the target Jetson was last fully flashed. See here for documentation on the current partition structure, which contains low-level system firmware and bootloader components:

https://docs.nvidia.com/jetson/l4t/Tegra%20Linux%20Driver%20Package%20Development%20Guide/part_config.html#wwpID0EIHA

Note that you shouldn’t need to do the post-flashing components of JetPack (like CUDA toolkit, cuDNN, TensorRT, ect.), which get installed over the network after the device is flashed by L4T and booted into Ubuntu. These will get overwritten when you restore your cloned APP partition anyways. If it’s more convenient for you, you can do the flashing with the L4T tools directly. Then restore your cloned image with the L4T tools.

I believe linuxdev has posted before about methods using “dd” to replicated the entire eMMC, but am unsure of this.

This appears to have fixed the problem (flash back to device is ongoing, but I am past where it was failing previously). Thank you so much for the help.