【发布时间】:2020-09-10 11:01:34
【问题描述】:
我想使用一个中断来同时触发多个核心的动作。
我有什么:
- 在其上运行 Linux 的多核 SoC。
- 内置在 SoC 平台上的定时器,位于 CPU 外部。
- 可用的中断线很少
我已经尝试过(并且在一个 CPU 上工作正常):
来自用户空间的内核模块:
- 找到正确的 irq 行 irq_of_parse_and_map()
- request_irq()
- 通过使用 __raw_writel() 直接写入其寄存器来启动定时器
- 使用 irq_set_affinity_hint() 更改对其他 cpu 的亲和力
我尝试过但没有成功(多个 CPU 使用相同的中断):
- 与上述步骤类似。
- 使用 request_percpu_irq()、enable_percpu_irq() 和 free_percpu_irq() 而不是 request_irq()。
但是 request_percpu_irq() 总是返回 -22。
问题: 这是正确的方法吗?如果没有,我怎样才能让它正常工作。
【问题讨论】: