35.linux的定时器使用

linux的定时器是一种基于未来时间点的定时器。定时器以现在的时间为起始点,以未来的某一时间为定时器的终点。类似于手机的闹钟,定于7点,响铃之后还想再睡会,可以延期5分钟,到了7点5分就响。

示例:

timer.c编写

cpp 复制代码
#include <linux/module.h>
#include <linux/init.h>
#include <linux/time.h>

static void timer_function(struct timer_list *timer){
    printk("this is timer test\n");
}

DEFINE_TIMER(test_timer,timer_function);
//param1:定时器结构体,param2:到点触发函数
static int helloworld_init(void){
    printk("hello timer\n");
    test_timer.expires = jiffies_64 + msecs_to_jiffies(5000);
    add_timer(&test_timer);
	return 0;
}
static void helloworld_exit(void){
    del_timer(&test_timer);
    printk("bye timer\n");
}

module_init(helloworld_init);
module_exit(helloworld_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("quan");
MODULE_VERSION("v1.0");

Makefile编写

bash 复制代码
# KBUILD_CFLAGS_MODULE += -DDEBUG=3
EXTRA_CFLAGS += -DDEBUG=3
obj-m += timer.o
KDIR:=/lib/modules/6.2.0-37-generic/build
# KDIR:=/usr/src/linux-source-6.2.0/
PWD?=$(shell pwd)
all:
	make -C $(KDIR) M=$(PWD) modules
	echo $(PWD)
clean:
	rm -rf *.ko *.o  *.mod *.mod.o *.mod.c *.symvers *.order

编译及测试

bash 复制代码
sudo make
sudo insmod timer.ko
sudo dmesg

效果
[ 3911.187042] hello timer
[ 3916.191133] this is timer test

可以看出五秒产生一次打印

相关推荐
春日见17 小时前
控制算法:PP(纯跟踪)算法
linux·人工智能·驱动开发·算法·机器学习
一路往蓝-Anbo21 小时前
第五篇:硬件接口的生死劫 —— GPIO 唤醒与测量陷阱
c语言·驱动开发·stm32·单片机·嵌入式硬件
春日见1 天前
控制算法:PID算法
linux·运维·服务器·人工智能·驱动开发·算法·机器人
A-花开堪折1 天前
Qemu-NUC980(十一):SPI Controller
linux·arm开发·驱动开发·嵌入式硬件
yuanmenghao1 天前
自动驾驶中间件iceoryx - 同步与通知机制(一)
开发语言·网络·驱动开发·中间件·自动驾驶
欢乐熊嵌入式编程2 天前
嵌入式 LCD 驱动开发全流程详解
驱动开发·嵌入式开发·嵌入式学习·嵌入式如何快速入门
yuanmenghao2 天前
CAN系列 — (6) CAN FD 带宽、CPU、中断:工程上是如何一起算的?
网络·驱动开发·单片机·mcu·自动驾驶·信息与通信
食咗未2 天前
Linux tcpdump工具的使用
linux·服务器·网络·驱动开发·tcp/ip·测试工具·tcpdump
咕噜咕噜万3 天前
ATDD实践:验收测试驱动开发的完整方法论与工具链
驱动开发
Guistar~~3 天前
【Linux驱动开发IMX6ULL】WS73 驱动移植的详细教程基于USB协议--WIFi网卡、蓝牙BLE、星闪SLE
linux·驱动开发