【问题标题】:How to set the default ARM processor state for kernel code?如何为内核代码设置默认的 ARM 处理器状态?
【发布时间】:2014-03-31 02:31:47
【问题描述】:

对于ARM处理器同时支持ARM和Thumb-2状态(指令集),如何设置运行内核态代码的状态,例如用于中断和系统调用的内核代码。

【问题讨论】:

  • 通常,它总是默认为 ARM,除非 CPU 只支持 Thumb。即Cortex-M系列。某些特定的 CPU 上可能有一些 CP15 寄存器来支持这一点,但绝对没有通用的 ARM 机制。
  • Linux 有 CONFIG_THUMB2_KERNEL 来设置构建内核的指令集,当配置的目标支持 Thumb-2 时。但是,如果处理器支持 ARM,则入口点始终是 ARM 状态。

标签: arm


【解决方案1】:

在 v7 架构* 中,SCTLR 的第 30 位决定在 ARM 或 Thumb 状态下是否发生异常,除非外部信号另有说明,否则在复位时默认为 ARM。对于 v6 及更早版本,异常总是在 ARM 状态下发生。

在实际编写操作系统的上下文中,如果您想以向后兼容的方式在 Thumb 中编写异常处理程序,我想您也可以简单地使用从异常向量到处理程序代码本身的 ARM 互通分支 - 我'不过,我不是专家,所以我不能肯定这没有令人讨厌的陷阱。

*和介于 1156 之间的怪事

【讨论】:

  • 这听起来与中断一样正确...我刚刚找到了 SCTLR 的 ArmV7 bit30。当然,对于 Cortex-M 系列来说,始终是 Thumb。 UnixSmurf 具有用于跳转/引导初始 Linux 映像的 API 期望。
  • 谢谢。如果 SCTLR 指示中断是在 ARM 状态下进行的,当 Thumb 模式被中断时,状态会自动转移到 ARM 模式吗?
  • @Thomson 确实 - 在SVC、中止、中断等上,返回地址和 SPSR 被隐藏,CPSR 设置为适当的模式和指令集 ,并且 PC 被设置为相关的异常向量地址并从那里继续。然后从异常返回将通过 SPSR 恢复 Thumb 状态。 ARM ARM 比我能更清楚地解释异常条目,因此请检查以获取更多详细信息。
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 2010-11-04
  • 1970-01-01
  • 2014-06-13
  • 2016-01-16
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多