driver-know-hows

device driver related stuff

View on GitHub

Kernel Timer Demo

Description

Demonstrates kernel timers for periodic execution. Timers run in softirq context and are useful for polling, timeouts, and scheduled tasks.

Features

Build & Test

make

# Default: 1 second interval
sudo insmod timer_demo.ko

# Custom interval: 500ms
sudo insmod timer_demo.ko timer_interval_ms=500

# Watch timer fire
dmesg -w

# Unload (cancels timer)
sudo rmmod timer_demo

Expected Output

=== Kernel Timer Demo ===
Timer interval: 1000 ms
HZ (timer frequency): 250
Jiffies at init: 4294892314
Timer started - will fire 10 times

Timer fired! Count: 1, jiffies: 4294892564
Timer rescheduled for 1000 ms
Timer fired! Count: 2, jiffies: 4294892814
Timer rescheduled for 1000 ms
...
Timer fired! Count: 10, jiffies: 4294895064
Timer finished after 10 callbacks

(On rmmod):
Timer was already inactive
Timer demo: Fired 10 times total

Module Parameters

# Fast timer (100ms)
sudo insmod timer_demo.ko timer_interval_ms=100

# Slow timer (5 seconds)
sudo insmod timer_demo.ko timer_interval_ms=5000

Time Concepts

Jiffies

Time Conversion

msecs_to_jiffies(1000)  // 1 second in jiffies
jiffies_to_msecs(HZ)    // HZ jiffies to milliseconds

Use Cases

Learning Points

Advanced: High-Resolution Timers

For sub-jiffy precision, use hrtimers (not covered in this example):

#include <linux/hrtimer.h>
// See kernel documentation for hrtimer API