在 Linux 驱动程序中,获取毫秒数是一个常见任务。本文将介绍几种常用的 来实现这一目标。
jiffies 计数器
jiffies 计数器是一个全局变量,递增表示自内核启动以来经过的节拍数。每个节拍的时长取决于系统的时钟速率,通常为 1 毫秒或 10 毫秒。要转换为毫秒,可以使用以下公式:
毫秒数 = jiffies * (1000 / HZ)
其中,HZ 是系统时钟速率,可以通过符号 HZ
获取。
gettimeofday() 函数
gettimeofday()
函数获取当前时间,以 struct timeval
结构返回。该结构包含两个成员:
* tv_sec
:自纪元以来经过的秒数。
* tv_usec
:微秒数(百万分之一秒)。
要获取毫秒数,可以用以下公式:
毫秒数 = tv_sec * 1000 + tv_usec / 1000
ktime_get() 函数
ktime_get()
函数获取当前时间,以 ktime_t
类型返回。这种类型表示自一个任意时间点以来经过的时间,以纳秒为单位。要转换为毫秒,可以使用以下公式:
毫秒数 = ktime_get() / 1000000
哪个 最合适?
这取决于具体要求和驱动程序的上下文。对于高精度计时,建议使用 gettimeofday()
或 ktime_get()
函数。如果需要较粗粒度的计时,jiffies 计数器可以是一个更简单、更有效的选择。