Boot Jetson Xavier NX from external SSD

Hello all,

I am currently working with Jetson Xavier NX based custom device. I have to boot this device using the external storage device. I am following the steps mentioned in below attached url:

In this example, it will flash the signed images to the Jetson Xavier NX device. But My requirement is to flash the unsigned images to the Jetson Xavier NX device.

I have doubt, if I follow all the steps mentioned in above url, is it damage the NX SoM device? are those scripts fusing the NX SoM registers?

Please help me to clear my doubt.

Thanks and regards

Their script should not fuse the NX registers.

Hello Wayne WWW,

Thank you for the quick response. For executing the flashing script, it will require kernel_flash directory in “Linux_for_Tegra/tools/kernel_flash” path. Whichever source code we are using do not have this directory under “Linux_for_Tegra/tools” path.

To getting the kernel_flash directory, I executed “get_jetson_files.sh” script and checked all the content of source code.

I am attaching here the kernel_flash directory. It will generating the signed images first and then it will flash the images.

So can you please check once, Is those scripts fusing the registers? I verified in logs, it will fusing the soft registers.

Also it is using another one script, tegraflash.sh. I am attaching that script also here.
nvautoflash.sh (15.0 KB)
tegraflash.py (48.8 KB)

kernel-flash.zip (379.0 KB)

Please help me to resolve this query.

Thanks and regards

Hi,

Whether that file exists or not depends on which jetpack release in use. Are you sure you are using latest jetpack?

But not some old one?

Hello WayneWWW,

Thank you for the quick response. We are using older jetpack version. So it is not available in our source code.

From these scripts, is it fusing the soft registers? At the time of flashing, it will print like “Flashing soft_fuses… Done”. So I have doubt.

If we are following the same steps provided in “GitHub - jetsonhacks/bootFromExternalStorage: Shell scripts to setup a NVIDIA Jetson AGX Xavier or Jetson Xavier NX Developer Kit to boot from external storage.” this, it will not damage the NX SoM or not fusing the registers. Is that a correct understanding?

Thanks and regards

Unless they use odm_fuse script… it is not possible to fuse your board when their script is just to boot from external drive…

You can refer to the developer guide to know the odm fuse first.

Hello,

Thank you for your helping me. I am able to boot the NX devkit using the external device (M.2 Key-M SSD). I have to perform the same task with my custom board.

In our architecture, C5 connector is connected with the PCIe switch and M.2 Key-M connector is connected with the PCIe switch endpoint. From NX devkit, C5 connector is directly connected with the M.2 Key-M connector. So it is the difference.

Whenever I am trying to boot the device from the SSD then it will give the error in nvme_init function. Error logs are attached here.

bootloader_logs.txt (25.6 KB)

In NX devkit, SSD detected with 0005:01:00.0 port
In custom device, SSD detected with 0005:06:00.0 port

Can you please suggest how can I able to boot the device from the SSD?

Thanks and regards

Hello,

I have one doubt, whenever cbootloader tries to boot from the external device (SSD), at that time SSD gets detected or not. In custom device, M.2 Key-M connector connected with PCIe switch and PCIe switch will take 100 ms of time to boot. So it must require to complete PCIe switch bootup to detect M.2 Key-M SSD.

For that, I updated the CBOOT bootloader code and added delay before the tegrabl_pcie_get_dev API. Still after that I am not able to boot the custom device with it.

#define NVME_CLASS_CODE 0x010802
pcie_dev = tegrabl_pcie_get_dev(NVME_CLASS_CODE, PCIE_ID_TYPE_CLASS);

In this API, it will passing the NVME_CLASS_CODE. Do I need to update the CBOOT bootloader source code?

In NX devkit, SSD is detecting with 0005:01:00.0 port and In custom device, SSD is detecting with 0005:06:00.0 port.

Do I need to make changes for this port number difference in CBOOT bootloader code?

Please help me to resolve this issue.

Thanks and regards

Please refer to the document.

https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3261/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.html#wwpID0E0QN0HA

Hello WayneWWW,

I made 2 experiments here.

  1. Perform flashing and booting from external device (SSD) with the NX devkit. I flashed the image in SSD successfully as well as booting the NX SoM from SSD successfully. I do not have to execute any other command to boot from the SSD. Below image covers the NX architecture for the M.2 Key-M connector.
  2. I removed the SSD from the NX devkit and connected with my custom device. But in custom device, I am not able to boot the NX SoM from the SSD. It is giving the error like below.

There is one difference in NX devkit architecture and my custom device architecture. Below image covers the custom device architecture for the M.2 Key-M connector.


In custom device architecture, PCIe switch booting process complete within 100 ms of time. So M.2 Key-M SSD will detect within 2-3 second of time. For that I added 10 second delay at the time of NVME_INIT api and added 5 retries to detect the NVMe SSD successfully with the custom device.

So can you please suggest how can I move ahead to resolve this issue. If It needs to update the cboot bootloader, so what kind of changes require. I have SSD ready with the flashed image.

I have doubt on NVME_CLASS_CODE variable. Please let me know if I have to update NVME_CLASS_CODE variable with the port number where NVME SSD gets detected.

Thanks and regards

Is the nvme drive able to detect after entering kernel?

Do you have full log to share?

Also, is the NX module to test still same one ?

Hello WayneWWW,

Thank you for the quick response. I performed 3 experiments to answering your questions, and all the logs are attached here.

1. Is the nvme drive able to detect after entering kernel?
→ When I am booting my custom device with the SD card, it will detect the NVME drive. I am attaching my custom device logs where nvme ssd is getting detected.

exp-1.txt (94.9 KB)

  1. Connected NVME SSD in NX devkit and booting the device using the SSD. find the below attached logs to check all the bootloader and kernel booting.

exp-2.txt (40.1 KB)

  1. Connected NVME SSD in custom device and try to boot from SSD. Its full logs are attached here.

exp-3.txt (32.4 KB)

4. Also, is the NX module to test still same one ?
→ Yes, I am using the same SoM module.

Please help to get some idea where it is giving the problem.

Thanks and regards

The software here seems a little bit old. Could you try with latest jetpack version ? 32.7.1?

Hello WayneWWW,

I tried all the experiments with the Jetpack version 32.6.1. So I need to update the source code with the new jetpack and update you for the same.

Thanks and regards

BTW, cboot source is public. You can check it directly. No need to ask me for some specific code.

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