SK-TDA4VM的U-Boot中运行Cortex-R5裸机代码触发Synchronous Abort错误
SK-TDA4VM开发板U-Boot运行裸机代码触发Synchronous Abort问题
在德州仪器SK-TDA4VM开发板的U-Boot环境中,尝试运行一段将数值0x12345678写入DDR内存地址0x81000000的裸机代码时,始终触发**"Synchronous Abort"**错误,但该代码在Code Composer Studio中可正常执行。
代码细节
链接脚本
ENTRY(_start) MEMORY { RAM (wrx) : ORIGIN = 0x80000000, LENGTH = 0x200 } SECTIONS { .text : ALIGN(128) { *(.text*) } > RAM }
汇编代码
section .text .global _start _start: LDR R0, =0x81000000 LDR R1, =0x12345678 STR R1, [R0] loop: B loop
错误信息
通用错误
每次运行都会返回:
"Synchronous Abort" handler, esr 0x02000000
go命令运行BIN格式代码的详细错误
=> go 0x80000000 ## Starting application at 0x80000000 ... "Synchronous Abort" handler, esr 0x02000000 elr: 000000000093e000 lr : 0000000080811d60 (reloc) elr: 0000000080000000 lr : 00000000ffed3d60 x0 : 0000000000000001 x1 : 00000000fdead308 x2 : 00000000fdead308 x3 : 0000000080000000 x4 : 0000000002800000 x5 : 00000000fde7f975 x6 : 0000000000000030 x7 : 00000000fde7fe00 x8 : 0000000000000010 x9 : 00000000ffffffd0 x10: 000000000000000d x11: 0000000000000006 x12: 00000000fde7ffa8 x13: 00000000fde80100 x14: 0000000000000008 x15: 00000000fde7f975 x16: 0000000080000000 x17: 0000000000000000 x18: 00000000fdea1da0 x19: 00000000fdead308 x20: 0000000080000000 x21: 0000000000000002 x22: 00000000fdead300 x23: 0000000000000002 x24: 00000000fffd8834 x25: 0000000000000000 x26: 0000000000000000 x27: 0000000000000000 x28: 00000000fdead360 x29: 00000000fde7fe00 Code: 00000000 00000000 00000000 00000000 (464c457f) Resetting CPU ...
错误触发后开发板会自动重置。
mkimage+bootm方式的错误
使用以下命令生成镜像:
mkimage -A arm -T kernel -C none -O linux -a 0x80000000 -e 0x80000000 -n "test" -d test.bin test.img
用bootm命令启动镜像时返回:
Wrong Image Type for bootm command ERROR -91: can't get kernel image!
背景信息
- SK-TDA4VM板载2颗Cortex-A72核心与4颗Cortex-R5核心,代码目标运行在其中一颗Cortex-R5核心
- 代码在Code Composer Studio中可正常执行,但U-Boot环境下无法运行
- 链接脚本指定的
0x80000000地址对应的DDR内存已正确配置 - 使用
arm-none-eabi-gcc编译代码 - 已测试ELF与BIN两种格式的代码
- 尝试过用
bootelf命令(针对ELF格式)与go命令(针对BIN格式)运行代码
内容的提问来源于stack exchange,提问作者Heverton
相关产品推荐
相关产品推荐

