Linux内核API init_timer

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查看系统输出信息,出现如图所示结果。

Linux内核API init_timer

结果分析:

由图可以看出函数执行之前timer_list字段start_pid为0, base字段为NULL,函数执行之后timer_list字段start_pid为-1, base字段不为空,说明函数init_timer( )完成了对timer_list结构体变量部分字段的初始化工作。

赞(1)
未经允许不得转载:极客笔记 » Linux内核API init_timer
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址