BCM2836/BCM2837 在 Aarch64 模式下 - 如何在裸机程序中生成异常?
BCM2836/BCM2837 in Aarch64 mode - how to generate an exception in a bare metal program?
我正在尝试使用 AArch64,并且在 EL1 中将我的“OS”设置为 运行。 IRQ 向量 table 已加载并正在工作,等等。如果我在对齐时出错,我会得到一个很好的异常,我会打印出 ESR 和 ELR。但是...我可以生成自己的异常吗?如果 EL1 中的某些条件为真,我想要相同的行为(即打印出 ESR、ELR 并重新启动),例如 if (cond == 1) generate_exception()... 是否可能,或者正在生成异常只到 CPU?
具体来说,如果它是 CPU 特定的,它在 Raspberry Pi 3B+ 上,所以 BCM2837B0 ARM Cortex A-53...
我想说你的问题与 BCM2836/BCM2837 中使用的专有中断控制器有关,而不是与 Aarch64 本身有关。
我建议使用邮箱中断,如 document 中所述。
另一个有价值的信息来源是 Raspberry Pi Bare Bones project,因为它确实提供了使用中断和邮箱的代码。
对于使用标准 GIC 的 Aarch64 处理器,您可以向四个内核中的任何一个发送 SGI(软件生成的中断)。
听起来你可以使用 SVC。
Supervisor Call(以前称为 SWI,软件中断)。
我正在尝试使用 AArch64,并且在 EL1 中将我的“OS”设置为 运行。 IRQ 向量 table 已加载并正在工作,等等。如果我在对齐时出错,我会得到一个很好的异常,我会打印出 ESR 和 ELR。但是...我可以生成自己的异常吗?如果 EL1 中的某些条件为真,我想要相同的行为(即打印出 ESR、ELR 并重新启动),例如 if (cond == 1) generate_exception()... 是否可能,或者正在生成异常只到 CPU?
具体来说,如果它是 CPU 特定的,它在 Raspberry Pi 3B+ 上,所以 BCM2837B0 ARM Cortex A-53...
我想说你的问题与 BCM2836/BCM2837 中使用的专有中断控制器有关,而不是与 Aarch64 本身有关。
我建议使用邮箱中断,如 document 中所述。
另一个有价值的信息来源是 Raspberry Pi Bare Bones project,因为它确实提供了使用中断和邮箱的代码。
对于使用标准 GIC 的 Aarch64 处理器,您可以向四个内核中的任何一个发送 SGI(软件生成的中断)。
听起来你可以使用 SVC。
Supervisor Call(以前称为 SWI,软件中断)。