我有一个我构建的内核模块,它需要至少 1 毫秒的时间分辨率。我目前使用 do_gettimeofday() 但我担心一旦我将模块移动到嵌入式设备,这将不起作用。该设备有一个 180 Mz 处理器 (MIPS),内核中的默认 HZ 值为 100。因此使用 jiffies 最多只能给我 10 毫秒的分辨率。那不会削减它。
我想知道的是 do_gettimeofday() 是否基于定时器中断(HZ)。能否保证提供至少 1 ms 的分辨率?
谢谢!
我有一个我构建的内核模块,它需要至少 1 毫秒的时间分辨率。我目前使用 do_gettimeofday() 但我担心一旦我将模块移动到嵌入式设备,这将不起作用。该设备有一个 180 Mz 处理器 (MIPS),内核中的默认 HZ 值为 100。因此使用 jiffies 最多只能给我 10 毫秒的分辨率。那不会削减它。
我想知道的是 do_gettimeofday() 是否基于定时器中断(HZ)。能否保证提供至少 1 ms 的分辨率?
谢谢!
ms 不是微秒,而是毫秒。在不了解您选择的设备的更多信息的情况下,没有人可以回答诸如 gettimeofday 是否基于定时器中断这样一个依赖于实现的问题。如果您选择了一个知道指令集和时钟速度的设备,那么您为什么不查看该特定内核的实现来找出答案呢?
在嵌入式设备上,无法保证。鉴于它是基于 MIPS 的,它可能没问题,大多数 MIPS 机器都有循环计数器。但是,你将不得不去阅读内核那部分的源代码,看看它在你的平台上做了什么。
是的,您需要CONFIG_HIGH_RES_TIMERS
在内核中启用,并确保您的平台注册了clock_event_device
. 这是允许向用户空间公开高分辨率计时器的机制。您可以通过调用clock_getres()
用户空间来检查计时器的分辨率。