前言
这段时间我会把内核的小模块复习起来并记录成文章给大家发表出来,方便大家来学习,大家感兴趣的话可以点赞关注下,顺便说下想第一时间看我的文章的话可以点击公众号主页右上角有个设为星标,以免错过好文。先从定时器开始学习。
内核定时器简介
定时器是一个很常用的功能,需要周期性处理的工作都要用到定时器, 基本做驱动开发的人都要接触用到的。内核定时器因为采用系统时钟属于软件定时器所以他精度不高,不能作为高精度定时器使用,用法和硬件定时器一样,只不过不需要初始化一大堆寄存器而工作,需要注意一点是默认执行一次就结束了并不是周期性运行的,因此如果要想实现周期性的定时,就需要在定时处理函数中重新开启定时器。
内核定时器的数据结构
Linux内核使用 timer_list 结构体表示内核定时器, timer_list 定义在文件include/linux/timer.h 中
struct timer_list {
/*
¦* All fields that change during normal runtime grouped to the
¦* same cacheline
¦*/
struct hlist_node entry;
unsigned long expires; //定时器的超时时间,单位不是时长,单位是节拍数
void (*function