如何设置内核代码的默认ARM处理器状态?

如何设置内核代码的默认ARM处理器状态?,arm,Arm,由于ARM处理器同时支持ARM和Thumb-2状态(指令集),如何设置运行内核模式代码的状态,例如中断和系统调用的内核代码。在v7体系结构*中,SCTLR的第30位决定了是在ARM状态还是Thumb状态下执行异常,除非外部信号另有说明,否则默认为复位时启用。对于v6和更早版本,异常总是在ARM状态下进行 在实际编写操作系统的环境中,如果您想以向后兼容的方式在Thumb中编写异常处理程序,我想您也可以简单地使用一个从异常向量到处理程序代码本身的ARM互通分支——不过,我不是专家,所以我不能肯定这方

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

在v7体系结构*中,
SCTLR
的第30位决定了是在ARM状态还是Thumb状态下执行异常,除非外部信号另有说明,否则默认为复位时启用。对于v6和更早版本,异常总是在ARM状态下进行

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


*而介于1156之间的奇怪之处通常是,它总是默认为ARM,除非CPU只支持Thumb。也就是说,Cortex-M系列。在某些特定的CPU上可能有一些CP15寄存器来支持这一点,但肯定没有通用的ARM机制。当配置的目标支持Thumb-2时,Linux具有CONFIG_THUMB2_内核来设置将内核构建为哪个指令集。然而,如果处理器支持ARM,则入口点始终是ARM状态。这听起来和中断一样正确。。。我刚刚找到了SCTLR的ArmV7 bit30。当然,对于Cortex-M系列,它始终是拇指。UnixSmurf对跳转/引导初始Linux映像有API期望。谢谢。如果SCTLR指示在ARM状态下进行中断,当Thumb模式中断时,状态是否会自动转移到ARM模式?@Thomson确实-在
SVC
上,中止、中断等。存储返回地址和SPSR,将CPSR设置为适当的模式和指令集,PC被设置为相关的异常向量地址,并从那里继续。然后,从异常返回将通过SPSR恢复Thumb状态。ARM对异常条目的解释比我所能解释的要清楚得多,所以请检查它以了解更多详细信息。