错误:图像不是 fdt - 必须重置板才能恢复

错误:图像不是 fdt - 必须重置板才能恢复

我正在尝试启动 freescale 1040RDB,但遇到了一些困难。我使用的是 Freescale 的预构建 SDK,该 SDK 具有 yocto 安装的 Linux VB 映像以及预安装的所有 yocto 层和配置。我已经能够成功运行bitbake,现在正在尝试将映像部署到目标上。当然,飞思卡尔的文档是完全没有用的。因此,通过反复试验,我找到了我认为的内核映像、根文件系统和 FDT。我使用 TFTP 将它们加载到目标上,然后尝试从内存启动。下面是目标串行终端的捕获。错误出现在最后一行。此时我想知道该.dtb文件是否有问题,或者我可能需要做一些准备工作。我已经对 .dtb 文件进行了十六进制转储,并将其与目标闪存中预安装的设备树进行了比较,并相信它们是相似类型的数据。

此错误是什么意思以及我可以采取什么措施来修复它?

=> tftp 0x01000000 uImage
Using FM1@DTSEC4 device
TFTP from server 192.168.2.236; our IP address is 192.168.2.18
Filename 'uImage'.
Load address: 0x1000000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ######################
         1.3 MiB/s
done
Bytes transferred = 5103714 (4de062 hex)
=> tftp 0x02000000 rootfs.gz.u-boot
Using FM1@DTSEC4 device
TFTP from server 192.168.2.236; our IP address is 192.168.2.18
Filename 'rootfs.gz.u-boot'.
Load address: 0x2000000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ##############################################################
         1.4 MiB/s
done
Bytes transferred = 3310270 (3282be hex)
=> tftp 0x00c00000 uImage.dtb      
Using FM1@DTSEC4 device
TFTP from server 192.168.2.236; our IP address is 192.168.2.18
Filename 'uImage.dtb'.
Load address: 0xc00000
Loading: #######
         994.1 KiB/s
done
Bytes transferred = 35655 (8b47 hex)
=> bootm 0x01000000 0x02000000 0x00c00000
WARNING: adjusting available memory to 30000000
## Booting kernel from Legacy Image at 01000000 ...
   Image Name:   Linux-3.12.19-rt30-QorIQ-SDK-V1.
   Image Type:   PowerPC Linux Kernel Image (gzip compressed)
   Data Size:    5103650 Bytes = 4.9 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 02000000 ...
   Image Name:   fsl-image-minimal-t1040rdb-64b-2
   Image Type:   PowerPC Linux RAMDisk Image (gzip compressed)
   Data Size:    3310206 Bytes = 3.2 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 00c00000
   Booting using the fdt blob at 0xc00000
   Uncompressing Kernel Image ... OK
   Loading Ramdisk to 2fcd7000, end 2ffff27e ... OK
ERROR: image is not a fdt - must RESET the board to recover.

答案1

这似乎是当内核映像开始解压缩时 fdt 被损坏的内存(通常是由于覆盖)。尝试在更高的地址加载 fdt,例如 0xe00000。

答案2

我通过将图像加载到更高的地址解决了这个问题。当我收到我正在做的错误时

fatload mmc 0 0x2000000 image.ub
bootm 0x2000000

我通过这样做修复了它

fatload mmc 0 0x40000000 image.ub
bootm 0x40000000

由于image.ub大小很大,129476304 > 0x2000000如果解压缩到地址 0,则解压缩时可能会覆盖某些内容。

答案3

您必须根据可用 DRAM 大小、内核大小和选择加载 itb 的 clobstart 来重新计算内核和 fdt 节点的 it 中的条目和加载属性值。

相关内容