How to flash AGX Orin DevKit with emulation into a bootable system?

I’ve been trying to get our AGX Orin Development Kit to run in emulated mode, where it emulates weaker Jetson hardware as explained in Emulation Flash Configurations — Jetson Linux Developer Guide documentation but I’m having a hard time getting it to work.

I have been able to successfully flash the DevKit with SDK Manager via a Docker image. This results in the DevKit running with its full power, with a full graphical Jetson Linux environment and all the Nvidia tools seem to work. As far as I can tell, however, the SDK Manager does not support these emulation images. Is this correct?

All documentation I’ve read about this emulation support points at flash.sh, which I have also tried, but haven’t gotten it to work. The script runs successfully, but when I try to boot the DevKit (when connected to a screen, keyboard and mouse), I see the Nvidia logo and BIOS (letting me choose boot device etc.) but then after that step I just get a black screen. Trying to get to TTY (via Ctrl + Alt + F1, F2 etc.) does nothing. Just a black screen. Also, when it’s connected to my host computer via the USB A-C cable I used for flashing, the Jetson DevKit does not show up on lsusb (unless I boot it into recovery mode).

I am a bit at a loss here. Am I missing something about flash.sh, where you are supposed to do something else in order to get a bootable, graphical system? Is it possible to flash emulation images via the SDK Manager?

Any guidance here is most welcome :)

Best regards
Martin

After some further messing about, I think I’ve solved it.

For anyone visiting from the future, here’s what I found out:
The OS requirements of SDK Manager seem to apply to flash.sh as well. If you, like me, are running a more modern OS on the host than what flash.sh supports, you can run flash.sh from the same Docker container as SDK Manager.

Assuming you have set up the SDK Manager’s Docker container as described in SDK Manager | NVIDIA Developer, giving the latest version the name “sdkmanager”, you can then do something like

sudo docker run -it \
--privileged -v /dev/bus/usb:/dev/bus/usb/ -v /dev:/dev -v /media/$USER:/media/nvidia:slave \
-v $HOME/nvidia:/nvidia \
--name nvidiasdkmanager --network host \
--entrypoint /bin/bash \
sdkmanager

This will boot you into bash inside the Docker container, with a folder called ~/nvidia on the host being mounted as /nvidia in the container. To this folder, you can download what you need for flash.sh (Jetson Linux Archive | NVIDIA Developer) and then run something like

export L4T_RELEASE_PACKAGE=Jetson_Linux_R35.3.1_aarch64.tbz2
export SAMPLE_FS_PACKAGE=Tegra_Linux_Sample-Root-Filesystem_R35.3.1_aarch64.tbz2
export BOARD=jetson-agx-orin-devkit

tar xf ${L4T_RELEASE_PACKAGE}
cd Linux_for_Tegra/rootfs/
sudo tar xpf ../../${SAMPLE_FS_PACKAGE}
cd ..
sudo ./apply_binaries.sh
sudo tools/l4t_flash_prerequisites.sh
sudo ./flash.sh jetson-agx-orin-devkit-as-nano8gb mmcblk0p1 &> /nvidia/flash_log.txt

And you should get a bootable system in emulated mode.

1 Like

I have dug further into this.

Apparently, flashing with jetson-agx-orin-devkit-as-nx-16gb does not work, whereas jetson-agx-orin-devkit-as-nx-8gb and jetson-agx-orin-devkit-as-nano8gb do work. Perhaps something wrong with the .conf file for the NX 16 GB emulation?

As I previously suspected, there is a bug in jetson-agx-orin-devkit-as-nx-16gb.conf.

You need to move the line CMDLINE_ADD="${CMDLINE_ADD} mem=16G"; from inside the if-statement to outside of the if-statement for it to work. Then, everything works as intended.

1 Like

Hi,
we’d like you to confirm the information of modules you are using.
Can you run the following command on the device and tell us what does it show?
i2cdump -y 0 0x50

Sure thing. Here is the output of our AGX Orin DevKit, flashed as Orin NX 16 GB (in case that matters):

No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 02 00 fe 00 00 00 00 00 00 00 00 00 00 00 00 00    ?.?.............
10: 00 00 00 0a 36 39 39 2d 31 33 37 30 31 2d 30 30    ...?699-13701-00
20: 30 30 2d 35 30 30 20 4d 2e 30 00 00 00 00 00 00    00-500 M.0......
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
40: 00 00 00 00 f2 18 a5 2d b0 48 31 34 32 33 36 32    ....???-?H142362
50: 32 30 32 36 38 36 31 00 00 00 00 00 00 00 00 00    2026861.........
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
90: 00 00 00 00 00 00 4e 56 43 42 00 00 4d 31 00 00    ......NVCB..M1..
a0: 00 00 00 00 00 00 00 00 00 00 00 00 f2 18 a5 2d    ............???-
b0: b0 48 0a 00 00 00 00 00 00 00 00 00 00 00 00 00    ?H?.............
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fa    ...............?
1 Like

Hi,
we can flash the board with jetson-agx-orin-devkit-as-nx-16gb.conf unmodified,
i.e., keeping the mem=16G line inside the if statement.
Can you provide the burning log when you fail to flash your AGX Orin as Orin NX 16GB?

I need my Jetson in a working state for the next few days, but let me get back to you when I have the opportunity to break it :) As far as I can remember, there were no obvious error messages in the burning log.

1 Like

Is this still an issue to support? Any result can be shared? Thanks

Hi! I just had an opportunity to reflash the DevKit.

The exact command was

sudo ./flash.sh jetson-agx-orin-devkit-as-nx-16gb mmcblk0p1 &> /nvidia/flash_log.txt

The log file is attached to this message here:
flash_log.txt (431.2 KB)

And, as expected, the system did not boot.

Looks like the flashing process end successfully.
What does UART give when it fail to start?

I don’t know much about UART. How do I see what it gives?

There is no update from you for a period, assuming this is not an issue any more.
Hence we are closing this topic. If need further support, please open a new one.
Thanks

Connect the micro USB port of your AGX Orin to your host PC, and you should see /dev/ttyACM0 on your host.

Then setup connections with tools like picocom on your host:

sudo picocom -b 115200 /dev/ttyACM0

, power on your device, and put the log here.