Kernel 5.1 uses delayed_work example

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/time.h>
#include <linux/timer.h>
#include <linux/delay.h>
#include <linux/leds.h>

#include <linux/gpio.h>

static struct timer_list tm;
static struct delayed_work delay_amov;

static void time_callback(struct timer_list *arg);

static void delay_work_func(struct work_struct *work)
{
    
    
    gpio_set_value(318,1);
}
static void time_callback(struct timer_list *arg)
{
    
    
    gpio_set_value(318,0);
    schedule_delayed_work(&delay_amov, msecs_to_jiffies(1000-2));	
    tm.expires = jiffies+1*HZ;
    add_timer(&tm); 
}

static int __init demo_init(void)
{
    
    
 
    timer_setup(&tm,time_callback,0);
    
    tm.expires = jiffies + 1*HZ;
    add_timer(&tm);
    gpio_set_value(318,1);   

    if(gpio_request(318,"amov_led"))
    {
    
    
        printk("led request error \n");
    }
    if(gpio_direction_output(318, 1))
    {
    
    
        printk("led set direction error \n");
    }
    gpio_set_value(318,1);

    INIT_DELAYED_WORK(&delay_amov, delay_work_func);

    return 0;
}
static void __exit demo_exit(void)
{
    
    
    gpio_free(318);
    del_timer(&tm);        
}
module_init(demo_init);
module_exit(demo_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Farsight");
MODULE_DESCRIPTION("Demo for kernel module");

おすすめ

転載: blog.csdn.net/qq_31057589/article/details/128386895