IRQ_driver

linux kernel IRQ驱动的编写,可以分为四步,但是中断处理函数的下半部处理有 tasklet context, workqueue context等等,所以此处分开讲解:

tasklet context

  1. 配置设备树dts

  2. 从设备树dts获得与申请中断号

  3. 设置中断处理函数

  4. 下半部处理(tasklet context)

  5. 释放中断号

workqueue context

  1. 配置设备树dts(同上)

  2. 从设备树dts获得与申请中断号(同上)

  3. 设置中断处理函数

  4. 下半部处理(workqueue context)

  5. 释放中断号(同上)

tasklet context

1. 配置设备树dts

xxx {
    compatible = "xxx,xxx";

    // GPIO1_18对应的中断号, 下降沿触发
    interrupt-parent = <&gpio1>;
    interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
    state = "okay";
};

2. 从设备树dts获得与申请中断号

  • 获得中断号

  • 申请中断号

3. 设置中断处理函数

4. 下半部处理(tasklet context)

5. 释放中断号

workqueue context

1. 配置设备树dts(同上)

2. 从设备树dts获得与申请中断号(同上)

3. 设置中断处理函数

4. 下半部处理(workqueue context)

5. 释放中断号(同上)

Last updated

Was this helpful?