init_timer_key函数功能描述:函数init_timer_key( )用于初始化结构体struct timer_list变量,将此结构体变量存储的定时器插入到系统内核定时器模块中,并确定由哪个CPU处理及指定定时器类型。
init_timer_key文件包含
#include<linux/timer.h>
init_timer_key函数定义
在内核源码中的位置:linux-3.19.3/kernel/time/timer.c
函数定义格式:
void init_timer_key(struct timer_list *timer, unsigned int flags, const char *name, struct lock_class_key *key)
init_timer_key输入参数说明
- 第一个参数是struct timer_list类型的变量,此变量用于存放动态定时器,其定义及详细解释参考add_timer( )分析文档的输入参数说明部分。
- 第二个参数是unsigned int类型变量,指定定时器类型,定时器类型参考函数init_timer_deferrable( )的说明。
- 第三个参数是char型的指针,代表初始化的定时器的名称,在此测试程序中没有实际意义。
- 第四个参数是struct lock_class_key类型的变量,用于设定定时器的自旋锁的类型,在此测试程序中传入的是NULL,用于设定自旋锁为打开状态。
init_timer_key返回参数说明
- 此函数的返回值是void型的变量,即函数不返回任何结果。
init_timer_key实例解析
编写测试文件:init_timer_key.c
头文件引用及全局变量声明:
#include <linux/module.h>
#include<linux/timer.h>
MODULE_LICENSE("GPL");
struct timer_list my_timer; //声明全局变量
自定义中断到期函数:
// 自定义定时器到期时执行的函数,在此只有显示的功能
void my_timer_function(unsigned long data)
{
printk("In the my_timer_function\n");
printk("the jiffies is :%ld\n", jiffies); //显示当期系统节拍数
struct timer_list *mytimer = (struct timer_list *)data;
printk("the expries of my_timer is :%ld\n", mytimer->expires);
// 显示定时器的到期节拍数
}
模块初始化函数定义:
int __init init_timer_key_init(void)
{
printk("my_timer will be created.\n");
printk("the jiffies is :%ld\n", jiffies); //显示当前的时钟节拍数
/*调用函数init_timer_key( ),对定时器变量进行初始化*/
init_timer_key(&my_timer, TIMER_DEFERRABLE, "my_timer", NULL);
my_timer.expires = jiffies + 1*HZ; //HZ=250定时器的到期时间在当前节拍的基础上增加250节拍
my_timer.data = &my_timer; //初始化data字段
my_timer.function = my_timer_function; //初始化function字段
add_timer(&my_timer); //将定时器变量插入到合适的链表中
printk("my_timer init.\n");
return 0;
}
模块退出函数定义:
void __exit init_timer_key_exit(void)
{
printk("Goodbye init_timer_key\n");
del_timer(&my_timer); //删除定时器变量
}
模块的加载及退出函数调用:
module_init(init_timer_key_init);
module_exit(init_timer_key_exit);
实例运行结果及分析:
执行命令insmod init_timer_key.ko插入模块,然后输入命令dmesg -c查看内核输出信息,出现如图所示结果。
结果分析:
运行结果说明定时器函数正常执行,进而说明init_timer_key( )函数正常运行,执行初始化操作。