问题
以这样的初始化形式出现时,编译出现错误。
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函数,会出现什么问题吗?