运用tasklet机制的简单模块

 

 

Linux    2008-05-08 21:18   阅读56   评论1  
字号:    

 

看了那么多,该动手了。

编写一个模块,在其中加入tasklet。

-------------------------------------------------------------

 /*

tasklettest.c

*/

 

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/init.h>

#include <linux/interrupt.h>

 

MODULE_LICENSE("GPL");

 

static unsigned long data = 0 ;

struct tasklet_struct mytasklet ;

 

void tasklethandler(unsigned long data)

{

    printk("I am the process for tasklet./n");

    return;   

}

 

//DECLARE_TASKLET(mytasklet,tasklethandler,0);

 

static int __init myinit(void)

{  

   //DECLARE_TASKLET(mytasklet,tasklethandler,data);  

 

    tasklet_init(&mytasklet,tasklethandler,data);

    tasklet_schedule(&mytasklet);

    printk("hello!/n");

   

    return 0 ;

}

static void __exit myexit(void)

{

    printk("bye!/n");

}

module_init(myinit);

module_exit(myexit);

 

---------------------------------------------------

 

上面例子的初始化为

struct tasklet_struct mytasklet ;

tasklet_init(&mytasklet,tasklethandler,data);

调度语句为

tasklet_schedule(&mytasklet);

 

初始化方式2

注释掉语句/*static unsigned long data = 0 ;*/,用0直接代替data

可更换初始化语句为

DECLARE_TASKLET(mytasklet,tasklethandler,0);

但是记得要写在结构块外面,

我写在myinit模块入口函数里面编译运行,在插入模块时居然死机。重启再试,再死,

/*     o(∩_∩)o...,骗兔子,说,这是一个控制键盘灯闪的程序,看---CapsLock和ScrollLock两个键盘绿灯一直不停的闪(死机时候呈现的现象,也不知为什么),她居然将信将疑,哈哈~   */

 

 

 

而以这样的形式出现时,编译出现错误。

static unsigned long data = 0 ;

DECLARE_TASKLET(mytasklet,tasklethandler,data);

 

 

make: Entering directory `/usr/src/linux-headers-2.6.22-14-generic'

  CC [M]  /home/ganxiebin/tasklettest.o

/home/ganxiebin/tasklettest.c:19: 错误: 初始值设定元素不是常量

/home/ganxiebin/tasklettest.c:19: 错误: (在 ‘mytasklet.data’ 的初始化附近)

make[1]: *** [/home/ganxiebin/tasklettest.o] 错误 1

make: *** [_module_/home/ganxiebin] 错误 2

make: Leaving directory `/usr/src/linux-headers-2.6.22-14-generic'

 

原因?

 

 

 (写完模块,可以成功编译运行,颇有成就感!原来tasklet也是很简单的,只是以前的自己把tasklet当成老虎不敢去摸它而已!准备在2.6下改写sharelist)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值