実装のLinuxカーネルドライバのマイクロ秒タイマー
#include <linuxの/ module.h> の#include <linuxの/ kthread.h> の#define TIMEOUT_HR 1000000 / * 1US * / 静的構造体hrtimer etx_hr_timer。 ktime_t ktime; 列挙型 hrtimer_restart hrtimer_callback(構造体 hrtimer * タイマー) { 静的int型の数。 printk(KERN_INFO " hrtimerコールバックが実行されている数:%dの\ nは"、カウント++ ); hrtimer_forward_now(タイマー、ktime_set(0 、TIMEOUT_HR)); リターンHRTIMER_RESTART。 } 静的int型 __init lkm_init(無効 ) { のprintk(KERN_INFO " INIT LKMモジュール\ N。" ); / * 设置高精度时钟* / ktime = ktime_set(0 、TIMEOUT_HR)。 hrtimer_init( &etx_hr_timer、CLOCK_MONOTONIC、HRTIMER_MODE_REL)。 etx_hr_timer.function =&hrtimer_callback。 hrtimer_start( &etx_hr_timer、ktime、HRTIMER_MODE_REL)。 リターン 0 ; } 静的 ボイド __exitのlkm_exit(ボイド) { hrtimer_cancel( &etx_hr_timer)。 printk(KERN_INFO 」出口LKMモジュール\ N。" ); } module_init(lkm_init); module_exit(lkm_exit); MODULE_VERSION(" 0.0 " ); MODULE_DESCRIPTION(" サンプルカーネルモジュール" ); MODULE_LICENSE(" GPL 」); MODULE_AUTHOR("panda_w ")。
品質ブログ:
https://blog.csdn.net/qq_37858386/article/details/85784994