我正在尝试启动 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 中的条目和加载属性值。