- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读到 ARM 中的软件生成中断被用作处理器间中断。我还可以看到其中 5 个中断已经在使用中。我也知道 ARM 提供了 16 个软件生成的中断。
在我的应用程序中,我在 ARM-cortex 内核和 Linux 上运行裸机应用程序。我想将一些数据从运行裸机应用程序的核心传送到运行 Linux 的核心。我计划将数据复制到片上内存(共享),我将在核心(运行 linux)上触发一个 SGI,以指示一些数据可供它处理。现在我可以从核心(运行裸机应用程序)生成 SGI。但是为了处理 linux 端的中断,我不确定 SGI IRQ 号是免费的,我也不确定我是否可以直接使用 IRQ 号(通常 SGI 是从 0-15)。有谁知道如何在 Linux 中为 SGI 编写处理程序?
编辑:这是对上述文本的重新措辞,因为该问题已针对 SSCE reasons 关闭。 . Cortex-A CPU 用于多 CPU 系统。 ARM 通用中断 Controller (GIC) 监视所有全局中断并将它们分派(dispatch)到特定 CPU。为了让各个 CPU 相互发送信号,软件生成的中断 (SGI) 从一个内核发送到另一个内核;这使用外围私有(private)中断(PPI)。这个问题是,
How to implement a Linux kernel driver that can receive an SGI as a PPI?
最佳答案
Does any one have an idea how to write a handler for SGI in Linux?
ipc: ipc@address {
compatible = "company,board-ipc"; /* Your driver */
reg = <address range>;
interrupts = <1 SGI 0x02>; /* SGI is your CPU interrupt. */
status = "enabled";
};
platform_get_irq()
在您的驱动程序中获取 PPI(外围私有(private)中断)。我猜该地址是您希望进行通信的共享内存(物理);也许
reg
不合适,但我认为它会起作用。该区域将由 Linux MMU 重新映射,您可以使用它,
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
mem = devm_ioremap_resource(dev, res);
platform_get_irq()
应该返回一个可用于
request_irq()
的 irq 号函数族。只需将此连接到您的日常工作。
gic_handle_irq()
, 将处理程序限制为 16 到 1020 之间的中断。如果启用 SMP,则
handle_IPI()
调用感兴趣的中断。
gic_raise_softirq()
可用于发出中断信号。处理
SGI 对于当前的 Linux,
smp.c需要额外的
enum ipi_msg_type
handle_IPI()
中处理这些的值和代码.看起来较新的内核(可能是 3.14+?)可能会添加
set_ipi_handler()
对 smp.c 进行不需要的修改。
关于linux-kernel - ARM cortex A9 中的处理器间中断(如何在 Linux 中为软件生成的中断 (ARM) 编写处理程序?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20430733/
我是一名优秀的程序员,十分优秀!