u-boot - 加载 .bin 文件时,“tftp”和“fatload”有什么区别?
问题描述
U-boot版本:U-Boot 2017.09 型号:瑞芯微RK3568评估板Arch:ARMv8-a
一个非常奇怪的错误。我也在另一个板上遇到。所以我认为这是一个软件错误。
我尝试通过 uboot 中的“tftp”指令将我的迷你系统映像(命名为:kernel.bin)加载到 {load_addr}。并使用 'go' 转到 {load_addr}。
kernel.bin 实现了一些很简单的功能:
- linker.lds:分割一些段。
- start.S:preinit,将异常级别从EL2改为EL1,进入C世界。
- main.c:使用 UART 打印消息。
奇怪的问题是:
- 如果我不切换到 EL1,文件 kernel.bin 可以通过“tftp”和“fatload”加载并成功运行。
- 但是,如果我切换到 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)具有相同的数据。那么为什么会出现这个问题呢?
解决方案
推荐阅读
- python - 如何用子文件夹的名称重命名然后有效地在python中复制文件
- php - 如何在 Codeigniter 中将活动会话 ID 解析为外键
- delphi - Delphi Firemonkey,在横向模式Android上显示矩形
- c++ - 使用基类对象访问仅派生类的方法
- ruby-on-rails-3 - 如何匹配 VCR 中动态变化的 url
- php - 为什么php找不到这个文件?
- r - rvest,按照每个节点上的链接获取更多数据?
- javascript - 只有当我渲染一个子组件时我才会得到一个无限循环 - ReactJs
- python - 熊猫不会让我重新索引?
- git - 克隆 bitbucket 私有仓库时 Git 不请求密码