【问题标题】:ARMv8 Foundation Model: switches and ledsARMv8 基础模型:开关和 LED
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多