例項:tasklet實現軟中斷(學習《Linux核心設計與實現》記錄)
阿新 • • 發佈:2018-12-21
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! ~ #
程式很簡單。