Browser/Dashboard for the Jetson Nano

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.