【发布时间】:2020-02-14 05:53:46
【问题描述】:
Linux 支持运行 32 位应用程序,只要
- 内核启用
CONFIG_COMPAT - 硬件支持 AArch32
我假设 32 位应用程序必须运行在 arm AArch32 执行状态,如果环境有 32 位应用程序和 64 位应用程序。
32位应用进程->arm状态为AArch32
64 位应用程序进程和内核 -> arm 状态为 AArch64
对吗?
如果是这样,
Linux 如何处理 AArch32 和 AArch64 切换?
内核是否知道正在运行的进程是32位还是64位?
【问题讨论】:
-
由于特殊的蹦床到(未)对齐的地址。也就是说,很少有 LSB 负责切换模式。
-
@0andriy 不。您考虑的是 ARM/Thumb 互通,而不是 AArch64/AArch32 互通。
-
@EOF 我会等待你的回答,同时根据community.arm.com/developer/ip-products/processors/f/… 任何例外都可以做到这一点,所以,我的评论可能是正确的。但我不知道内核中的那个区域。
-
@0andriy 我没有写答案。我只看了一眼 ARM64 ARM。似乎每个 EL(EL3 除外)都可以配置为 AArch32 或 AArch64,具体取决于 EL 的相关
PSTATE寄存器。 Linux在用户空间对应的PSTATE寄存器中设置了相应的位,所以一旦内核返回(异常返回),用户空间就执行AArch32。
标签: linux linux-kernel arm embedded-linux