linux 核心定時器

2021-08-18 16:18:43 字數 1944 閱讀 9486

1、asmlinkage void __init start_kernel(void)

2、void __init init_timers(void)

3、void open_softirq(int nr, void (*action)(struct softirq_action *))

4、static

void run_timer_softirq(struct softirq_action *h)

5、static

inline

void __run_timers(struct tvec_base *base)

6、static

void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned

long),

在linux 的核心中,timer_list結構體的例項對應著乙個定時器,timer_list 定義在:include/linux/timer.h

struct timer_list ,    \

.function = (_function), \

.expires = (_expires), \

.data = (_data), \

.base = &boot_tvec_bases, \

.slack = -1, \

__timer_lockdep_map_initializer( \

__file__ ":" __stringify(__line__)) \

}#define define_timer(_name, _function, _expires, _data) \

struct timer_list _name = \

timer_initializer(_function, _expires, _data)

extern

void add_timer(struct timer_list *timer);

上述函式將timer註冊進核心,加入到核心的動態定時器鍊錶中,一般在驅動的__init函式中來呼叫。如:probe

int del_timer(struct timer_list *timer)
上述函式用於刪除定時器,一般用於__exit函式內。

int mod_timer(struct timer_list *timer, unsigned

long expires)

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

struct timer_list timer;

void timer_handler(unsigned

long data)

static

void __init timertest_init(void)

static

void __exit timertest_exit()

module_init(timertest_init);

module_exit(timertest_exit);

module_license("gpl");

module_author("joey");

module_description("kernel timer test");

linux 核心 核心定時器

一.時鐘中斷概念 1.時鐘中斷由系統的定時硬體以週期性的時間間隔產生,這個間隔 即頻率 由核心根據hz來確定,hz是乙個與體系結構無關的常數,可配置 50 1200 在x86平台上預設值是1000 2.每當時鐘中斷發生的時候,全域性變數jiffies unsigned long 就加1,所以jiff...

linux核心定時器

度量時間差 時鐘中斷由系統的定時硬體以週期性的時間間隔產生,這個間隔 頻率 由核心根據hz來確定,hz是乙個與體系結構無關的常數,可配置 50 1200 在x86平台,預設值為1000.每秒鐘產生1000次時鐘中斷 每當時鐘中斷發生時,全域性變數jiffies就加1,因此其記錄了自linux啟動後時...

Linux 核心定時器

include include include include struct timer list my timer void func unsigned long data printk time out n data ld,pid ld n data,current pid mod timer ...