在Zynq(arm-v7/cortex-a9)中发送处理器间中断
我试图在ZedBoard的Zynq平台上添加对嵌入式操作系统(DNA-OS)的多处理器支持。 该操作系统实际上是完美的功能与CPU_0单独。操作系统体系结构需要实现cpu_send_ipi功能,以激活多处理支持:基本上,该功能会中断处理器,并为其提供一个新线程来处理 我在(Zynq技术参考手册)中查找了IPI寄存器,但没有找到 我试图在Cortex-A9规范中进一步挖掘IPI寄存器,发现软件生成的中断可以用作IPI 在向我的操作系统添加软件中断支持后,问题是CPU_0可以中断自身,但不能中断CPU_1! PS:为了让我的操作系统处理SGIs,我使用了第1486页ug585中的寄存器规范: 那么,是否有其他特殊配置允许CPU相互中断?或者其他实现IPI的方法在Zynq(arm-v7/cortex-a9)中发送处理器间中断,arm,interrupt,cpu-registers,armv7,cortex-a,Arm,Interrupt,Cpu Registers,Armv7,Cortex A,我试图在ZedBoard的Zynq平台上添加对嵌入式操作系统(DNA-OS)的多处理器支持。 该操作系统实际上是完美的功能与CPU_0单独。操作系统体系结构需要实现cpu_send_ipi功能,以激活多处理支持:基本上,该功能会中断处理器,并为其提供一个新线程来处理 我在(Zynq技术参考手册)中查找了IPI寄存器,但没有找到 我试图在Cortex-A9规范中进一步挖掘IPI寄存器,发现软件生成的中断可以用作IPI 在向我的操作系统添加软件中断支持后,问题是CPU_0可以中断自身,但不能中断CP
您的参考文档是GIC(全局中断控制器)的一种形式。Cortex-A9 MP核心包括一个集成的GIC控制器。每个CPU都包括一个中断接口。此外,还有一个全系统的分销商。为了接收IPI(也称为SGI或软件生成中断),需要启用CPU接口以在第二个CPU上接收SGI中断。这需要几个步骤
- -需要注册,GICv1(忽略GICv2信息)
- -第3章,具体信息
- -没有详细说明,但我认为这是综合GIC。如果您使用更深奥的功能,可能值得一看
在通用GIC手册的附录B中特别有用。出于某种原因,ARM喜欢不断更改他们发布的每个文档中的注册名称。请参见以下问题。不清楚第二个CPU是否正常工作?我想你在我的回答中是这样的。有一些指向不同Linux源代码的指针,您可以检查一下。我没有编写任何代码来启动这两个CPU。实际上,我编译了操作系统和应用程序,以获得~0.5MB elf文件;我使用bootgen从FSBL、我的ELF文件和我的比特流生成bin文件。我假设FSBL将我的比特流加载到FPGA中,将我的elf加载到内存中,然后将CPU_0的PC指向我的操作系统入口点。现在,在阅读了您的评论和答案之后,我之前不理解的一些代码部分是有意义的。我将尝试调整FSBL代码以在两个CPU上加载操作系统。OS kickstart模块中有一个控制测试,使CPU_0能够继续加载操作系统内核,同时阻止任何其他CPU等待中断。谢谢你的提示,一旦我做了这些更改,我会让你保持更新。我没有使用Zynq CPU的经验。Zync GIC可能不符合ARM文件,但我猜不太可能;他们必须对Cortex-A9 MPCore进行定制设计。