【发布时间】:2015-08-27 04:11:59
【问题描述】:
我正在尝试在 ARMv8 Foundation Model v2.1 中启动我的小型 ARMv7 内核(使用 qemu vexpress 模型运行良好)。该模型在 EL3 / 64 位级别启动,我设法降到 EL1 / 32 位级别,但我遇到了一些问题(简而言之,计时器没有滴答作响,并且缺少一些 kprintf,但这不是问题在这里)。
为了调试我的 UART 问题,我想使用模型提供的 LED / 开关。我可以很容易地从软件中读取它们的值,但我无法为它们中的任何一个写入新值。内核似乎挂起。这是写入开关寄存器的最小汇编代码:
.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 的论坛。
最好的,
V.
【问题讨论】:
-
您是否设置了任何形式的异常捕获?写入会产生中止吗?在写入偏移量 #0x8 (LED) 时,您是否看到同样的问题?
-
我在写入 LED 的偏移量 #0x8 时遇到了同样的问题。由于此时我没有设置 mmu(非常早启动),因此我当时没有异常向量设置。你是对的,如果发生异常,我应该尝试添加一个检查。当我可以测试您的建议时,我会通知您。
-
谢谢@unixsmurf,我确实遇到了异常(根据arm V8 ref man,它被标记为“当前异常级别与SP_ELx,同步”)。我会尝试找出问题所在(我阅读了一些我必须阅读的综合症寄存器)。
-
我编辑了主帖并添加了更多信息
标签: simulator arm64 fast-model