Добрый день. Пытаюсь на существующей железяке, построенной на RK3568, запустить ядро, дерево устройств и корневую ФС из памяти (чтобы не тереть и не сносить существующую систему на SPI NOR флеш). Собрал при помощи buildroot новую rootfs, новое ядро. Дерево устройств взял от старой системы (вытянул бинарник из FIT). Пытаюсь загрузиться, но возникает ошибка:
=> bootm $kernel_addr $rootfs_addr $fdt_addr_r
No misc partition
## Booting kernel from Legacy Image at 002a0000 ...
Image Name:
Image Type: AArch64 Linux Kernel Image (uncompressed)
Data Size: 10218103 Bytes = 9.7 MiB
Load Address: 002a0000
Entry Point: 002a0000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 00ca0000 ...
Image Name:
Image Type: AArch64 Linux RAMDisk Image (uncompressed)
Data Size: 14050216 Bytes = 13.4 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
ERROR: Did not find a cmdline Flattened Device Tree
Could not find a valid device tree
Я загрузил файлы по указанным адресам по tftp. Вывод printenv
=> printenv
arch=arm
autoload=no
baudrate=115200
bootaddr=0x04080000
bootargs=console=ttyFIQ0,115200n8 storagemedia=mtd earlycon=uart8250,mmio32,0xfe660000 root=/dev/mtdblock4 rootfstype=squashfs
bootcmd=run spi_bootcmd
bootdelay=3
console=ttyFIQ0
cpu=armv8
devnum=2
devtype=mtd
eth1addr=92:6f:83:fe:c2:a3
ethact=ethernet@fe010000
ethaddr=00:00:01:00:00:01
ethprime=eth1
fdt_addr_r=0x08300000
fdtcontroladdr=0x3b9e5d80
fileaddr=0xca0000
filesize=0xd663e8
gatewayip=10.5.5.1
ipaddr=10.5.5.30
kernel_addr=0x002a0000
kernel_addr_r=0x00280000
kernel_name="kernel"
kernel_size=0x00a00000
loadaddr=0x00c00800
netmask=255.255.255.0
rkloader_addr=0x00000000
rkloader_name="rkloader"
rootfs_addr=0x00ca0000
rootfs_name="rootfs"
serverip=10.5.5.1
soc=rockchip
spi_bootcmd=echo Trying load from spi..;sf probe && sf read $bootaddr $kernel_addr $kernel_size; bootm $bootaddr"
tftpkernel=tftp $loadaddr $serverip:$kernel_name
tftploader=tftp $loadaddr $serverip:$rkloader_name
tftprootfs=tftp $loadaddr $serverip:$rootfs_name
tftpuboot=tftp $loadaddr $serverip:$uboot_name
uboot_addr=0x00080000
uboot_name="uboot"
uboot_version="U-Boot " "2017.09-svn489" " (" "Jun 02 2023" " - " "17:38:35" " " "+0800" ")" "uboot_20230602.173820"
upkernel=run tftpkernel;sf probe;sf erase $kernel_addr +$filesize;sf write $fileaddr $kernel_addr $filesize
uploader=run tftploader;sf probe;sf erase $rkloader_addr +$filesize;sf write $fileaddr $rkloader_addr $filesize
uprootfs=run tftprootfs;sf probe;sf erase $rootfs_addr +$filesize;sf write $fileaddr $rootfs_addr $filesize
upuboot=run tftpuboot;sf probe;sf erase $uboot_addr +$filesize;sf write $fileaddr $uboot_addr $filesize
vendor=rockchip
ver=U-Boot 2017.09-svn489 (Jun 02 2023 - 17:38:35 +0800)uboot_20230602.173820
version="uboot_20230602.173820"
Я не сосвем понимаю, как происходит загрузка в существующей системе. вроде бы, bootm должны передаваться три адреса: ядро, rootfs и dtb. Но в команде spi_bootcmd чтение из флеш только образа ядра.
linux, rockchip, u-boot, ядро linux