You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Armbian系统(OrangePI 3 LTS)中添加新的IRQ映射?

硬件IRQ到系统IRQ编号的映射配置(OrangePI 3 LTS + Armbian)

核心说明

ARM架构下,你说的硬件IRQ编号(比如35)是中断控制器的硬件线编号,系统级IRQ是内核分配的虚拟编号。/proc/irq只是运行时状态展示,不能直接修改映射,得在启动阶段通过设备树或内核配置完成。

具体操作步骤

1. 先确认当前中断状态

先搞清楚硬件IRQ 35现在的绑定情况,执行以下命令:

cat /proc/interrupts | grep 35
cat /sys/kernel/debug/irqchip/gicv2/irq35

输出会显示它当前对应的系统IRQ编号和绑定的设备。

2. 用设备树覆盖永久修改(推荐)

Armbian支持设备树覆盖,不用编译内核就能改:

  • 新建自定义覆盖文件irq-remap.dts,内容如下(假设要把硬件IRQ35映射到系统IRQ100,可按需修改目标编号):
/dts-v1/;
/plugin/;

&gic {
    // 全志H616用GICv2,硬件IRQ35属于SPI(共享外设中断),对应SPI编号=35-32=3
    spi@3 {
        interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
        linux,irq = <100>; // 指定要映射到的系统IRQ编号
    };
};
  • 编译这个文件成设备树二进制:
dtc -I dts -O dtb -o irq-remap.dtbo irq-remap.dts
  • 把编译好的文件放到系统设备树覆盖目录:
sudo cp irq-remap.dtbo /boot/dtb/allwinner/overlay/
  • 修改启动配置文件,启用这个覆盖:
sudo nano /boot/armbianEnv.txt

在文件里添加一行:

overlays=irq-remap
  • 重启后检查是否生效:
cat /proc/interrupts | grep 100

3. 内核debugfs临时修改(重启失效)

如果只是临时测试,用debugfs接口快速调整:

// 先解绑当前硬件IRQ35的关联
echo 35 | sudo tee /sys/kernel/debug/irqchip/gicv2/unbind
// 重新绑定到目标系统IRQ(比如100)
echo 100 | sudo tee /sys/kernel/debug/irqchip/gicv2/bind

注意:这种方法只适用于未被设备占用的中断,重启后会恢复默认。

4. 注意事项

  • 目标系统IRQ编号必须是未被占用的,可通过cat /proc/interrupts查看已用编号。
  • 全志H616的硬件IRQ里,0-31是PPI(私有外设中断),32及以上是SPI,映射时要区分类型。
  • 确保Armbian内核开启了CONFIG_OF_OVERLAY配置(默认是开启的)。

内容的提问来源于stack exchange,提问作者Bart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:22:58