Linux驱动开发之中断处理

参考

内核线程同步之signal

tasklet

软中断中执行,当tasklet在执行的时候,不会重复进入。

worker工作队列

可重复进入。

内核线程

内核线程函数体常用循环控制条件,其中signal_pending用来接收kill -SIGKILL kthread_should_stop用来接收kthread_stop

#include 
#include 
#include 

static struct task_struct * slam_thread = NULL;
static int is_signal_exited = 0;

static int func(void *data) 
{
    allow_signal(SIGKILL);
    mdelay(1000);
	while(!signal_pending(current) && !kthread_should_stop()) {
	    set_current_state(TASK_INTERRUPTIBLE);
	    schedule_timeout(msecs_to_jiffies(5000));
	}
	is_signal_exited = 1;
	return 0;
}
static __init int kthread_signal_example_init(void)
{
        slam_thread = kthread_run(func, NULL, "slam");
        return 0;
}
static __exit void kthread_signal_example_exit(void)
{
    if(!is_signal_exited && !IS_ERR(slam_thread))
        kthread_stop(slam_thread);
}
module_init(kthread_signal_example_init);
module_exit(kthread_signal_example_exit);

你可能感兴趣的:(linux内核与驱动开发,linux)