In the last Behind The Scenes blog post, I went over some of the issues I was having with the NVIDIA SDK Manager. Let me tell you a story.
Back in 2014 I bought a desktop PC specifically to use what was then the JetPack installer for Jetsons. The JetPack installer eventually became the SDK Manager. A few laters, I bought a laptop machine with a NVIDIA graphics card for the same task. Both machines are dual boot, Windows and variations of Ubuntu over the years.
There have been name changes over the years. What was originally command line versions of installers became the GUI JetPack installer. The JetPack installer purpose is to take the fuss and muss out of Jetson installations.
As the Jetsons have become more capable, the amount of tooling to prepare the Jetson for use has grown significantly. Part of this is to support professional and industrial use of the Jetson. This includes features such as Secure Boot, redundant rootfs, Over The Air (OTA) updates, multi-device flashing to name a few.
You can think about the installation package as two parts. The first part is Jetson Linux, which is an Ubuntu Linux. NVIDIA modifies Ubuntu to support each Jetson board. This was previously Linux 4 Tegra (L4T). You will see this terminology still in use, as the Jetson Linux name change is fairly recent. Each Jetson Linux release consists of a Board Support Package (BSP), along with a sample root file system (rootfs).
The BSP consists of tools to flash the Jetson modules, the Jetson Linux Kernel, Jetson Linux toolchain for development, bootloader and device trees for the Jetson models.
The second part is what is now JetPack. JetPack consists of all of the specific Jetson libraries. Along with various developer tools, this includes:
- Deep Learning (TensorRT, cuDNN)
- Computer Vision (VPI, OpenCV)
- Accelerated Computing (cuBLAS, cuFFT)
- Graphics (Vulkan, OpenGL ES, X11, Wayland and libDRM)
- Multimedia (GStreamer, V4l2 Library, Image Processing, Media Codecs)
- Sensors (Camera support with LibArgus and V4L2, SPE RTOS, PCIe, Ethernet, SPI, CAN, I2S)
There’s also the documentation and sample code. All in all, a lot of stuff as we say.
The New Way
One of the changes over the last couple of years is the ability to pull the JetPack libraries directly from an NVIDIA repository. That means that we do not have to rely on a host machine to install JetPack packages from release to release. The basic idea here is that for most use cases the Jetson can be updated through Ubuntu’s Advanced Packaging Tool (APT). This falls in line with how Ubuntu handles the majority of software updates.
With that said, there are still times when people may need to flash the Jetson from scratch. There are certain boundaries or configurations where boot firmware changes necessitate a new system configuration.
One of these is going from Jetson Linux 32.X to Jetson Linux 35.X. This is specific to the Jetson Orin, Xavier and TX2 modules. The flash memory where the boot loader resides changes to support a different boot loader than previous generations.
On the Jetson Orin and Xaviers, there is support for flashing external memory from the host as the rootfs using a mechanism named initrd. For example, you can flash a NVMe SSD as the rootfs on a Jetson Xavier NX Developer Kit. This will flash the QSPI memory for the Jetson, and place the rootfs on the SSD. The extlinux.conf file will then tell the bootloader where the rootfs resides. That means that no SD card is needed to run the Xavier NX.
Using SDK Manager
A couple of years ago, JetsonHacks published an article Native Boot for Jetson Xaviers. There are a couple of scripts which allow you to flash Jetson Linux 32.6.1/JetPack 4.6 to the SSD and boot from it. When the NVIDIA SDK Manager later added the feature, the article noted the change. The article also notes that the recommended procedure is to use the SDK Manager for the task.
Recently I started working on a new project. I want my Jetson Xavier NX to boot from SSD. Simple, or so I thought. Upgrade the SDK Manager on my laptop, start it up and:
Try as I may, I could not get the laptop to work. I can’t tell if it’s on my side, or NVIDIA’s side. The end result: it no work. So …
I dusted off the old desktop, and upgraded it to Ubuntu 20.04. This is more of an undertaking than it first seems. The desktop was running 14.04. Since it is dual boot, I felt the “safest” way to upgrade was to do the upgrade dance. Ubuntu 14.04->16.04->18.04->20.04. Old slow machine, let’s just say it took some time. Eventually I was at the point where I had a running Ubuntu 20.04 system.
Let’s Make a Video
Since I was having trouble with the process, I felt it might be valuable to share the experience with others. So I started recording some videos. When I say videos, I’m on take number 5 currently. The first 4 failed the install. It takes about 20 minutes to prepare the Jetson files for flashing. I’ll let you know when I get to the point where an actual flash takes place. I think I’m getting close, but I’ve been thinking that for almost two weeks now and still no joy.
I really like the idea of the SDK Manager. I want it to work. However at the end of the day I don’t know who it’s for. If you’re a pro working on this, you’re better off learning how to use the flashing scripts in the BSP. The flashing scripts have the flexibility to configure the Jetsons any which way. All of the features are accessible, and it’s production ready. Granted, it is a command line interface and with all the options can be confusing. The major advantage is that once you figure it out, you can automate it.
The SDK Manager on the other hand has some quirks. It feels like it would be useful to the casual user. That may well be the case. However, it’s easy to hit the wall with it. Some of the user interface needs a day or two of attention to work correctly.
I think my take away at the end of this will be that if you’re a Jetson professional user, bite the bullet and learn the flashing tools. If you are unable to update directly from the APT repositories, people with less experience should consider the SDK Manager. This is most Jetson Nano users. Just a warning, there may be some pain awaiting. Just to remind you about pain time, here’s a Super Bowl commercial from 2003. Yes, Super Bowl commercials have been funny in the past:
Glad that you are taking the punches for all of us. I would love to be rid of the SD card. Looking forward to your successful video/tutorial.
Keep up the great work.
Me too! Thanks for reading!