概述:处理之前博客中遗留的问题。
在之前的博客里(Kernel 定时器的使用)中,遗留了两个问题
1. 是jiffies打印显示为负数
2. 超时时间差少了一个数量级
今天在真机上对该程序进行验证,验证结果如下,超时时间不太对啊
通过验证,发现
问题1得到修复;问题2 如果看jiffies的打印,是和程序设计不符合的,差值是:4295036160−4295035233 = 927,如果参照内核运行的时间:529.684004−526.595976 = 3.088,时间是符合设计的。
验证平台: RK3399 Android10
Kernel: kernel-4.19
通过验证,还有如下发现:
1. timer_list 结构体发生了变化
kernel-4.0的定义参照《kernel 定时数据机构和API》中的1
kernel-4.19 定义如下
- struct timer_list {
- /*
- * All fields that change during normal runtime grouped to the
- * same cacheline
- */
- struct hlist_node entry;
- unsigned long expires;
- void (*function)(struct timer_list *);
- u32 flags;
-
- #ifdef CONFIG_LOCKDEP
- struct lockdep_map lockdep_map;
- #endif
-
- ANDROID_KABI_RESERVE(1);
- ANDROID_KABI_RESERVE(2);
- };
===》 主要是回调函数参数发生了变化,由 unsigned long ----》 struct timer_list *。
2. timer的接口函数更改
kernel-4.0 timer 初始化是函数: setup_timer() 宏
参照《kernel 定时数据机构和API》中的2.1
kernel-4.19 timer 初始化是函数: timer_setup() 宏
- #define timer_setup(timer, callback, flags) \
- __init_timer((timer), (callback), (flags))
-
-
- #define __init_timer(_timer, _fn, _flags) \
- init_timer_key((_timer), (_fn), (_flags), NULL, NULL)
==> 只是更改了宏的名字。