microSD is not detected with Jetpack4.4

We have a boxer like this one: AAEON BOXER-8251AI | AI@Edge Fanless Embedded Box PC with NVIDIA Xavier NX | Microsoft Azure Certified - AAEON
I am able to see microSD with a custom flash from boxer provider.

But when I flash Jetpack4.4 I don’t see the microSD card with lsblk
dmesg does not react on microSD insertion when jetpack4.4 is flashed.

What can I do with Jetpack4.4 to be able to read micro SD ?

I’ve never used one of these, but as a general concept, different carrier boards have different device trees. The default flash assumes the dev kit, and for any change to carrier board layout on the Boxer, there would need to be device tree changes. The manufacturer of the Boxer probably needs to provide this (the “board support package”, or BSP, contains a device tree).

Any custom BSP is probably just copied into the flash software for the dev kit, and after that flash would “do the right thing” for your carrier board, but the BSP must match the release version of the flash software. The makers of the Boxer would need to provide this information.

1 Like

Thanks @linuxdev

Do you know which dtb file of Jetson NX is responsible for sdhci@34… devices?
Or what is the fastest way to navigate dtb files, except their decompilation to dts?

I’ve not looked at the details of any specific device tree for sdhci. What I usually do is reverse compile the device tree first:
dtc -I fs -O dts -o extracted.dts /proc/device-tree

I also log a command line flash, for example:
sudo ./flash.sh jetson-xavier-nx-devkit mmcblk0p1 2>& | tee log_flash.txt

I find a symbol/address I am interested in from the extracted tree, and then go through the flash logs to see which original tree components were flashed, followed by looking to see if my symbol is in one of those. A very manual process, but you can reverse compile the named dtb files and simply grep for your symbol and/or address. Not exactly a fast way to do this, but it is thorough.

Other official docs will tend to describe modifications to kernel files related to device tree, and then say to compile the tree from the kernel source.

If you are just browsing, then it is very fast to use “find” in combination with “/proc/device-tree”.

1 Like

I looked through /proc/device-tree and I’ve found a difference in symbols of a flash that can read microSD and the other one.

I found a dtb tegra194-p3668-all-p3509-0000.dtb that has this symbol, I tried to change

status = “disabled”;

to

status = “okay”;

But when I reflash, those changes weren’t applied.
I will try to go through the flashing log to verify if it should be another dtb with the same symbol.

This is the not-so-fun part…each release and Jetson version may have slightly different directions for this. Often it involves replacing a generic reference version somewhere in “Linux_for_Tegra/”, and then flashing normally, but check the docs for your specific case (device trees can end up in “/boot” files, or in a signed partition).

Thanks @linuxdev , that’s exactly what was the problem.

There were several copies of the same dtb file in different subdirectories of “Linux_for_Tegra/”

When I changed tegra194-p3668-all-p3509-0000.dtb in /kernel/dtb it worked.

Hi @dorozhko.a, I have the same problem, could you help me explain the detailed steps? Thank you so much.
I don’t know how to get tegra194-p3668-all-p3509-0000.dtb

If you’ve ever flashed, then you will have a directory “~/nvidia/nvidia_sdk/JetPack_...version info.../Linux_for_Tegra/”. In terms of flashing, everything will be in that directory or a subdirectory. For example, you should be able to find:

~/nvidia/nvidia_sdk/JetPack_...version info.../Linux_for_Tegra/kernel/dtb/
# Which has several dtb files. One is:
~/nvidia/nvidia_sdk/JetPack_...version info.../Linux_for_Tegra/kernel/dtb/tegra194-p3668-all-p3509-0000.dtb

Also, if you look in the docs for kernel build or kernel customization, then most device trees are also a build target there. If you were to configure the kernel source to match your running system, and then build the kernel target for “make dtbs”, this would result in a lot of “.dtb” files being generated. Presumably, " tegra194-p3668-all-p3509-0000.dtb" would be one of them.

Note that dtb files can be reverse compiled, examined, edited, and recompiled. A typical reverse compile would go something like this:

dtc -I dtb -O dts -o reversed_tegra194-p3668-all-p3509-0000.dts tegra194-p3668-all-p3509-0000.dtb
# You could then examine tegra194-p3668-all-p3509-0000.dts, edit, and rebuild:
dtc -I dts -O dtb -o reversed_tegra194-p3668-all-p3509-0000.dtb reversed_tegra194-p3668-all-p3509-0000.dts

(I preppended the name “reversed_” to generated files, but you can name them anything you want).

2 Likes

Thank you @linuxdev, finally i succeeded.

Hi @linuxdev, when I apt-get upgrade (nvidia-l4t-bootloader, nvidia-l4t-gstreamer, nvidia-l4t-tools), the dts has been changed.
I reboot the Jetson NX, the microSD is not detected again.
How can I keep the dts ?

I have heard of other people running into this as well. I think the technically correct way to do this is to make your device tree into an Ubuntu package, and have that package cause the offending overwrite package to be blocked. I am not sure of which package that is.

Alternatively, you could blacklist the package causing issues from updating. The problem there is the same: I am unsure which package that is. Someone probably knows and has some advice on how to blacklist that package.

as per my experience sometimes microsdcards were not detected until formated at host PC / windows pc

Hi @linuxdev, I am having a very similar problem, I’m hoping you can help with it:

You referenced some things in this thread which don’t exist on my Jetson (flash.sh script, Linux_for_Tegra dir, for instance), so I’m having trouble following your suggested solutions.

Thanks in advance for any assistance.

These are part of the flash software, and exist only on the host PC used for flashing. The Jetson itself will not have that content. People who use a prebuilt SD card image will also not have this since the PC is not used for flashing.

Jetsons all started out with eMMC only, and the SD card was not for boot. All Jetsons have the ability to be placed in “recovery mode”. When in recovery mode the Jetson becomes a custom USB device which is understood by the “driver package” (which runs on a PC, not a Jetson), and this can be used to directly flash the Jetson.

The SD card version has somewhat altered flash instructions, but you can still use a Linux PC (running Ubuntu 18.04) to flash. You can do this either via SDK Manager or via manual download and install of the “driver package” and “sample rootfs” (or a mix of both). Until this has been completed you won’t have that content.

FYI, here is a list of SDKM/JetPack releases:
https://developer.nvidia.com/embedded/jetpack-archive

Notice that on the right side of each release there is a “Linux for Tegra” (“L4T”) release mentioned, e.g., JetPack 4.4.1 shows “L4T R32.4.4”. JetPack/SDKM is simply a front end, and the flash software itself (the driver package and sample rootfs) are found in the L4T URL.

On your host PC, if you run SDKM after installing the “.deb” package you will see a directory with the following naming convention:
~/nvidia/nvdia_sdk/JetPack_...version.../Linux_for_Tegra/