#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");
Kernel 5.1 uses delayed_work example
おすすめ
転載: blog.csdn.net/qq_31057589/article/details/128386895
おすすめ
ランキング