先上代码,代码如下:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/gpio.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
#include <linux/platform_device.h>
#include <linux/of_gpio.h>
#include <linux/device.h>
#include <linux/ioctl.h>
#include <linux/err.h>
#include <linux/list.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/compat.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/irq.h>
#include <linux/of_irq.h>
#include <linux/interrupt.h>
#include <linux/clk-provider.h>
#include <linux/clk/ti.h>
#include <linux/clk.h>
#include <linux/io.h>
#include <linux/of_address.h>
#include <linux/delay.h>
#include <linux/sched.h>
#include <linux/timer.h>
#include <linux/workqueue.h>
#define WORK_DELAY_VALUE 1
static struct delayed_work delay_work1;
//延时时间到时,开始执行下面的函数
static void delay_work_func(struct work_struct *work)
{
printk("this is delay_work_func !\n");
//自己再启动自己,也可以在其他地方启动
schedule_delayed_work(&delay_work1, msecs_to_jiffies(WORK_DELAY_VALUE));
}
static int __init mod_init(void)
{
//初始化delay_work1,绑定执行函数
INIT_DELAYED_WORK(&delay_work1, delay_work_func);
//调用启动延时工作队列
schedule_delayed_work(&delay_work1, msecs_to_jiffies(WORK_DELAY_VALUE));
return 0;
}
module_init(mod_init);
static void __exit mod_exit(void)
{
cancel_delayed_work_sync(&delay_work1);
printk("############### %s %s !kernel\n", __FILE__, __func__);
}
module_exit(mod_exit);
MODULE_AUTHOR("lqd");
MODULE_LICENSE("GPL");
延时工作队列里面用到的延时msecs_to_jiffies时间设置,和之前介绍的 Linux 定时器的简单使用 里面的HZ是类似的。