内核设施、辅助函数与字符设备驱动开发
1. 内核设施与辅助函数
1.1 线程化中断请求
线程化中断请求(Threaded IRQs)中,处理程序的定义不变,但注册方式略有不同。 request_irq
函数实际上调用了 request_threaded_irq
函数:
request_irq(unsigned int irq, irq_handler_t handler, \
unsigned long flags, const char *name, void *dev)
{
return request_threaded_irq(irq, handler, NULL, flags, \
name, dev);
}
1.2 线程化底半部机制
以下是实现线程化底半部机制的示例代码:
static irqreturn_t pcf8574_kp_irq_handler(int irq, void *dev_id)
{
struct custom_data *lp = dev_id;
unsigned char nextstate = read_state(lp);
if (lp->laststate != nextstate) {
int key_down = nextstate < ARRA