Flashing Jetson Nano Development Kit 4GB - C100 OKDO model#

This chapter describes how to re-flash the Jetson Nano 4GB Developer Kit commercialized by OKDO under the name “C100”.

What you will need

  • Completed Dependencies Installation with Ubuntu running natively.

  • An NVIDIA Jetson Nano Developer Kit (4 GB) C100 model.

  • A power source for the Jetson Nano.

  • A Micro USB cable with data connections that can connect to your computer or a Micro USB to USB type A adapter.

  • A method for shorting pins (e.g., jumper, F-F Dupont cable, stripped wire, paper clip, screwdriver, etc.).

  • (optional) An HDMI cable and screen.

  • (optional) A serial cable that can connect to your computer (to see detailed UART logs).

What you will get

  • A (re-)flashed NVIDIA Jetson Nano Developer Kit (4 GB) C100 model.

Warning

This procedure is only necessary if you have a C100 Okdo Jetson Nano 4GB development kit. Do not perform otherwise. If uncertain, follow Troubleshooting or reach out to the Duckietown team.

Overview#

The instructions below have been tested with JP4.6.6 with the Duckiebot image v1.4.6 and v2.0.8. Following this guide, the root partition from the eMMC will now point to the SD card while all other partitions remain on the eMMC.

The reason for this modification is that the C100 uses the production version of the NVIDIA Jetson Nano module, which uses eMMC instead of an SD card interface.

Prerequisites#

  • Host computer running Linux (Ubuntu 18.04 or newer recommended)

  • Docker installed on the host

  • Power supply for the Jetson Nano

  • USB cable (micro USB to connect to the C100)

  • Display, keyboard, mouse, and Ethernet cable for initial setup

Step A: Flash the C100 using Dockerized Jetson Flasher#

1. Clone the flasher repository:#

git clone https://github.com/duckietown/dt-jetson-nano-flasher
cd dt-jetson-nano-flasher

2. Download the Linux4Tegra BSP and image:#

mkdir -p ~/Nvidia && cd ~/Nvidia
wget https://developer.nvidia.com/downloads/embedded/l4t/r32_release_v7.6/t210/jetson-210_linux_r32.7.6_aarch64.tbz2
wget https://developer.nvidia.com/downloads/embedded/l4t/r32_release_v7.6/t210/tegra_linux_sample-root-filesystem_r32.7.6_aarch64.tbz2

3. Build the Docker image:#

cd dt-jetson-nano-flasher
docker-compose build

4. Put the Jetson Nano into recovery mode:#

  • Power off the Jetson Nano

  • Short the FC REC and GND pins with a jumper

  • Power on the Jetson Nano (e.g., by using a HUT, as shown in A Jetson Nano being powered through a HUT’s 5VRASPI port.)

  • Connect the micro USB cable from your host to the C100. Make sure it is a data cable.

  • Verify the device is in recovery mode: lsusb | grep NVIDIA (should show “NVIDIA Corp. APX”)

5. Run the flashing container:#

docker-compose run --rm ubuntu

6. Inside the container, prepare and flash:#

# Extract the BSP
cd /Nvidia
apt-get update
apt-get install -y lbzip2 sudo python3
sudo apt-get install libxml2-utils
tar xf jetson-210_linux_r32.7.6_aarch64.tbz2
cd Linux_for_Tegra/rootfs
tar xf /Nvidia/tegra_linux_sample-root-filesystem_r32.7.6_aarch64.tbz2
cd ..

# Apply binaries
./apply_binaries.sh

# Flash the device (use jetson-nano-emmc for production modules)
sudo ./flash.sh jetson-nano-emmc mmcblk0p1

The flashing process will take several minutes. Once complete, the Nano will reboot into Ubuntu.

Step B: Boot to Desktop#

Unplug the C100 from the host and connect a display, keyboard, mouse, and Ethernet cable. Make sure to remove the jumper shorting the FC REC and GND pins. Power up the device and follow the onscreen setup guide until you reach the desktop.

Step C: Configure SD Card Interface and Root Path#

Perform the following steps on the Jetson Nano C100 (all commands are executed in the shell). Total time: approximately 15 minutes.

Enable SD Card Interface#

First, we need to enable the SD card interface using the following commands:

1. Clone the device tree overlays repository:#

git clone https://github.com/duckietown/seeed-linux-dtoverlays.git

2. Configure and build the overlay:#

cd seeed-linux-dtoverlays
sed -i \
's#compatible = JETSON_COMPATIBLE;#compatible = "nvidia,p3449-0000-b00+p3448-0002-b00", "nvidia,jetson-nano", "nvidia,tegra210";#' \ 
overlays/jetsonnano/jetson-sdmmc-overlay.dts
make overlays/jetsonnano/jetson-sdmmc-overlay.dtbo
sudo cp overlays/jetsonnano/jetson-sdmmc-overlay.dtbo /boot/

3. Implement high-speed SD card stability fix#

# Reduce the maximum SD clock and disable unstable UHS modes
sed -i 's/max-clk-limit = <48000000>;/max-clk-limit = <25000000>;\
\t\tuhs-mask = <0x14>;/' \
 overlays/jetsonnano/jetson-sdmmc-overlay.dts

4. Configure the hardware module:#

cd /boot/
sudo /opt/nvidia/jetson-io/config-by-hardware.py -l

This should display a list of hardware modules. Verify that reComputer sdmmc is present in the list.

5. Enable the SD card module:#

sudo /opt/nvidia/jetson-io/config-by-hardware.py -n "reComputer sdmmc"

6. Reboot the system:#

sudo reboot

Modify Root Path Configuration#

After rebooting, we need to modify the root path to point to the SD card:

  1. Edit the extlinux configuration file:

sudo sed -i \
's#root=/dev/mmcblk0p1#root=/dev/mmcblk1p1#g' \
/boot/extlinux/extlinux.conf

Verify both entries point to root/dev/mmcblk1p1 with:

grep 'root=/dev/mmcblk' \
/boot/extlinux/extlinux.conf

Step D: Use SD Card with Duckiebot Image#

Now you can insert your SD card flashed with the Duckiebot image and use it normally.

For detailed instructions on setting up your Duckiebot, refer to the Duckiebot setup instructions.