2014-02-27 29 views
0

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

+0

通常,它总是默认为** ** ARM,除非CPU仅支持** **拇指。即,Cortex-M系列。在某些特定的CPU上可能会有一些CP15寄存器来支持这一点,但肯定没有通用的** ARM **机制。 –

+0

当配置的目标支持Thumb-2时,Linux有CONFIG_THUMB2_KERNEL来设置构建内核的指令集。但是,如果处理器支持ARM,则入口点始终是ARM状态。 – unixsmurf

回答

2

在v7架构*中,SCTLR的位30确定是否在ARM或Thumb状态下执行异常,除非外部信号另有说明,否则默认为ARM。对于v6及更早版本,异常总是在ARM状态下进行。在实际编写操作系统的上下文中,如果您想以向后兼容的方式在Thumb中编写异常处理程序,我想您也可以简单地使用异常向量中的ARM互操作分支到处理程序代码本身 - 我尽管如此,我不是专家,所以我不能肯定地说这没有什么可怕的陷阱。

*和在两者之间古怪即1156

+0

听起来像你可以得到中断一样正确......我刚刚找到了SCTLR的ArmV7 bit30。当然,对于Cortex-M系列,它始终是Thumb。 UnixSmurf具有用于跳转/引导初始Linux映像的API期望。 –

+0

谢谢。如果SCTLR指示中断是在ARM状态下进行的,则Thumb模式中断时,状态是否会自动转换到ARM模式? – Thomson

+1

@Thomson事实上 - 在一个'SVC'上,中止,中断等返回地址和SPSR被隐藏,CPSR被设置为适当的模式_和指令集_,并且PC被设置为相关的异常向量地址并继续从那里。从异常中返回将通过SPSR恢复Thumb状态。 ARM ARM比我更清楚地解释异常输入,因此请检查以获取更多详细信息。 – Notlikethat

相关问题