我正在尝试在ARMv8 Foundation Model v2.1中启动我的小型ARMv7内核(使用qemu vexpress模型运行得很好)。该模型在EL3 / 64位启动时,我设法降低到EL1 / 32位,但我遇到了一些问题(换句话说,计时器没有打勾,有些kprintf丢失,但那不是这里的问题)。
要调试我的UART问题,我想使用模型提供的led / switch。我可以很容易地从软件中读取它们的价值,但我无法为它们中的任何一个写出新值。内核似乎挂了。这是一个写入开关寄存器的最小asm代码:
.global Start
Start:
# we are in EL3 / 64 bits mode
# create the 0x1C010000 + 0x4 address of switches
mov x0, #4
movk x0, #0x1c01, lsl #16
# value to write
mov w1, #0xaa
# actual writing
strb w1, [x0]
我似乎陷入了strb
指令。为了记录,如果我用strb
替换ldrb
,我可以正确读取并显示该寄存器的值(我使用--switches
标志来确保它有效。)
任何人都知道我在做错了什么?
编辑:感谢unixsmurf建议,我现在知道我得到了一个没有级别更改的同步数据中止异常,原因是“同步外部中止”。我不知道如何进一步检查,我想我会试试ARM的论坛。最佳,
诉P>