init_timer函数功能描述:函数init_timer( )用于初始化结构体struct timer_list变量,将此结构体变量存储的定时器插入到系统内核定时器模块中,并确定由哪个CPU处理。字段base用相应CPU的base赋值,字段entry的next用NULL赋值,并初始化自旋锁为打开状态。函数init_timer( )在实现过程中调用了函数__init_timer( )。
init_timer文件包含
#include<linux/timer.h>
init_timer函数定义
在内核源码中的位置:linux-3.19.3/include/linux/timer.h
函数定义格式:
#ifdef CONFIG_LOCKDEP
#define init_timer(timer) \
__init_timer((timer),0)
__init_timer( )的详细信息见文件linux-3.19.3/include/linux/timer.h
init_timer输入参数说明
- 此函数的输入参数是struct timer_list类型的变量,此变量用于存放动态定时器,其定义及详细解释参考函数add_timer( )的说明文档。
init_timer返回参数说明
- 函数init_timer( )返回值是void类型的变量,即不返回任何结果。
init_timer实例解析
编写测试文件:init_timer.c
头文件及全局变量声明如下:
#include <linux/module.h>
#include<linux/timer.h>
MODULE_LICENSE("GPL");
struct timer_list my_timer; //定义一个静态全局变量
模块初始化函数:
int __init init_timer_init(void)
{
printk("into init_timer_init.\n");
printk("the value of the start_pid is :%d\n", my_timer.start_pid);
if(my_timer.base==NULL)
printk("the base of my_timer has not been initialized\n");
init_timer(&my_timer); //调用init_timer初始化变量
printk("the value of the start_pid is :%d\n", my_timer.start_pid);
if(my_timer.base==NULL)
printk("the base of my_timer has not been initialized\n");
else
printk("the base of my_timer has been initialized\n");
printk("out init_timer_init.\n");
return 0;
}
模块退出函数:
void __exit init_timer_exit(void)
{
printk("Goodbye init_timer\n");
}
模块初始化及退出函数调用:
module_init(init_timer_init);
module_exit(init_timer_exit);
实例运行结果及分析:
执行命令insmod init_timer.ko插入模块,然后输入命令dmesg -c查看系统输出信息,出现如图所示结果。
结果分析:
由图可以看出函数执行之前timer_list字段start_pid为0, base字段为NULL,函数执行之后timer_list字段start_pid为-1, base字段不为空,说明函数init_timer( )完成了对timer_list结构体变量部分字段的初始化工作。