Я пытаюсь выполнить двоичный файл, заключенный в свой собственный ассемблерный код, есть причины, по которым я хочу выполнить некоторую инициализацию и посмотреть, как ведет себя двоичный файл, однако я не могу выполнить двоичный файл даже без такой инициализации, без выводана uart, lcd (я использую чипсет qsd8250b на базе cortexa-8, использующий mdp [платформу мобильной разработки]). Я знаю, что упакованный двоичный файл отлично работает на моей плате, поскольку я использовал его ранее (менее дня назад).
Проблема в том, что я не уверен, что / информация недоступна относительно того, где двоичный файл загружен в память.
Это мой код до сих пор
.org 0
.type _start,#function
.globl _start
_start:
b main
@@ Snipped headers @@
.org 0x1000
main:
mov r9, pc @r9= address of loadlk in memory
ldr r2, =loadlk @r2= address of loadlk in objfile
loadlk:
sub r0, r9, r2 @r0= r9-r2 = address of _start in memory
add r0, r0, #0x1200 @r0= r0 + 0x1200 = lkbin_start (src)
add r3, r0, #0xD000 @r3= r0 + 0xd000 = lkbin_start + ~sz(lk.bin) = lkbin_end (end)
cpy:
ldr r1, =0x28000000 @r1= destination (dst)
ldr r2, [r0],#4
str r2, [r1],#4
cmp r0, r3 @current read address ?= end, r0 < r3 -> branch back
blo cpy
ldr r9, =0x28000000
ldr r4, =0xa9000864 @Flashlight
ldr r5, =0xa9000814
ldr r4, [r4, #0]
orr r6, r4, #0x200000
str r6, [r5, #0]
dsb sy
isb sy
bx r9
b .
.ltorg
.org 0x1200
lkbin_start:
.incbin "lk.bin"
lkbin_end:
.align 8
, и это мойскрипт компиляции
arm-none-eabi-as bootwrapper.S -o bootwrapper.o
arm-none-eabi-objcopy -O binary bootwrapper.o binary
Конечно, он достигает кода фонарика, когда я вижу, что мой фонарик мигает, но потом ничего не происходит, из того, что я могу себе представить, он копирует мусорный код в цель и пытается выполнить его.
Любая помощь?