首页 > 解决方案 > 如何向 ARM64 (GIC V3) Linux 添加新的 IPI(处理器间中断)(例如:IPI15)?

问题描述

我正在研究 ARM A53 GIC V3 Soc。我一直在尝试在 smp.c 中为 rpmsg 添加两个新的 IPI(IPI 15 和 IPI 14)。系统有3核RTOS(Secure EL1)和1核Linux(Non-Secure EL1)。

LINUX 将触发 IPI 14,RTOS 触发 IPI 15。Linux 使用 gic_raise_softirq() 函数触发 IPI 14。

实施 IPI 的步骤。在枚举 ipi_message_type 中添加了新的 IPI。增加了 smp.h 中的 NR_IPI。在 ipi_types[NR_IPI] 中添加了 S(new ipi)。在 handle_IPI 函数中添加了 IPI 的案例。

这是在 Linux 中配置新 IPI 的方法吗?我可以在 /proc/interrupts/ 中看到新的中断,但它没有显示在 /proc/irq 中。为什么它没有显示在 /proc/irq 中?

我面临的问题是 RTOS 无法获得此中断,但由于某种原因,这在 Linux 本身中回显。所以我无法检查从 Threadx 到 Linux 的中断。使 Secure EL1 和 Non-Secure EL1 获得所有 IPI (0~15) 所需的寄存器设置是什么?我们需要在 GIC V3 中做任何特定的 IRQ 路由吗?

标签: linuxinterruptarm64smp

解决方案


推荐阅读