We are experiencing the following issue after backing up APP partition from Xavier NX DevKit-SD and trying to upload to Xavier NX DevKit-EMMC.
- back up the image from devkit-SD
sudo ./flash.sh -r -k APP -G "/tmp/backup.img" jetson-xavier-nx-devkit mmcblk0p1
cp backup.img bootloader/system.img
- restore the image to devkit-EMMC
sudo ./flash.sh jetson-xavier-nx-devkit-emmc mmcblk0p1
gets stuck on this screen:
a) is it theoretically possible to do this kind of clone?
b) any ideas on the error?
You don’t need to use JetPack/SDKM to clone an SD card version. Just use
dd on the host for the APP (rootfs) partition of the SD card. For example, if on the host and the SD card partition from that host is “
sudo dd if=/dev/sdb1 of=my_backup.img bs=1M
(the larger block size is just to speed it up, you could leave it out and use the default
Incidentally, some of the SD card content is not compatible as a direct replacement for the rootfs/APP partition on the eMMC model. Not sure, but possibly you could loopback mount the clone on the “
Linux_for_Tegra/rootfs/” partition, and flash from that. During the flash some firmware and kernel and device tree files would be modified for whatever is mounted on “
rootfs/”, so you’d want to keep a reference copy of the clone somewhere else and not allow the original to be edited.
With that in place I would use command line to flash, and not SDKM (you wouldn’t want SDKM to download and install new rootfs content on top of the “
rootfs/” loopback device…actual flash only installs certain firmware and kernel content, whereas SDKM can install the entire “
rootfs/”). An example after the loopback clone is mounted and the Nano eMMC model is attached with micro-B USB in recovery mode:
sudo ./flash.sh jetson-nano-emmc mmcblk0p1
You should never use JetPack to clone or perform any task other than a straight new install. Too many ways for things to go wrong. To get the rootfs off the SDcard, I’d use rsync rather than dd. With rsync you get the files but with dd you get the whole partition which is probably much bigger than the files actually in it. Using rsync also allows you to customize the filesystem more easily before flashing it…
# create a new rootfs directory
$ sudo mkdir rootfs-sdcard
# mount the sdcard someplace
$ sudo mkdir /mnt/sdb1
$ sudo mount /dev/sdb1 /mnt/sdb1
# Copy the contents
$ sudo rsync -vaHAx /mnt/sdb1/. ./rootfs-sdcard/
# Play with the the contents of rootfs-sdcard as you see fit.
# Update etc/hostname to change the hostname, update etc/passwd, etc.
# Move existing rootfs out of the way and rename rootfs-sdcard
$ sudo mv rootfs rootfs-stock
$ sudo mv rootfs-sdcard rootfs
# flash it
$ sudo ./flash.sh jetson-nano-emmc mmcblk0p1
As @linuxdev said, things like the dtb and the boot/extlinux.conf file are different between the SDcard and emmc versions but they should be taken care of by flash.sh