#include <linux/init.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/gpio.h>
#include <linux/timer.h>
/* myled
{
led1-gpio=<&gpioe 10 0>;
led2-gpio=<&gpiof 10 0>;
led3-gpio=<&gpioe 8 0>;
};
*/
struct device_node *dnode;
struct gpio_desc *gpiono;
struct gpio_desc *gpiono2;
struct gpio_desc *gpiono3;
struct timer_list mytimer;
struct timer_list mytimer2;
void mytimer_function(struct timer_list *timer)
{
gpiod_set_value(gpiono, !gpiod_get_value(gpiono));
gpiod_set_value(gpiono2, !gpiod_get_value(gpiono2));
gpiod_set_value(gpiono3, !gpiod_get_value(gpiono3));
mod_timer(timer, jiffies + HZ);
}
void mytimer_function2(struct timer_list *timer2)
{
printk("hello world\n");
mod_timer(timer2, jiffies + HZ*5);
}
static int __init mycdev_init(void)
{
// 解析设备树节点信息
dnode = of_find_node_by_path("/myled");
if (dnode == NULL)
{
printk("解析设备树节点失败\n");
return -ENXIO;
}
// 获取LED1 GPIO编号
gpiono = gpiod_get_from_of_node(dnode, "led1-gpio", 0, GPIOD_OUT_LOW, NULL);
if (IS_ERR(gpiono))
{
printk("申请gpio信息失败\n");
return -PTR_ERR(gpiono);
}
// 灯亮
//gpiod_set_value(gpiono, 1);
// 获取LED2 GPIO编号
gpiono2 = gpiod_get_from_of_node(dnode, "led2-gpio", 0, GPIOD_OUT_LOW, NULL);
if (IS_ERR(gpiono2))
{
printk("申请gpio信息失败\n");
return -PTR_ERR(gpiono2);
}
// 灯亮
//gpiod_set_value(gpiono2, 1);
// 获取LED3 GPIO编号
gpiono3 = gpiod_get_from_of_node(dnode, "led3-gpio", 0, GPIOD_OUT_LOW, NULL);
if (IS_ERR(gpiono3))
{
printk("申请gpio信息失败\n");
return -PTR_ERR(gpiono3);
}
// 灯亮
//gpiod_set_value(gpiono3, 1);
timer_setup(&mytimer, mytimer_function, 0);
mytimer.expires = jiffies + HZ;
add_timer(&mytimer);
timer_setup(&mytimer2, mytimer_function2, 0);
mytimer2.expires = jiffies + 5*HZ;
add_timer(&mytimer2);
return 0;
}
static void __exit mycdev_exit(void)
{
del_timer(&mytimer);
del_timer(&mytimer2);
gpiod_set_value(gpiono, 0);
// 释放GPIO编号
gpiod_put(gpiono);
gpiod_set_value(gpiono2, 0);
// 释放GPIO编号
gpiod_put(gpiono2);
gpiod_set_value(gpiono3, 0);
// 释放GPIO编号
gpiod_put(gpiono3);
}
module_init(mycdev_init);
module_exit(mycdev_exit);
MODULE_LICENSE("GPL");
驱动DAY8
Y-O-Y2023-10-28 13:11
相关推荐
7yewh几秒前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目Arenaschi4 分钟前
在Tomcat中部署应用时,如何通过域名访问而不加端口号小张认为的测试4 分钟前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表waicsdn_haha12 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】打鱼又晒网12 分钟前
linux网络套接字 | 深度解析守护进程 | 实现tcp服务守护进程化良许Linux26 分钟前
0.96寸OLED显示屏详解蜜獾云37 分钟前
docker 安装雷池WAF防火墙 守护Web服务器小屁不止是运维38 分钟前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解Hacker_Oldv43 分钟前
WPS 认证机制bitcsljl1 小时前
Linux 命令行快捷键