当前位置: 技术问答>linux和unix
关于内核定时器的简单模块编程,但是导致系统崩溃,请高手看看。
来源: 互联网 发布时间:2015-10-08
本文导语: 我在学习linux设备驱动编程,遇到一个关于内核定时器的问题。 我的源代码如下: #include #include #include MODULE_AUTHOR("hacker007"); MODULE_LICENSE("hacker007/GPL"); void tfunction(unsigned long data) { printk("This is inside the timer func...
我在学习linux设备驱动编程,遇到一个关于内核定时器的问题。
我的源代码如下:
#include
#include
#include
MODULE_AUTHOR("hacker007");
MODULE_LICENSE("hacker007/GPL");
void tfunction(unsigned long data)
{
printk("This is inside the timer functionn");
printk("The value is %lun",data);
}
static int timer_init(void)
{
struct timer_list my_timer;
init_timer(&my_timer);
my_timer.data=1212;
my_timer.function=tfunction;
my_timer.expires=jiffies+10000;
add_timer(&my_timer);
printk("This is after the add timer in the init functionn");
return 0;
}
static void timer_exit(void)
{
printk("This is inside the exit funcitonn");
}
module_init(timer_init);
module_exit(timer_exit);
使用的Makefile文件如下:
ifneq ($(KERNELRELEASE),)
obj-m := jiffies.o
else
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
但是导致系统崩溃了。在日志中无法记录下相关信息挂掉了。显示输出oops,然后提示说
系统内核已经对定时器加了自旋锁。
最后提示说:kernel panic:non-syncing ,还有其他信息没有记下来。不知道是什么原因?请高手指点一下,谢谢。
我的源代码如下:
#include
#include
#include
MODULE_AUTHOR("hacker007");
MODULE_LICENSE("hacker007/GPL");
void tfunction(unsigned long data)
{
printk("This is inside the timer functionn");
printk("The value is %lun",data);
}
static int timer_init(void)
{
struct timer_list my_timer;
init_timer(&my_timer);
my_timer.data=1212;
my_timer.function=tfunction;
my_timer.expires=jiffies+10000;
add_timer(&my_timer);
printk("This is after the add timer in the init functionn");
return 0;
}
static void timer_exit(void)
{
printk("This is inside the exit funcitonn");
}
module_init(timer_init);
module_exit(timer_exit);
使用的Makefile文件如下:
ifneq ($(KERNELRELEASE),)
obj-m := jiffies.o
else
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
但是导致系统崩溃了。在日志中无法记录下相关信息挂掉了。显示输出oops,然后提示说
系统内核已经对定时器加了自旋锁。
最后提示说:kernel panic:non-syncing ,还有其他信息没有记下来。不知道是什么原因?请高手指点一下,谢谢。
|
struct timer_list my_timer;
改成
static struct timer_list my_timer;
改成
static struct timer_list my_timer;