I’m curious if anyone has tried to build a BalenaDash type app for the Jetson Nano. I’ve had some things the Raspberry Pi’s just don’t play out smoothly and was curious if the Jetson Nano might have any better luck.
I’ve had an ask around and nobody at Balena has tried it, but there was certainly some interest if you can make it work! One suggestion I’ve been told to pass along is first trying to run chrome with the --egl
flag to see if it can actually utilise the GPU.
Hi,
based on my experience with Jetson Nano, I don’t think that adding --egl / --use-gl=egl
flag will help here. NVIDIA provides NVIDIA JetPack SDK, which can either download DEB packages & drivers & configurations or prepare & flash the OS for you. The are two problems:
- you/we are not allowed to redistribute due to the license,
- you can’t use this prepared OS directly with balenaCloud.
But you can prepare your own image.
JetPack SDK
Download
- Register at NVIDIA developers portal
- Download NVIDIA JetPack SDK
- Launch SDK manager, sign in, select packages and download them (Linux required or VMware Fusion running Linux if you’re on a Mac)
- If everything goes well, all packages & drivers are in the
~/Downloads/nvidia/sdkm_downloads
folder
Prepare for Dockerfile
There’s a lot of files in the sdkm_downloads
folder and you don’t need all of them. You have to write a script, like this one, which can extract what you need and place it in some folder. Check this part mainly. You’ll need:
Jetson-210_Linux_R32.1.0_aarch64.tbz2/Linux_for_Tegra/nv_tegra/config.tbz2
Jetson-210_Linux_R32.1.0_aarch64.tbz2/Linux_for_Tegra/nv_tegra/nvidia_drivers.tbz2
Install
Sample Dockerfile. Minimised version:
# NVIDIA JetPack SDK & drivers (1.7GB)
ADD nvidia /usr/src/app/nvidia
# Install NVIDIA JetPack SDK & drivers & toolchain
RUN \
tar xjf nvidia/nvidia_drivers.tbz2 -C / && \
tar xjf nvidia/config.tbz2 -C / --exclude=etc/hosts --exclude=etc/hostname && \
cp /usr/lib/aarch64-linux-gnu/tegra-egl/nvidia.json /usr/share/glvnd/egl_vendor.d/10_nvidia.json && \
echo "/usr/lib/aarch64-linux-gnu/tegra" > /etc/ld.so.conf.d/nvidia-tegra.conf && \
echo "/usr/lib/aarch64-linux-gnu/tegra-egl" > /etc/ld.so.conf.d/nvidia-tegra-egl.conf && \
ldconfig && \
rm -rf nvidia
What it does?
- Extracts drivers
- Extracts configurations
- Tells the system to prefer NVIDIA EGL instead of the MESA
- Adds
/usr/lib/aarch64-linux-gnu/tegra
&/usr/lib/aarch64-linux-gnu/tegra-egl
to the libraries paths
SYS_RAWIO
Not sure if you really need this step for your use case, but it won’t hurt. I had to use docker-compose.yml
file, because SYS_RAWIO
capability was required. It looked like it’s working, but it wasn’t till I did add it. Here’s an example. IIRC it was because of the camera, you probably don’t need it, but mentioning it anyway.
Other examples
There’s nano-sample-app. I used this project as a foundation for my nanny-bot & this post.
I think that now is the time to test the --use-gl=egl
/ --egl
flags.
Thanks for the feedback! I had ordered a Jetson Nano to experiment with. I like to think I’m a little bit saavy with some of these things some of it may be a bit above my skill level. I’ll post back if I figure anything out.