(BLOG) - Boot from NVMe without using SDKManager or external Ubuntu PC (A solution that works)

Hi All,

I’ve managed to create a bootable NVMe on my Jetson Orin Nano DevKit, without using SDKManager or any external Ubuntu PC. And the steps are comically simple :D.
So, if you didn’t have any luck in getting the SDK Manger to setup your NVMe drive for install, i believe the below will be a welcoming relief.

As I’m presenting this as a blog, I’m intending to walk you through step by step of what I’ve done to achieve booting from my NVMe drive.

Jetson Orin Nano Supported Accessories NVMe SSDs (link)
All driver are 500GB PCIe Gen3 x4 (other than SABRENT)

  1. Crucial P2 3D NAND NVMe PCIe M.2 SSD Up to 2400MB/s
    • Cost US$49.95
  2. Western Digital WD Blue - Gen3 x4 PCIe 8Gb/s, 3D NAND, Up to 2,400 MB/s
    • Cost US$40.20
  3. SABRENT 500GB Rocket Nvme PCIe 4.0 M.2 2280 Internal SSD Maximum Performance Solid State Drive (Latest Version) (SB-ROCKET-NVMe4-500).
    • Cost US$49.99
    • Jetson Orin NX supports up to Gen4 PCIe. Jetson Orin Nano supports
      up to Gen3 PCIe.

My NVMe SSD Details: (Note: Not in the supported list)

  1. SAMSUNG 980 SSD 500GB PCle 3.0x4, NVMe M.2 2280, Speeds up-to 3,500MB/s, MZ-V8V500B/AM
    • Cost $39.99

Note: I believe you can use PCIe Gen4 x4, however you may pay more for the drive and your Jetson Orin Nano will only support Gen3 speeds. So, my recommendation is to get a PCIe Gen3 and save some money :)

TL;DR

  • Boot into Jetson Orin Nano DevKit using the SD card.
  • Copy the SD card image onto the SD card.
  • Write the Jetson Linux SD-Card image onto the NVMe using the App “Disks”
  • Find the UUID for partition “nvme0n1p1” using the command “ls -l /dev/disk/by-partuuid”
  • Mount the partition “/dev/nvme0n1p1” (this should be around 21GB)
  • Open file for edit as sudo “(Mount-point)/boot/extlinux/extlinux.conf” (this is the file on the mounted file system and not the SD card.
  • Change root=… to root=PARTUUID={UUID of nvme0n1p1}
  • Save the file, Shut down the board, Take the SD card out
  • Reboot, and wait a few seconds (the board will start a couple time before it boots using NVMe)

Now for the Step by Step (Show and tell)

NVMe Details:

  1. Samsung NVMe drive is formatted and ready to rock and roll

  2. Either download or copy Jetson Linux SD-card images

  3. Write the image (ISO) to NVMe SSD drive
    Using Disks Application, that comes pre-installed on the Jetson Linux SD-card image. (Sorry forgot to take screenshot)
    03 - Write image to NVMe

  4. Confirmation to restore / write the image
    Click Restore, to being writing the image to NVMe drive
    04 - restore image

  5. Wait for the restore to finish
    Here is the screenshot of the Disks Application

  6. Once the restore is complete, you will be able to see the drive/ partitions as per below. Same as what you see on the SD card.

  7. Query the NVMe partitions UUID’s
    We will use the UUID of Partition One (p1), in updating the extlinux.conf file later.
    Use the command “ls -l /dev/disk/by-partuuid/”

  8. Copy UUID of Partition 1 (nvme0np1), Hint, this is a 21GB ext4 partition.
    make sure, you paste the UUID in texteditor for later use.


    Note: If for what ever reason, you donot find the PARTUUID for nvme0np1, try restarting the board (using SD card), and rerun the Step 8. If you still cant find PARTUUID for nvme0np1 you will have to restart from Step 1.

  9. Mount Partition 1 (nvme0np1), by selecting the partition in the Disks application, and hitting the play button.

  10. After the partition is mounted, you should be able to see the mount location. as per the screenshot below.

  11. (Optional) Install Nano
    You can use “vi” editor, if that is your preferred option. I like nano :)

  12. Using nano (or vi), open the extlinux.conf file located in “/media/{UserName}/{mount point}/boot/extlinux/”
    Make sure to change the username and the mount point as you should see in the screenshot on 10.
    Makesure to open the file as admin (sudo), or you will not be able to save the file.

  13. You will see the below text when you open the extlinux.conf file

  14. Change the parameter for “root”, from “root=/dev/mmcblk1p1” to “root=PARTUUID={UUID for nvme0np1”. Where the UUID for nvme0np1 is from step 8.

  15. Save the extlinux.conf file, by following instructions.
    Shutdown the Ubuntu, and remove the SD card.
    Restart the Jetson Orin Nano DevKit board, by resetting the power.

  16. The boards boot order is to first boot from SD card, and MMC card. Only after this, it will make an attempt to boot from NVMe drive.
    So, you will notice the board restarting a couple time before it boots.

  17. Once booted from NVMe, you will be asked to setup the board (Username, Wifi, etc.,).

  18. Installing NVIDIA jetpack: You can install NVIDIA Jetpack by running the below command in a terminal.

    sudo apt update & sudo apt upgrade
    sudo apt install nvidia-jetpack
    
  19. Installing DeepStream, You will need to download NVIDIA deepstream from https://developer.nvidia.com and install it manually. (Instructions here)

  20. Time to enjoy your Jetson Orin Nano, and all the speed boosts you will get from a NVMe :D

Best of Luck, and keep the questions flowing.

2 Likes

Hi @facruz , @HS131231, @CyborgSam, @johnson3, @chihiro, @allenn_farcas007, @DaveYYY and @WayneWWW,

I’ve interacted with some of you in my previous posts on the same topic, if you are still facing the same boot from NVMe issues or flashing with SDKManager. Can you please try the instructions provided above, and confirm if it is or isn’t working?

Thanks in advance and looking forward for your reply.

Yes, this instruction looks promising.

You can also change the boot order in UEFI shell so that it will not wait for that few second.

1 Like

Thanks, I’ll try it tonight.

This post is great, thank you so much Cranky_Cyborg for sharing this information, I just order a new NVMe to try this process this weekend. Thank you, also, WayneWWW for your advice. This is excellent information.

1 Like

THANK YOU. I’ve been unable to flash to an NVMe and this workaround got me a working image on an NVMe.

A couple notes:

  • The first time I ‘restored’ the sd blob to the drive it failed to enumerate in /dev//disk/by-partuuid/. I wiped it, tried again, and this time it worked.
  • An important final step is to run SDKManager and push all the libs/tools like CUDA, TensorRT, etc. to have a fully working system.
    • DO NOT CHECK THE JETSON LINUX IMAGE BOX
2 Likes

Thanks for confirming @ss332

If you prefer not to use SDKmanager:
You should be able to install most of the libs/tools using “sudo apt install nvidia-jetpack” and for dev libraries run “sudo apt install nvidia-jetpack-dev”.

There are a couple additional libraries such as DeepStream, that are not part of jetpack, so you will need to down and install them manually.

1 Like

I just finished testing the process provided by Cranky_Cyborg, and it worked perfectly. Finally, I have my Jetson Orin with NVMe working. Thank you so much Cranky_Cyborg for sharing your expertise. Now my frustration level is very low or zero.

1 Like

Hi All,

I’ve done it again :D . This time, I’ve scripted the above steps making it even simpler, and have added scripts that will install NVIDIA Jetpack and Deepstream. ( i.e. covering all features of the SDKManager ) once the board is rebooted.

You can find the scripts and instructions in my git repo below:

Feel free to reachout if you have any questions, and i’ll do my best in answering.
The above script only works (or tested on) NVIDIA Jetson Orin Nano, so would be interested if it works on anyother board.

Finally, i’ll refrain from working on anymore NVMe flashing process / scripts. As you can imagine, i’ve spent more time on the setup than what i actually intend to do with the board.

Best of luck,

3 Likes

I will give this script a shot and report back. Unfortunately there’s a USB bug and patch that requires me to re-flash

yup, worked great. thanks!

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.