Linux驱动学习之中断-tasklet 和 工作队列(基于Linux-3.4.2)

/*

*注意:本文仅用于学习记录和交流,若有错,望指正,谢谢

*/

-----------------------------------------------------分割线---------------------------------------------------------

    主要是应用Linux的顶半部和底半部机制。

一、tasklet

//static struct tasklet tasklet_1;

void xxx_do_tasklet(unsigned long);

DECLARE_TASKLET(tasklet2,  xxx_do_tasklet,  0);


/**底半部处理函数*/
void xxx_do_tasklet(unsigned long)
{
    xxxxxxx
}

/*顶半部处理函数*/
xxx_top_handle(int  irq,  void * dev_id)
{
    xxxx
    taskletschedule(&tasklet);    //调度底半部处理函数
    xxxxx
}

/*设备驱动加载函数*/
int __init  xxx_init(void)
{
    xxxxx

    result = request_irq( xxx_irq,  xxx_top_handle,  0,  "xxxname",  NULL );
    xxxxx

    return 0;
}

module_init(xxx_init);

void __init  xxx_exit(void)
{
    xxxxx
    //tasklet_init(&tasklet_1, xxx_top_handle, 0);
    free_irq(xxx_irq,  xxx_top_handle);
    xxxxx

    return 0;
}

module_exit(xxx_exit);

二、工作队列(...)

猜你喜欢

转载自blog.csdn.net/Carl_0/article/details/87855532