
I am running the NanoPi R6C. The device is not capable of booting from the SSD, the next best thing is to load the root filesystem from the SSD.
By booting you mean loading the firmware from SSD (by which I think you mean NVME right).
Using rockchip's repos, I compile from source the images to boot 1) from the microSD card and 2) from eMMC. I install to the eMMC. Then, so as not to mount any partitions from eMMC, I boot from the microSD card, and I clone the root partition from the eMMC (/dev/mmcblk2p8) to the SSD (/dev/nvme0n1p1).
I boot from the eMMC, the output of "cat /proc/cmdline" is:
storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normal androidboot.dtbo_idx=0 androidboot.verifiedbootstate=orange earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 coherent_pool=1m irqchip.gicv3_pseudo_nmi=0 rw root=/dev/mmcblk2p8 rootfstype=ext4 rootflags=discard data=/dev/mmcblk2p9 consoleblank=0 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1 androidboot.fwver=uboot-a83a7263ef-01/09/2024
How do I change "root=/dev/mmcblk2p8" to "root=/dev/nvme0n1p1"?
I connect to the serial port and get to the U-Boot monitor. I examine the variables. "bootcmd" runs "bootrkp" which boots the system. "bootrkp" ignores "bootargs", I confirm this by deleting "bootargs" before running "bootrkp", the system boots up as before with no change in behavior. "bootrkp" is implemented in file "cmd/bootrkp.c". That code emits the equivalent of:
setenv bootm-no-reloc y booti 0x400000 0xa200000:0x7b2bc0 0x8300000
Can I tell U-Boot to load the root partition from /dev/nvme0n1p1, either by entering commands at the monitor, or by modifying the source code of U-Boot, or through any other means?
You don't mention what OS you're trying to load, is it Android?
So upstream U-Boot can boot a Linux OS from NVME on a rk3588 device, but it appears you're using the Rockchip fork and I have no idea of the state of that.
The upstream U-Boot doesn't yet have the R6C.
Generally if a device doesn't have something like a SPI flash where you can put firmware it's fine to use the eMMC for firmware and it should be able to run an OS from NVME.
If you're not using Android and are using a standard Linux distro I would look at enabling "distro boot" in the rockchip fork which will give you a standard UEFI boot interface and things should work. I have no idea if the U-Boot fork you're using includes PCI or NVME support but obviously make sure the appropriate drivers are enabled for that (look at the upstream Rock5B config).
Unfortunately I can't offer much more help from there as I generally only deal with upstream.
Peter