首页 > 解决方案 > 加载 .bin 文件时,“tftp”和“fatload”有什么区别?

问题描述

U-boot版本:U-Boot 2017.09 型号:瑞芯微RK3568评估板Arch:ARMv8-a

一个非常奇怪的错误。我也在另一个板上遇到。所以我认为这是一个软件错误。

我尝试通过 uboot 中的“tftp”指令将我的迷你系统映像(命名为:kernel.bin)加载到 {load_addr}。并使用 'go' 转到 {load_addr}。

kernel.bin 实现了一些很简单的功能:

  1. linker.lds:分割一些段。
  2. start.S:preinit,将异常级别从EL2改为EL1,进入C世界。
  3. main.c:使用 UART 打印消息。

奇怪的问题是:

  1. 如果我不切换到 EL1,文件 kernel.bin 可以通过“tftp”和“fatload”加载并成功运行。
  2. 但是,如果我切换到 EL1,使用“fatload”可以加载和运行。但是当使用'tftp'加载时,在执行'go'指令后,它会抛出'Synchronous Abort',esr=0x02000000。

以下是完整的中止信息:

=> go 10000000
 Starting application at 0x10000000 ...
"Synchronous Abort" handler, esr 0x96000040

* Reason:        Exception from a Data abort, from current exception level
* PC         =   ffffffff22c62078
* LR         =   ffffffff22c62064
* SP         =   000000001000ae20
* ESR_EL2    =   0000000096000040
* Reloc Off  =   00000000ed39e000

x0 : 0000000030d00800 x1 : fffffffbffff7fbb
x2 : ffffd78bffff9cf1 x3 : 0000000000000000
x4 : 0000000000000000 x5 : 0000000000000030
x6 : 00000000ede5e870 x7 : 000000000000000f
x8 : 0000000000000000 x9 : 0000000000000008
x10: 00000000ffffffd0 x11: 00000000ebdab5f8
x12: 0000000000000004 x13: 0000000000000200
x14: 00000000eb9f82d0 x15: 0000000000000008
x16: 0000000000008070 x17: 0000000000000001
x18: 00000000eb9ffcf8 x19: 00000000ebdf77f8
x20: 0000000000000002 x21: 0000000010000000
x22: 00000000ebdf77f0 x23: 00000000edec156c
x24: 0000000000000002 x25: 0000000000000000
x26: 0000000000000000 x27: 0000000000000000
x28: 00000000ebdf2ac0 x29: 00000000eb9f89c0


Call trace:
  PC:   [< ffffffff22c62078 >]
  LR:   [< ffffffff22c62064 >]

Stack:
    [< ffffffff22c62078 >]
    [< ffffffff12c61fff >]

Copy info from "Call trace..." to a file(eg. dump.txt), and run
command in your U-Boot project: ./scripts/stacktrace.sh dump.txt 

Resetting CPU ...

顺便说一句,我比较了加载后内存中的字节数,两种方式(tftp 和 fatload)具有相同的数据。那么为什么会出现这个问题呢?

标签: u-bootarmv8cortex-a

解决方案


推荐阅读