Linux设备驱动指的定时与延时如何理解
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章为大家展示了Linux设备驱动指的定时与延时如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Linux通过系统硬件定时器以规律的间隔(由HZ度量
千家信息网最后更新 2026年11月02日Linux设备驱动指的定时与延时如何理解
本篇文章为大家展示了Linux设备驱动指的定时与延时如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
Linux通过系统硬件定时器以规律的间隔(由HZ度量)产生定时器中断,每次中断使得一个内核计数器的值jiffies累加,因此这个jiffies就记录了系统启动开始的时间流逝,然后内核据此实现软件定时器和延时。
Demo for jiffies and HZ
#includeunsigned long j, stamp_1, stamp_half, stamp_n; j = jiffies; /* read the current value */ stamp_1 = j + HZ; /* 1 second in the future */ stamp_half = j + HZ/2; /* half a second */ stamp_n = j + n * HZ / 1000; /* n milliseconds */
内核定时器
硬件时钟中断处理程序会唤起 TIMER_SOFTIRQ 软中断,运行当前处理器上到期的所有内核定时器。
定时器定义/初始化
在Linux内核中,timer_list结构体的一个实例对应一个定时器:
/* 当expires指定的定时器到期时间期满后,将执行function(data) */
/* 当expires指定的定时器到期时间期满后,将执行function(data) */ struct timer_list { unsigned long expires; /*定时器到期时间*/ void (*function)(unsigned long); /* 定时器处理函数 */ unsigned long data; /* function的参数 */ ... }; /* 定义 */ struct timer_list my_timer; /* 初始化函数 */ void init_timer(struct timer_list * timer); /* 初始化宏 */ TIMER_INITIALIZER(_function, _expires, _data) /* 定义并初始化宏 */ DEFINE_TIMER(_name, _function, _expires, _data)定时器添加/移除
/* 注册内核定时器,将定时器加入到内核动态定时器链表中 */ void add_timer(struct timer_list * timer); /* del_timer_sync()是 del_timer()的同步版,在删除一个定时器时需等待其被处理完, 因此该函数的调用不能发生在中断上下文 */ void del_timer(struct timer_list * timer); void del_timer_sync(struct timer_list * timer);
定时时间修改
int mod_timer(struct timer_list *timer, unsigned long expires);
延时
短延时
void ndelay(unsigned long nsecs); void udelay(unsigned long usecs); void mdelay(unsigned long msecs);
内核在启动时,会运行一个延迟测试程序(delay loop calibration),计算出lpj(loops per jiffy),根据lpj就实现了这几个函数,属忙等待。
长延时
一个很直观的方法是比较当前的 jiffies 和目标 jiffies:
int time_after(unsigned long a, unsigned long b); /* a after b, true */ int time_before(unsigned long a, unsigned long b); /* a before b */ int time_after_eq(unsigned long a, unsigned long b); /* a after or equal b */ int time_before_eq(unsigned long a, unsigned long b);/* a before or equal b */
睡着延时
void msleep(unsigned int millisecs); unsigned long msleep_interruptible(unsigned int millisecs); void ssleep(unsigned int seconds);
Tip: msleep()、 ssleep()不能被打断。
上述内容就是Linux设备驱动指的定时与延时如何理解,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
定时器
内核
时间
函数
处理
设备
设备驱动
驱动
内容
技能
知识
硬件
程序
系统
运行
简明
直观
简明扼要
上下
上下文
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海喔噻互联网科技有限公司
互联网是第几次科技革命的成果
科技互联网龙头
互联网科技有限公司图片
科技类互联网
金融科技与互联网金融
互联网科技作文
新浪科技互联网
融贸通互联网科技
互联网科技网站
深圳期待互联网科技
语蝶互联网科技有限公司
华夏互联网科技业
消费医药和互联网科技
开一家科技互联网公司需要多少钱
互联网企业科技类企业如何做账
江苏苏星互联网科技有限公司
杭州科技互联网公司有哪些
华人运通互联网科技公司
上海旺乐尼互联网科技有限公司
互联网电商科技
期待互联网科技
奇酷互联网络科技
成都互联网科技公司
朗涯互联网科技
猫创互联网科技
互联网公司科技股
互联网第三次科技革命特征
互联网科技新闻
兰石爱特工业互联网科技分公司