1. 程式人生 > >例項:tasklet實現軟中斷(學習《Linux核心設計與實現》記錄)

例項:tasklet實現軟中斷(學習《Linux核心設計與實現》記錄)

tasklet是通過軟中斷實現的,tasklet本身也是軟中斷。

關於tasklet更詳細的知識,還是建議看一下《Linux核心設計與實現》
本貼子只介紹一下具體的流程。
驅動程式原始碼:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/kdev_t.h>
#include <linux/cdev.h>
#include <linux/kernel.h>
#include <linux/interrupt.h> 

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Adams");

static struct tasklet_struct my_tasklet;  
static void tasklet_handler (unsigned long data)
{
        printk(KERN_ALERT "tasklet_handler is running.\n");
} 

static int hello_init(void)
{
	printk(KERN_EMERG "HELLO WORLD enter!\n");
	tasklet_init(&my_tasklet, tasklet_handler, 0);
        tasklet_schedule(&my_tasklet);
	return 0;
}

static void hello_exit(void)
{
	printk(KERN_EMERG "HELLO WORLD exit!\n");
	tasklet_kill(&my_tasklet);
}

module_init(hello_init);
module_exit(hello_exit);

執行結果:

~ # insmod tasklet_test.ko                                                                                                                                   
[  763.212947] HELLO WORLD enter!
[  763.214601] tasklet_handler is running.
~ # rmmod tasklet_test                                                                                                                                       
[  768.270681] HELLO WORLD exit!
~ #

程式很簡單。

參考連結:
https://www.cnblogs.com/sky-heaven/p/8043190.html