Flash TX2 failed with Error: Return value 13


I’m confronted with the above error when trying to flash the TX2 with an image created before. For the context. It was working for saving and restoring with the “old” Jetsons that I ordered à few months ago. I just received the new order with the same TX2 but now it’s not working anymore. I first tried to make à new backup image with the new one. The backup is working, but when I want to restore I encounter the error.

I use the below command to make the backup:

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

And this one to restore the before created image to a TX2

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

This is the entire error:

Error: Return value 13
Command tegrarcm_v2 --download blob blob.bin
Failed to flash/read t186ref.

Thanks for the answers


I’m not positive about the actual error, but modules purchased separately arrive completely empty. For a clone to work the module must have been flashed previously with the same L4T release as that which the clone is from. If this is just a module, then can you try flashing the entire L4T package?

You can “reuse” a previously generated “bootloader/system.img” using the “-r” option, by itself, and thus a first flash can be with the clone if you have placed the clone at “bootloader/system.img”. The “-k” would need to be left out so that other content flashes as well, but you’d get your clone image installed.

May I know what is the Jetpack version?

So maybe the L4T release was different the first time I try to restore the “new” TX2 with the “old” image, but then I made a new image with the “new” TX2 and it doesn’t work either when I try to restore. You’re saying I have to try without the -k option ?

I saw there is a new version of TX2 and Xavier (JetPack 4.2) and I try to install it, but I haven’t found how to make a backup with this version, so I used the old one (JetPack 3.3) it works to make a new installation and to make the backup. The only thing that doesn’t work is when I try to flash the “new” TX2 with the backup image.

I just notice you said you are restoring image to some “new” TX2. Could you elaborate what does that mean?

Is this test actually based on many TX2 devices? Do you backup the system image from device A to device B and device B is a fresh TX2?

I ordered some TX2 a few months ago and I made an first normal installation using JetPack 3.3 then I installed some other things that take a lot of time and to prevent making all this installation again and again I made and backup image using the below command.

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

After this I was able to flash the others TX2 with the created raw image (backup_name.img.raw)by placing it in bootloader/ and renaming it system.img with the below command.

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

All that worked fine and I did it on many “old” TX2

Then I needed to have more TX2 and made a new order. I tried to flash the “new” TX2 like before with the “old” backup image. But I encountered the mentioned issue. I thought that it was something with the versions and it seems so like LinuxDev mentioned it.

So I decided to make a new installation from scratch with Jetpack 3.3 on the “new” TX2. this works fine and I made a new backup image with the same command as above. But when I tried to flash some others “new” TX2 with this new backup image the same way as before I run into the same issue.

I hope this is a little bit more clear than before .

It sounds easy to reproduce issue. I would try it on my side too.

Does this issue happen to specific modules? Could you try to flash the backup image from “new” tx2 on “old” tx2?

Could you also share the full flash log instead of partial one?

I tested to flash an “old” TX2 with the backup image of the “new” TX2 and it worked.

Here is the full log of the flash (took it from the terminal output I can’t find where the log file is located I found one but the logs doesn’t match)

# L4T BSP Information:
# R28 (release), REVISION: 2.1, GCID: 11272647, BOARD: t186ref, EABI: aarch64, 
# DATE: Thu May 17 07:29:06 UTC 2018
# Target Board Information:
# Name: jetson-tx2, Board Family: t186ref, SoC: Tegra 186, 
# OpMode: production, Boot Authentication: , 
./tegraflash.py --chip 0x18 --applet "/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/mb1_recovery_prod.bin" --cmd "dump eeprom boardinfo cvm.bin" --skipuid 
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.0021 ] Generating RCM messages
[   0.0028 ] tegrarcm_v2 --listrcm rcm_list.xml --chip 0x18 --download rcm /home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/mb1_recovery_prod.bin 0 0
[   0.0034 ] RCM 0 is saved as rcm_0.rcm
[   0.0038 ] RCM 1 is saved as rcm_1.rcm
[   0.0038 ] List of rcm files are saved in rcm_list.xml
[   0.0038 ] 
[   0.0038 ] Signing RCM messages
[   0.0048 ] tegrasign_v2 --key None --list rcm_list.xml --pubkeyhash pub_key.key
[   0.0054 ] Assuming zero filled SBK key
[   0.0081 ] 
[   0.0081 ] Copying signature to RCM mesages
[   0.0087 ] tegrarcm_v2 --chip 0x18 --updatesig rcm_list_signed.xml
[   0.0096 ] 
[   0.0096 ] Boot Rom communication
[   0.0102 ] tegrarcm_v2 --chip 0x18 --rcm rcm_list_signed.xml --skipuid
[   0.0108 ] RCM version 0X180001
[   0.1701 ] Boot Rom communication completed
[   1.1764 ] 
[   1.1772 ] tegrarcm_v2 --isapplet
[   1.1777 ] Applet version 01.00.0000
[   1.5160 ] 
[   1.5189 ] Retrieving EEPROM data
[   1.5192 ] tegrarcm_v2 --oem platformdetails eeprom cvm /home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/cvm.bin
[   1.5218 ] Applet version 01.00.0000
[   1.8761 ] Saved platform info in /home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/cvm.bin
[   1.9536 ] 
Board ID(3310) version(D01) 
copying bctfile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/BCT/P3310_A00_8GB_Samsung_8GB_lpddr4_204Mhz_A02_l4t.cfg)... done.
copying misc_config(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/BCT/tegra186-mb1-bct-misc-si-l4t.cfg)... done.
copying pinmux_config(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/BCT/tegra186-mb1-bct-pinmux-quill-p3310-1000-c03.cfg)... done.
copying pmic_config(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/BCT/tegra186-mb1-bct-pmic-quill-p3310-1000-c04.cfg)... done.
copying pmc_config(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/BCT/tegra186-mb1-bct-pad-quill-p3310-1000-c03.cfg)... done.
copying prod_config(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/BCT/tegra186-mb1-bct-prod-quill-p3310-1000-c03.cfg)... done.
copying scr_config(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/BCT/minimal_scr.cfg)... done.
copying scr_cold_boot_config(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/BCT/mobile_scr.cfg)... done.
copying bootrom_config(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/BCT/tegra186-mb1-bct-bootrom-quill-p3310-1000-c03.cfg)... done.
copying dev_params(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/BCT/emmc.cfg)... done.
Existing bootloader(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/nvtboot_cpu.bin) reused.
	populating kernel to rootfs... done.
	populating initrd to rootfs... done.
	populating extlinux.conf.emmc to rootfs... done.
	populating /home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/kernel/dtb/tegra186-quill-p3310-1000-c03-00-base.dtb to rootfs... done.
Making Boot image... done.
Existing sosfile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/mb1_recovery_prod.bin) reused.
copying tegraboot(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/nvtboot.bin)... done.
Existing mb2blfile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/nvtboot_recovery.bin) reused.
Existing mtspreboot(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/preboot_d15_prod_cr.bin) reused.
Existing mts(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/mce_mts_d15_prod_cr.bin) reused.
Existing mb1file(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/mb1_prod.bin) reused.
Existing bpffile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/bpmp.bin) reused.
copying bpfdtbfile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/tegra186-a02-bpmp-quill-p3310-1000-c04-00-te770d-ucm2.dtb)... done.
Existing scefile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/camera-rtcpu-sce.bin) reused.
Existing spefile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/spe.bin) reused.
copying wb0boot(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/warmboot.bin)... done.
Existing tosfile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/tos.img) reused.
Existing eksfile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/eks.img) reused.
copying dtbfile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/kernel/dtb/tegra186-quill-p3310-1000-c03-00-base.dtb)... done.
Reusing existing system.img... 
Existing tbcfile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/cboot.bin) reused.
copying tbcdtbfile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/kernel/dtb/tegra186-quill-p3310-1000-c03-00-base.dtb)... done.
copying cfgfile(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/t186ref/cfg/flash_l4t_t186.xml) to flash.xml... done.
Existing flasher(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/nvtboot_recovery_cpu.bin) reused.
Existing flashapp(/home/cortexia/Downloads/Jetpack_sysimg_copy/64_TX2/Linux_for_Tegra/bootloader/tegraflash.py) reused.
* Updating [APP] with system.img *
./tegraflash.py --bl nvtboot_recovery_cpu.bin  --chip 0x18 --applet mb1_recovery_prod.bin --sdram_config P3310_A00_8GB_Samsung_8GB_lpddr4_204Mhz_A02_l4t.cfg --misc_config tegra186-mb1-bct-misc-si-l4t.cfg --pinmux_config tegra186-mb1-bct-pinmux-quill-p3310-1000-c03.cfg --pmic_config tegra186-mb1-bct-pmic-quill-p3310-1000-c04.cfg --pmc_config tegra186-mb1-bct-pad-quill-p3310-1000-c03.cfg --prod_config tegra186-mb1-bct-prod-quill-p3310-1000-c03.cfg --scr_config minimal_scr.cfg --scr_cold_boot_config mobile_scr.cfg --br_cmd_config tegra186-mb1-bct-bootrom-quill-p3310-1000-c03.cfg --dev_params emmc.cfg  --cfg  flash.xml --bins "mb2_bootloader nvtboot_recovery.bin; mts_preboot preboot_d15_prod_cr.bin; mts_bootpack mce_mts_d15_prod_cr.bin; bpmp_fw bpmp.bin; bpmp_fw_dtb tegra186-a02-bpmp-quill-p3310-1000-c04-00-te770d-ucm2.dtb; tlk tos.img; eks eks.img; bootloader_dtb tegra186-quill-p3310-1000-c03-00-base.dtb"  --cmd "write APP system.img; reboot"  
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.0089 ] Generating RCM messages
[   0.0097 ] tegrarcm_v2 --listrcm rcm_list.xml --chip 0x18 --download rcm mb1_recovery_prod.bin 0 0
[   0.0104 ] RCM 0 is saved as rcm_0.rcm
[   0.0107 ] RCM 1 is saved as rcm_1.rcm
[   0.0107 ] List of rcm files are saved in rcm_list.xml
[   0.0107 ] 
[   0.0107 ] Signing RCM messages
[   0.0114 ] tegrasign_v2 --key None --list rcm_list.xml --pubkeyhash pub_key.key
[   0.0121 ] Assuming zero filled SBK key
[   0.0150 ] 
[   0.0150 ] Copying signature to RCM mesages
[   0.0156 ] tegrarcm_v2 --chip 0x18 --updatesig rcm_list_signed.xml
[   0.0165 ] 
[   0.0165 ] Boot Rom communication
[   0.0172 ] tegrarcm_v2 --chip 0x18 --rcm rcm_list_signed.xml
[   0.0178 ] BootRom is not running
[   1.1843 ] 
[   1.1895 ] tegrarcm_v2 --isapplet
[   1.1900 ] Applet version 01.00.0000
[   1.5264 ] 
[   1.5295 ] tegrasign_v2 --key None --getmode mode.txt
[   1.5327 ] Assuming zero filled SBK key
[   1.5330 ] 
[   1.5331 ] Parsing partition layout
[   1.5377 ] tegraparser_v2 --pt flash.xml.tmp
[   1.5418 ] 
[   1.5419 ] Creating list of images to be signed
[   1.5450 ] tegrahost_v2 --chip 0x18 --partitionlayout flash.xml.bin --list images_list.xml zerosbk
[   1.5666 ] 
[   1.5667 ] Generating signatures
[   1.5675 ] tegrasign_v2 --key None --list images_list.xml --pubkeyhash pub_key.key
[   1.5681 ] Assuming zero filled SBK key
[   1.7567 ] 
[   1.7567 ] Reading BCT from device for further operations
[   1.7567 ] Generating blob
[   1.7575 ] tegrahost_v2 --align blob_nvtboot_recovery_cpu.bin
[   1.7581 ] 
[   1.7586 ] tegrahost_v2 --appendsigheader blob_nvtboot_recovery_cpu.bin zerosbk
[   1.7594 ] 
[   1.7602 ] tegrasign_v2 --key None --list blob_nvtboot_recovery_cpu_sigheader.bin_list.xml
[   1.7607 ] Assuming zero filled SBK key
[   1.7643 ] 
[   1.7651 ] tegrahost_v2 --updatesigheader blob_nvtboot_recovery_cpu_sigheader.bin.encrypt blob_nvtboot_recovery_cpu_sigheader.bin.hash zerosbk
[   1.7659 ] 
[   1.7665 ] tegrahost_v2 --align blob_nvtboot_recovery.bin
[   1.7671 ] 
[   1.7677 ] tegrahost_v2 --appendsigheader blob_nvtboot_recovery.bin zerosbk
[   1.7684 ] 
[   1.7691 ] tegrasign_v2 --key None --list blob_nvtboot_recovery_sigheader.bin_list.xml
[   1.7697 ] Assuming zero filled SBK key
[   1.7713 ] 
[   1.7720 ] tegrahost_v2 --updatesigheader blob_nvtboot_recovery_sigheader.bin.encrypt blob_nvtboot_recovery_sigheader.bin.hash zerosbk
[   1.7727 ] 
[   1.7734 ] tegrahost_v2 --align blob_preboot_d15_prod_cr.bin
[   1.7740 ] 
[   1.7745 ] tegrahost_v2 --appendsigheader blob_preboot_d15_prod_cr.bin zerosbk
[   1.7752 ] 
[   1.7758 ] tegrasign_v2 --key None --list blob_preboot_d15_prod_cr_sigheader.bin_list.xml
[   1.7763 ] Assuming zero filled SBK key
[   1.7776 ] 
[   1.7783 ] tegrahost_v2 --updatesigheader blob_preboot_d15_prod_cr_sigheader.bin.encrypt blob_preboot_d15_prod_cr_sigheader.bin.hash zerosbk
[   1.7790 ] 
[   1.7796 ] tegrahost_v2 --align blob_mce_mts_d15_prod_cr.bin
[   1.7801 ] 
[   1.7806 ] tegrahost_v2 --appendsigheader blob_mce_mts_d15_prod_cr.bin zerosbk
[   1.7836 ] 
[   1.7845 ] tegrasign_v2 --key None --list blob_mce_mts_d15_prod_cr_sigheader.bin_list.xml
[   1.7850 ] Assuming zero filled SBK key
[   1.8237 ] 
[   1.8248 ] tegrahost_v2 --updatesigheader blob_mce_mts_d15_prod_cr_sigheader.bin.encrypt blob_mce_mts_d15_prod_cr_sigheader.bin.hash zerosbk
[   1.8272 ] 
[   1.8280 ] tegrahost_v2 --align blob_bpmp.bin
[   1.8285 ] 
[   1.8291 ] tegrahost_v2 --appendsigheader blob_bpmp.bin zerosbk
[   1.8302 ] 
[   1.8309 ] tegrasign_v2 --key None --list blob_bpmp_sigheader.bin_list.xml
[   1.8314 ] Assuming zero filled SBK key
[   1.8413 ] 
[   1.8425 ] tegrahost_v2 --updatesigheader blob_bpmp_sigheader.bin.encrypt blob_bpmp_sigheader.bin.hash zerosbk
[   1.8435 ] 
[   1.8442 ] tegrahost_v2 --align blob_tegra186-a02-bpmp-quill-p3310-1000-c04-00-te770d-ucm2.dtb
[   1.8447 ] 
[   1.8453 ] tegrahost_v2 --appendsigheader blob_tegra186-a02-bpmp-quill-p3310-1000-c04-00-te770d-ucm2.dtb zerosbk
[   1.8463 ] 
[   1.8470 ] tegrasign_v2 --key None --list blob_tegra186-a02-bpmp-quill-p3310-1000-c04-00-te770d-ucm2_sigheader.dtb_list.xml
[   1.8474 ] Assuming zero filled SBK key
[   1.8561 ] 
[   1.8569 ] tegrahost_v2 --updatesigheader blob_tegra186-a02-bpmp-quill-p3310-1000-c04-00-te770d-ucm2_sigheader.dtb.encrypt blob_tegra186-a02-bpmp-quill-p3310-1000-c04-00-te770d-ucm2_sigheader.dtb.hash zerosbk
[   1.8578 ] 
[   1.8584 ] tegrahost_v2 --align blob_tos.img
[   1.8589 ] 
[   1.8594 ] tegrahost_v2 --appendsigheader blob_tos.img zerosbk
[   1.8601 ] 
[   1.8607 ] tegrasign_v2 --key None --list blob_tos_sigheader.img_list.xml
[   1.8612 ] Assuming zero filled SBK key
[   1.8626 ] 
[   1.8634 ] tegrahost_v2 --updatesigheader blob_tos_sigheader.img.encrypt blob_tos_sigheader.img.hash zerosbk
[   1.8641 ] 
[   1.8647 ] tegrahost_v2 --align blob_eks.img
[   1.8652 ] 
[   1.8657 ] tegrahost_v2 --appendsigheader blob_eks.img zerosbk
[   1.8662 ] 
[   1.8669 ] tegrasign_v2 --key None --list blob_eks_sigheader.img_list.xml
[   1.8673 ] Assuming zero filled SBK key
[   1.8674 ] 
[   1.8681 ] tegrahost_v2 --updatesigheader blob_eks_sigheader.img.encrypt blob_eks_sigheader.img.hash zerosbk
[   1.8687 ] 
[   1.8693 ] tegrahost_v2 --align blob_tegra186-quill-p3310-1000-c03-00-base.dtb
[   1.8698 ] 
[   1.8703 ] tegrahost_v2 --appendsigheader blob_tegra186-quill-p3310-1000-c03-00-base.dtb zerosbk
[   1.8711 ] 
[   1.8718 ] tegrasign_v2 --key None --list blob_tegra186-quill-p3310-1000-c03-00-base_sigheader.dtb_list.xml
[   1.8723 ] Assuming zero filled SBK key
[   1.8776 ] 
[   1.8783 ] tegrahost_v2 --updatesigheader blob_tegra186-quill-p3310-1000-c03-00-base_sigheader.dtb.encrypt blob_tegra186-quill-p3310-1000-c03-00-base_sigheader.dtb.hash zerosbk
[   1.8792 ] 
[   1.8798 ] tegrahost_v2 --generateblob blob.xml blob.bin
[   1.8803 ] number of images in blob are 9
[   1.8807 ] blobsize is 3749384
[   1.8808 ] Added binary blob_nvtboot_recovery_cpu_sigheader.bin.encrypt of size 190048
[   1.8820 ] Added binary blob_nvtboot_recovery_sigheader.bin.encrypt of size 79600
[   1.8822 ] Added binary blob_preboot_d15_prod_cr_sigheader.bin.encrypt of size 63024
[   1.8824 ] Added binary blob_mce_mts_d15_prod_cr_sigheader.bin.encrypt of size 2076832
[   1.8829 ] Added binary blob_bpmp_sigheader.bin.encrypt of size 529440
[   1.8833 ] Added binary blob_tegra186-a02-bpmp-quill-p3310-1000-c04-00-te770d-ucm2_sigheader.dtb.encrypt of size 466160
[   1.8836 ] Added binary blob_tos_sigheader.img.encrypt of size 62976
[   1.8838 ] Added binary blob_eks_sigheader.img.encrypt of size 1488
[   1.8840 ] Added binary blob_tegra186-quill-p3310-1000-c03-00-base_sigheader.dtb.encrypt of size 279664
[   1.8850 ] 
[   1.8851 ] Sending bootloader and pre-requisite binaries
[   1.8857 ] tegrarcm_v2 --download blob blob.bin
[   1.8863 ] Applet version 01.00.0000
[   2.2227 ] Sending blob
[   2.2229 ] 000000002010000d: Failed to fetch load address
[   2.9224 ] 
Error: Return value 13
Command tegrarcm_v2 --download blob blob.bin
Failed to flash/read t186ref.

To clarify, a new module needs a full flash. Everything is missing on a new module…if you look at a working module and run “sudo gdisk -l /dev/mmcblk0”, then you will see many partitions. 100% of that content is missing on a module when it doesn’t come with the dev kit carrier board (and that content has to be added…merely restoring the rootfs partition won’t put in the other content). A full flash is needed for that case.

It is possible that a full flash can start with your saved clone image though…a full flash does not need to use a brand new default root image…instead you can place your image at “bootloader/system.img”, and use the “-r” option to the flash command and it should do the right thing. The flash software won’t care…and the flash will be somewhat faster since it isn’t generating nearly 30GB of file image (although if you put in the raw image the actual flash will be longer due to communications time versus the smaller sparse image).

Now if it happens that the default image size is for some reason smaller than the image you use, then perhaps there might be a need to also specify the “-S” option for size, but generally speaking I’d just flash with the “-r” option and nothing else when “bootloader/system.img” is in place.

Yes, as per comment from linuxdev, I am also wondering if you flash anything on those “new” TX2 before trying to use the backup image.

According to your comment,

So I decided to make a new installation from scratch with Jetpack 3.3 on the "new" TX2. this works fine and I made a new backup image with the same command as above. <b>But when I tried to flash some others "new" TX2 with this new backup image the same way as before I run into the same issue.</b>

What we want to know is if those “new” TX2 in the bold sentences are totally fresh (out-of-box) or not?
Did you flash anything on those TX2 before?

That is

TX2-A -> where you fetch out the back up system image.

new TX2->TX2-B
new TX2->TX2-C

Were TX2-B and TX2-C flashed by jetpack3.3 before?

I try to be more specific for this test I have 5 TX2 and I made the following operations in the order top-down all done with jetpakc 3.3:

  • TX2-Old-A: where I made the old-backup from
  • TX2-New-A: try to flash with old-backup (doesn’t work)
  • TX2-New-B: try to flash with old-backup to verify that the problem wasn’t from TX2-New-A (doesn’t work)
  • TX2-New-B: new flash with jetpack from scratch and installed my thing then made a new-backup to flash other new TX2
  • TX2-New-A: try to flash with new-backup (doesn’t work)
  • TX2-New-C: try to flash with new-backup (never flashed before doesn’t work)
  • TX2-Old-B: flash with new-backup (was flashed before and works fine)

Hi marc.schnaebele,

I totally understand your test. What we want to know is whether your TX2-NEW A and TX2-NEW C have ever been flashed with Jetpack or not? or you just take it out of box and directly copy the backup image from New-B to them?

TX2-New-A was out of the box and never flashed before when trying to flash it with old-backup from TX2-Old-A
TX2-New-C were out of the box and never flashed before when trying to flash it with new-backup from TX2-New-B

No backup can ever be restored to a unit which has not been previously flashed with the same release. No new module (unlike a dev kit) will have ever had any initial content…all content will be missing. It is possible to do a fresh full flash using the clone (if and only if the clone is from the same release being flashed), and thus combine a full flash with adding the backup clone (this would essentially do a full flash, and then copy the clone in place of the generated basic root file system).


You have to do full flash with Jetpack on NEW-A,C at least once before installing any backup image from NEW-B.

Hello guys,

We are trying to solve the same question.

Is it possible to do a full flash with our Linux image (modified DTB and some installed software and drivers) directly on an empty Jetson? These Jetsons were purchased separately, without devkit.

If we used ‘flash.sh’ script in our old Jetsons to clone an image, the clonning procces works well (these Jetsons were flashed with Jetpack in the past). But now we will try to flash new empty Jetsons, and we want to know if there is a quick alternative to the following procces:

-Install full L4T with Jetpack
-Clone our image with script flash.sh


-Install, with Jetpack or other tool, directly our Linux image

Thanks in advance!

Some points which might help clarify:

  • The root filesystem of one release generally won't work with another release unless it is just a patch. For example, R28.1 and R28.2 and R32.1 are all incompatible for direct rootfs use. R28.2 and R28.2.1 are compatible for rootfs.
  • There are many partitions which are required for boot, and so a new system requires more than a rootfs. Many other partitions are needed.
  • A normal full flash creates an image from the "Linux_for_Tegra/rootfs/" content, which in turn is the sample rootfs plus NVIDIA-specific drivers (via "sudo apply_binaries.sh"). Flash adds some configuration-dependent "/boot" content, but otherwise is verbatim to "rootfs/".
  • If you flash on command line, but put your rootfs content into "rootfs/", then other than the boot related files this is the content you will get (don't expect kernel or device tree to match...those can be put in other directories and then those too will match, but this is from "bootloader/" and "kernel/" content. You would have to be certain you don't overwrite that content with the sample rootfs. Running apply_binaries.sh again would be harmless.
  • You can completely skip the generation of a rootfs image if you wish, and use a preexisting image. Simply place a clone or other ext4 image at "bootloader/system.img".
  • The "bootloader/system.img" can be either a non-mountable "sparse" ext4 filesystem, or a mountable "raw" filesystem. Flash does not care, and the TX2 works with either. "Raw" just takes longer to flash, but is something you can edit later.
  • You can produce a sparse image from a raw image with the mksparse program using NULL fill.
  • A clone gives you both the ".img" (sparse) clone and the ".img.raw" (raw) images. I throw away the sparse image since it can only be used for flash and nothing else.
  • When you flash with JetPack or SDK Manager, the downloading, unpacking of rootfs, and running "sudo apply_binaries.sh" is done for you. If you are preserving customizations, then you probably want to stick to command line.
  • Command line use of flash.sh allows scripting and other options, such as using the existing image but still flashing the other required non-rootfs content. If you've cloned, then you've already worked with flash.sh.
  • Some content is signed, and so using flash.sh to add content also signs.