HRTIMER_MODE_PINNED = 0x02, /* 和CPU绑定 */ HRTIMER_MODE_ABS_PINNED = 0x02, /* 第一种和第三种的结合 */ HRTIMER_MODE_REL_PINNED = 0x03, /* 第二种和第三种的结合 */ 启动定时器:hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode); 参数timer是hrtimer...
当前内核同时存在新旧timer wheel 和 hrtimer两套timer的实现,内核启动后会进行从低精度模式到高精度时钟模式的切换,hrtimer模拟的tick中断将驱动传统的低精度定时器系统(基于时间轮)和内核进程调度。 内核定时器系统增加了hrtimer之后,对于用户层开放的定时器相关接口基本都是通过hrtimer进行实现的,从内核源码可以看到: *...
在struct hrtimer里面有一个node域,类型为struct rb_node,这个域代表了hrtimer在红黑树中的位置。 hrtimer_start hrtimer_start函数将一个hrtimer加入到一个按照到期时间排序的红黑树中,其主要流程为: int hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode); // 根据time和mode参...
open_softirq(HRTIMER_SOFTIRQ, hrtimer_run_softirq); } hrtimer层初始化在start_kernel() -> hrtimers_init()->hrtimers_prepare_cpu(0)中,首先初始化了cpu0的每cpu结构体hrtimer_cpu_base,用来管理当cpu0上所有的软件定时器。每个hrtimer_cpu_base根据4种时间类型和2种中断执行环境,分为8种clock_base来分别...
hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); hrtimer->function = watchdog_timer_fn; hrtimer_start(hrtimer, ns_to_ktime(sample_period), HRTIMER_MODE_REL_PINNED_HARD); ... } static void watchdog_disable(unsigned int cpu) { struct...
hrtimer_start用于启动一个定时器 int hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)- timer:表示当前的定时器- tim:定时时间- mode:与hrtimer_init中的mode一样。 hrtimer_cancle应于取消一个定时器, 并等待其执行完毕 ...
mode是时间的模式,可以是HRTIMER_MODE_ABS, 表示绝对时间, 也可以是HRTIMER_MODE_REL,表 示相对时间。hrtimer_start:启动定时器。tim是设定的到期时间,mode和hrtimer_init中的mode参数含义相同。hrtimer_forward_now: 修改到期时间为从现在开始之后的interval时间。hrtimer_cancel:取消定时器。
int hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode); // 根据time和mode参数的值计算hrtimer的超时时间,并设置到timer->expire域。 // expire设置的是绝对时间,所以如果参数mode的值为HRTIMER_MODE_REL(即参数tim的值为相对时间),那么需要将tim的值修正为绝对时间: ...
初始化定时器工作模式:hrtimer_init(&kthread_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 设置定时器的回调函数:kthread_timer.function = hrtimer_cb_func; 启动定时器:hrtimer_start(&kthread_timer, ktime_set(HRTIMER_TEST_CYCLE), HRTIMER_MODE_REL); ...
1. struct hrtimer { 2. struct timerqueue_node node; 3. ktime_t _softexpires; 4. enum hrtimer_restart (*function)(struct hrtimer *); 5. struct hrtimer_clock_base *base; 6. long state; 7. ... 8. }; 1. 2. 3. 4. 5.