Upgrading from Jetpack 4.2 to Jetpack 4.4 without re-flashing

Hello All,

Current system:

  • NVIDIA Jetson NANO/TX1
    • Jetpack 4.2.2 [L4T 32.2.1]
    • CUDA GPU architecture 5.3
  • Libraries:
    • CUDA 10.0.326
    • cuDNN 7.5.0.56-1+cuda10.0
    • TensorRT 5.1.6.1-1+cuda10.0
    • Visionworks 1.6.0.500n
    • OpenCV 3.3.1 compiled CUDA: NO
  • Jetson Performance: inactive

I would like to upgrade from Jetpack 4.2 to Jetpack 4.4 but the documentation leads me to believe that I can only perform this by re-flashing my current system. I have a lot of time invested in software on my current system and this makes me believe that I will lose it all if I re-flash. Am I missing something? Thanks in advance!

Hi,

Then please use clone before doing the upgrade. The OTA supports start from jp4.3.

https://elinux.org/Jetson/Clone

Thank you for responding so quickly. Based on the article it sounds like I backup the file system with the procedure recommended, then follow the procedure to re-flash with the latest Jetpack. And then reload the file system that I backed up previously based on the article mentioned. I am a little new to this so I really appreciate the help!

Is this Nano the dev kit version (using SD card)? Or is it the eMMC memory version?

SD card version

For SD, no need to clone through the Nano. Do you have an SD card reader on your Linux host PC?

Actually I have one on my MAC. I have been able to backup the SD Card. But I am a little unclear about how to restore the files without overwriting the new Jetpack files with my old files. I can try and backup the home directory re-flash the SDCARD with the latest stuff and then copy my home directory back. But I am concerned that I will break the software in my home directory. This approach used to cause all kinds of issues with Windows systems.

Mac is a lot like Linux on the command line (both have a *NIX history), but I have had very little contact with a Mac, so there are details I won’t know. The steps should work from a Mac, but you might also end up just doing this directly on the running Nano. Let me start by asking what part of the SD card is it which contains what you want? Is it entirely in “/home”? Is it also in “/usr/local”? Knowing what you want to preserve helps. Once you know that it becomes possible to talk about how to restore.

First of all, thank you for responding! I am working with the deep stream-services-library and that is on GitHub so I can easily load that from GitHub after re-flash. But I have also configured my environment to share the home directory on my network, to allow for a VNC connection, I have worked through some of the PyTorch tutorials and that required some configuration. If all of the configuration files are stored in my home directory then I guess I could just use tar and backup my home directory. But I am not sure if that is the case. My Linux knowledge is self taught so I have big gaps. Ideally, I could just use something like sudo apt-get and upgrade to Jetson 4.4. But from my reading, I believe that since I am at Jetson 4.2 that is not an option.

You are correct about not being able to directly change from the JetPack4.2 (L4T R32.1) to any newer JetPack (L4T R32.1 did not have that option). I think what you need to do is find out if your Mac can loopback mount a file with a partition in it. I’ve rarely ever touched a Mac, so I don’t know…even if the tools I am used to do not exist on a Mac, chances are that some equivalent exists, but I would have no way to know what that is.

I do know that Macs have a “dd” tool, but I couldn’t tell you if that is in a default path somewhere, I couldn’t tell you if it requires sudo, so on. However, on the command line, first test the “which” command simply by:
which which
…then, if it exists:
which dd
…then, if that exists:
which losetup

If you have dd, then it implies you can save a partition or an entire SD card as a file. If you save the rootfs (“APP”) partition, and you can use losetup, then it implies you can access that file as if it is a partition and mount it somewhere. The biggest issue you might have is that I doubt Mac supports all of Linux permissions, at least on its native filesystem type, but it might since it is sort of *NIX-like. The partitions copied as files and covered by loopback implies you are actually storing the ext4 partition itself, and not just the files. The trick to any sort of backup and restore on your Mac is going to be one of whether permissions and filesystem structure can be maintained. I am just doing a lot of guessing, but if you have the dd copy (or the unmodified original SD card), then you can do this on Linux later if you cannot do this on Mac.

Even so, a VM for Linux would probably be better than trying to do everything on the Mac, but you might be able to skip a VM for part of this (and I never recommend VMs, this is kind of a rare combination).

Do you flash with a Linux VM? Does your Mac have dd? Does your Mac have losetup?

1 Like

macOS can’t loopback mount any Linux filesystem, it doesn’t have losetup nor does it support ext4, etc. There is a FUSE port that might get you some/all of the way there but that’s likely far more trouble than installing VirtualBox and a Linux VM…

To @sscsmatrix, for your host configuration in /etc I recommend you look at keeping it in source control (SCM/VCS), e.g. git, using something like etckeeper (some"getting started" guides: tecmint, ubuntu, archlinux). This way you’ll have an ongoing record of all important system config changes, and if you’re sufficiently religious about good commit messages, a good log that can remind you why you made those changes! You could also include your project stuff in the same repo, but that’s very likely better to keep in a separate repo.

etckeeper keeps track of all host config files, not just the ones you’ve customised. It works best when starting from a “clean” install, as you can then readily determine which files you’ve modified vs. those that came with the base install. But, it is possible to use it to port existing host config over to a new host.

Something like: install etckeeper on your current system, check in all existing config and push it to some external repo (e.g. another computer, or Bitbucket/etc - beware of keeping it private if you care about that); then install the new SDK (ideally to a new sdcard, just in case), install etckeeper again and checkin the initial unsullied 4.4 config. Then and pull down the old 4.2 repo to say /tmp/. You’ll then need to selectively merge your modified files to their appropriate places on the new host. Once that is done, commit the changes via etckeeper and you’ll then be all set for the next update.

This will also help recover should your sdcard fail.

Thanks for the recommendation. I will look into etckeeper. I have also decided to go with another sdcard. That seems like good advice and it will not break my budget. Since I have the important project stuff in Github, I am not that worried about losing anything important, just my time. At least I know that I cannot just “sudo apt-get” with Jetpack 4.2.

I used a linux VM to initially get the Jetson Nano running. It seemed to work okay with the MAC. As I mentioned to ben.l below, I have decided to go with a new sdcard and worst case I will have to spend time re-configuring my environment again. Thanks for your suggestions it is very helpful having another person validate some of my assumptions and recommend options.