0

我正在尝试在 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指示上了。作为记录,如果我替换strbldrb,我可以正确读取并显示该寄存器的值(我使用了--switches标志以确保它有效)。

任何人都知道我在这里做错了什么?

编辑:感谢 unixsmurf 的建议,我现在知道我得到了一个没有级别更改的同步数据中止异常,原因是“同步外部中止”。我不知道如何进一步检查,我想我会尝试 ARM 的论坛。

最好的,

五。

4

1 回答 1

0

ARM 社区终于解决了这个问题。完整的讨论可以在这里找到。

于 2015-01-20T13:14:43.203 回答