The goal of this document is to aid in setting up a docker container that can flash Nvidia Jetson devices.
Additional Nvidia resources and documentation can be found here.
On the host system, we need some modules loaded into the kernel that our container will need to work. It's best to use a debian based distro for our contianer to simplify things. My end goal was just to not be running things on a system that was released in 2016. So I did this on Ubuntu 20.04lts.
apt install -y binfmt-support qemu-user-static
We're also assuming you already have docker installed, but if you don't, here's how to install docker on Ubuntu.
apt install docker.io
The sdkmanager can be downloaded here.
You want to download the sdkmanager debian package to the host system and the provided Dockerfile
in the same directory. You want to replace sdkmanager_1.3.1-7110_amd64.deb
in the Dockerfile
with the current .deb file name.
This file will end up being used inside the container image when we build it.
With our Dockerfile
and sdkmanager_*_amd64.deb
file in the same directory. We will run this command to build the image. It will take a while.
docker build -t jetpack-sdk .
If the build was successful, you'll see a tagged image called jetpack-sdk
.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jetpack-sdk latest 81ac43286fa0 41 hours ago 1.36GB
If it failed, we will have an untagged image and need to go figure out why:
<none> <none> 349c7116b0a9 42 hours ago 1.36GB
The way I've been using this is completely manual. The provided Dockerfile
is setup to launch a shell for running sdkmanager
commands.
However if you want to do automation type stuff, everything you need is inside the container and you can spend some time learning the in's and out's of docker to figure that out here.
To launch the container with neccessary permissions, here's the neccessary docker run
command.
docker run -it --rm --name=jetpack-sdk --rm=true --net=host --ipc host --privileged --cap-add SYS_ADMIN --volume="/dev/bus/usb:/dev/bus/usb" jetpack-sdk
You will be placed inside a bash
shell where you have the entire SDK at your disposal. You can run sdkmanager
commands, or if you want to use build tools and make your own images, that can be done in the container too with some work to setup any additional build tools.
If you're using the sdkmanager
, if can be used to help you stage commands. The flag --staylogin true
is recommended to be added to commands so you don't have keep logging into the Nvidia site during a session. Upon running sdkmanager
commands, you will have to click the Nvidia link to open a browser and login.
sdkmanager --cli install --logintype devzone --staylogin true --query interactive
An example command that I built from using the interactive mode:
sdkmanager --cli install --logintype devzone --staylogin true --product Jetson --host --target P2888-0004 --targetos Linux --version 4.4.1 --flash all --license accept
Something to note, the provided command it gave me was P2888-0001
, but upon reviewing the sdkmanager logs in ~/.nvsdk
in the container, I found that my target device was actually supposed to be P2888-0004
.