Я пытаюсь загрузить приложение Freertos из UEFI на QemuBeagleboard Qemu baremetal с UEFI
Когда я запустить приложение из UBoot, используя команды ниже он работает без каких-либо ошибок
fatload mmc 0 80300000 rtosdemo.bin go 0x80300000
Приложение uefi загружает файл эльфа на 0x80300000, а затем я попробовал два варианта.
Мой 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
, который является точкой входа адр, указанный в эльфа файле. Теперь он переходит на инструкциюldr r0, ..
, но после этого он просто прыгает, где-то в середине некоторой функции, а не переходит в инструкциюmsr
.Поскольку в UBoot его прыжки в
0x80300000
, я пытался, прыгнув с этим адр, теперь он идет к инструкцииb 80305098 <start>
, но после этой команды вместо прыжков в80305098
он просто переходит к следующей инструкцииldr pc, [pc, #20]
.
Итак, любые идеи о том, куда я иду, не так?
EDIT: Я обновил 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? – Notlikethat
Я не уверен ... Есть ли способ проверить – Lonewolf