IRQ_driver
linux kernel IRQ驱动的编写,可以分为四步,但是中断处理函数的下半部处理有 tasklet context, workqueue context等等,所以此处分开讲解:
tasklet context
配置设备树dts
从设备树dts获得与申请中断号
设置中断处理函数
下半部处理(tasklet context)
释放中断号
workqueue context
配置设备树dts(同上)
从设备树dts获得与申请中断号(同上)
设置中断处理函数
下半部处理(workqueue context)
释放中断号(同上)
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?