I have a Jetson Xavier NX Devkit with microSD card (P3668-0000 module), in a non-accessible place. No hardware manipulation is possible, and no keyboard inputs except predetermined ones through shell. This NX is connected to another host computer via USB and Ethernet connection. The host computer is also a Jetson Xavier NX Devkit but with eMMC.
The NX was unable to load the rootfs on SD card /dev/mmcblk0p1, resulting in these messages:
[ 13.280457] mmcblk0: error -110 transferring data, sector 13921832, nr 192, cmd response 0x900, card status 0x80b00
[ 13.803172] mmc0: Data timeout error
[ 13.803278] sdhci: =========== REGISTER DUMP (mmc0)===========
[ 13.803385] sdhci: Sys addr: 0x000000c0 | Version: 0x00000505
[ 13.803491] sdhci: Blk size: 0x00007200 | Blk cnt: 0x000000b8
[ 13.803599] sdhci: Argument: 0x00d46e28 | Trn mode: 0x0000003b
[ 13.803706] sdhci: Present: 0x01fb0000 | Host ctl: 0x00000017
[ 13.803814] sdhci: Power: 0x00000001 | Blk gap: 0x00000000
[ 13.803921] sdhci: Wake-up: 0x00000000 | Clock: 0x00000007
[ 13.804029] sdhci: Timeout: 0x00000008 | Int stat: 0x00000000
[ 13.804137] sdhci: Int enab: 0x02ff008b | Sig enab: 0x02fc008b
[ 13.804245] sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000
[ 13.804353] sdhci: Caps: 0x3f6cd08c | Caps_1: 0x18002f73
[ 13.804460] sdhci: Cmd: 0x0000123a | Max curr: 0x00000000
[ 13.804939] sdhci: Host ctl2: 0x0000300b
[ 13.805242] sdhci: ADMA Err: 0x00000000 | ADMA Ptr: 0x00000000ffefe420
[ 13.805742] sdhci: ===========================================
I have a copy of this remote setup in the lab and I tested a procedure to flash system.img onto NX’s /dev/mmcblk0p1. Here are the steps I’ve completed:
- Uploaded these packages to remote host computer:
- arm_tegraflash_R32.7.1_aarch64.tbz2 (flashing tool and utilities for ARM-based flashing on the host computer)
- Jetson_Linux_R32.6.1_aarch64_minimal.tar.gz (minimal Board Support Package for Jetson Xavier NX Devkit)
- Debian packages needed to run flashing utility (qemu-user-static, libxml2-utils, uuid-runtime)
-
Extract both Jetson_Linux_R32.6.1_aarch64_minimal.tar.gz and arm_tegraflash_R32.7.1_aarch64.tbz2 into …/Linux_for_Tegra.
-
Use
dd
to image the entirety of host computer’s /dev/mmcblk0p1 onto …/Linux_for_Tegra/bootloader/system.img (the host computer is a Jetson Xavier NX Devkit with eMMC so we copy host computer’s rootfs). -
Put target NX into recovery mode and turn it on.
-
Run
sudo ./flash.sh -r jetson-xavier-nx-devkit mmcblk0p1
on host computer -
Power cycle target NX and take it out of recovery mode.
When I run the above procedure in the lab I am able to flash the NX’s SD card successfully, boot the kernel and load the rootfs. However when I run this on my remote setup I still see the same error messages. This indicates that the remote NX’s SD card has a hardware I/O malfunction.
The target NX does contain a 1 TB ext4 NVMe SSD as /dev/nvme0n1 and would normally be mounted on the filesystem after boot.
My questions are:
1. Are there any operations I can do on the NX SD card to boot rootfs and potentially fix or recover the SD card partitions, such as boot from recovery rootfs? or use initial ramdisk to try to recover the SD card?
2. Could I flash the rootfs onto the remote NX’s NVMe SSD? How would I perform this operation?
3. Since the remote NX’s SD card might be damaged, is it advised to boot from the NVMe SSD? If so how would this be done?
Much Thanks!