LUPA首页 | 资讯 | 教程 | 下载 | 求职 | 方案 | 博客 | 交易 | 英文版
LUPA论坛


 
helight
开源主力军
Rank: 3Rank: 3



UID 151392
精华 0
积分 626
帖子 44
LUPA币 604 点
阅读权限 30
注册 2008-3-8
发表于 2008-5-7 15:42  资料 个人空间 短消息 
tasklet学习实例

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

static unsigned long data=0;
static struct tasklet_struct tasklet;

static void mylet(unsigned long data)
{
            printk(KERN_ALERT "tasklet running.\n");

            return;
}

static int __init mytasklet_init(void)
{
            printk(KERN_ALERT "init...\n");
            tasklet_init(&tasklet, mylet,data);
            tasklet_schedule(&tasklet);

            return 0;
}

static void __exit mytasklet_exit(void)
{
            tasklet_kill(&tasklet);
            printk(KERN_ALERT "exit...\n");

            return;
}

MODULE_LICENSE("GPL");

module_init(mytasklet_init);
module_exit(mytasklet_exit);
顶部
[广告] 推荐个超酷的web2.0相册
infohunter (InfoHunter)
特约撰稿人
Rank: 8Rank: 8


UID 23340
精华 0
积分 1832
帖子 245
LUPA币 1709 点
阅读权限 100
注册 2006-7-25
来自 沈阳
发表于 2008-5-7 22:33  资料 主页 个人空间 短消息  QQ
OK,that's it
顶部
[广告] 推荐个超酷的web2.0相册
xdd123www
关注开源
Rank: 2



UID 161580
精华 0
积分 42
帖子 3
LUPA币 40 点
阅读权限 20
注册 2008-3-20
发表于 2008-5-9 13:42  资料 短消息 
问题

以这样的初始化形式出现时,编译出现错误。

static unsigned long data = 0 ;
DECLARE_TASKLET(mytasklet,tasklethandler,data);

源程序
-------------------------------------------------------------
/*
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 ;

void tasklethandler(unsigned long data)
{
    printk("I am the process for tasklet.\n");
    return;   
}

DECLARE_TASKLET(mytasklet,tasklethandler,data);  /* line 19*/


static int __init myinit(void)
{   
         tasklet_schedule(&mytasklet);    printk("hello!\n");
   
    return 0 ;
}
static void __exit myexit(void)
{
    printk("bye!\n");
}
module_init(myinit);
module_exit(myexit);

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

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_kill函数,会出现什么问题吗?
顶部
[广告] 推荐个超酷的web2.0相册
helight
开源主力军
Rank: 3Rank: 3



UID 151392
精华 0
积分 626
帖子 44
LUPA币 604 点
阅读权限 30
注册 2008-3-8
发表于 2008-5-10 14:44  资料 个人空间 短消息 
DECLARE_TASKLET(mytasklet,tasklethandler,data);  /* line 19*/
你吧这句话放到 tasklet_schedule(&mytasklet);之前试试 ,应该在退出的时候使用tasklet_kill,他会将后半部分终止执行。
顶部
helight
开源主力军
Rank: 3Rank: 3



UID 151392
精华 0
积分 626
帖子 44
LUPA币 604 点
阅读权限 30
注册 2008-3-8
发表于 2008-5-10 15:01  资料 个人空间 短消息 
DECLARE_TASKLET知是一个宏,并不是一个单独的函数,在内核源码中其实就是一句
struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data }
这样的话但让不应该在代码的中间的,要么在文件的程序中使用,要么和全局变量方在一起,怎么能出现在函数中间呢?
顶部
helight
开源主力军
Rank: 3Rank: 3



UID 151392
精华 0
积分 626
帖子 44
LUPA币 604 点
阅读权限 30
注册 2008-3-8
发表于 2008-5-10 15:02  资料 个人空间 短消息 
上面说错了是 ,怎么能出现在函数之间
顶部
zhull1052
开源主力军
Rank: 3Rank: 3



UID 73681
精华 0
积分 1441
帖子 117
LUPA币 1382 点
阅读权限 30
注册 2007-10-19
发表于 2008-5-12 12:35  资料 个人空间 短消息 
不知说了些什么东西,也不给程序做个说明
顶部
xdd123www
关注开源
Rank: 2



UID 161580
精华 0
积分 42
帖子 3
LUPA币 40 点
阅读权限 20
注册 2008-3-20
发表于 2008-5-13 18:20  资料 短消息 
^^

谢谢师兄的耐心讲解~
顶部
helight
开源主力军
Rank: 3Rank: 3



UID 151392
精华 0
积分 626
帖子 44
LUPA币 604 点
阅读权限 30
注册 2008-3-8
发表于 2008-5-14 00:03  资料 个人空间 短消息 
这里的程序我都是在调试过后的,解答也是在调试之后的结果,我的文字描述不是很好,当是我会尽量的。
顶部
 


当前时区 GMT+8, 现在时间是 2008-7-21 02:41
浙ICP备06002895号

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.034417 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - LUPA开源社区 - Archiver - WAP