【发布时间】:2015-07-11 03:04:13
【问题描述】:
我正在尝试从 Qemu 上的 UEFI 启动一个 freertos 应用程序
-
当我从 uboot 运行应用程序时,使用以下命令运行它没有任何错误
fatload mmc 0 80300000 rtosdemo.bin go 0x80300000 一个 uefi 应用程序在 0x80300000 处加载 elf 文件,然后我尝试了两个选项。
我的 boot.s 文件在下面
`start:
_start:
_mainCRTStartup:
ldr r0, .LC6
msr CPSR_c, #MODE_UND|I_BIT|F_BIT /* Undefined Instruction */
mov sp, r0
sub r0, r0, #UND_STACK_SIZE
msr CPSR_c, #MODE_ABT|I_BIT|F_BIT /* Abort Mode */
mov sp, r0
...
` 反汇编文件
`
80300000 <_undf-0x20>:
80300000: ea001424 b 80305098 <start>
80300004: e59ff014 ldr pc, [pc, #20] ; 80300020 <_undf>
80300008: e59ff014 ldr pc, [pc, #20] ; 80300024 <_swi>
8030000c: e59ff014 ldr pc, [pc, #20] ; 80300028 <_pabt>
80300010: e59ff014 ldr pc, [pc, #20] ; 8030002c <_dabt>
...........
80305098 <start>:
80305098: e59f00f4 ldr r0, [pc, #244] ; 80305194 <endless_loop+0x18>
8030509c: e321f0db msr CPSR_c, #219 ; 0xdb
803050a0: e1a0d000 mov sp, r0
803050a4: e2400004 sub r0, r0, #4
`
使用
goto 0x80305098,它是elf文件中指定的入口点地址。现在它跳转到ldr r0, ..指令,但在那之后它似乎只是在某个函数中间的某个地方跳转,而不是进入msr指令。
1234563指令
ldr pc, [pc, #20]。
那么,关于我哪里出错了有什么想法吗?
编辑: 我将 boot.s 更新为
start:
_start:
_mainCRTStartup:
.thumb
thumb_entry_point:
blx arm_entry_point
.arm
arm_entry_point:
ldr r0, .LC6
msr CPSR_c, #MODE_UND|I_BIT|F_BIT /* Undefined Instruction Mode */
mov sp, r0
现在可以正常使用了。
【问题讨论】:
-
你有没有机会在 Thumb 状态下跳转到这段代码?
-
我不确定...有没有办法检查
标签: arm qemu beagleboard u-boot uefi