我正在尝试在 ARMv8 Foundation Model v2.1 中启动我的小型 ARMv7 内核(使用 qemu vexpress 模型运行良好)。该模型在 EL3 / 64 位级别启动,我设法降到 EL1 / 32 位级别,但我遇到了一些问题(简而言之,计时器没有滴答作响,并且缺少一些 kprintf,但这不是问题在这里)。
为了调试我的 UART 问题,我想使用模型提供的 LED / 开关。我可以很容易地从软件中读取它们的值,但我无法为它们中的任何一个写入新值。内核似乎挂起。这是写入开关寄存器的最小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 的论坛。
最好的,
五。