【day8】驱动

news2024/12/26 21:18:56

作业:通过GPIO子系统编写LED灯的驱动,应用程序测试
在led驱动中设置一个定时器,实现底板三盏灯一秒亮一秒灭
1.找引脚
led1---->gpioz组5号引脚
led2---->gpioz组6号引脚
led3---->gpioz组7号引脚
在这里插入图片描述
2.加设备树节点

	//led的设备树节点
	leds{
	led1-gpio=<&gpioe 10 0>;//10表示当前节点使用gpioe的第10个引脚,0表示对于这个引脚信息按照默认描述
	led2-gpio=<&gpiof 10 0>;
	led3-gpio=<&gpioe 8 0>;
	led4-gpio=<&gpioz 5 0>;
	led5-gpio=<&gpioz 6 0>;
	led6-gpio=<&gpioz 7 0>;
	};
};

3.写驱动

#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>
/*leds{
    led1-gpio=<&gpioe 10 0>;//10表示当前节点使用的时gpioe的第10个管脚 0,表示对于这个管脚信息按照默认描述
    led1-gpio=<&gpiof 10 0>;
    led1-gpio=<&gpioe 8 0>;
};*/
struct device_node *dev;
struct gpio_desc *gpiono4;
struct gpio_desc *gpiono5;
struct gpio_desc *gpiono6;
//分配定时器对象
struct timer_list mytimer;
//定时器处理函数
void mytimer_handler(struct timer_list *timer)
{
    //实现LED456一秒亮一秒灭
    gpiod_set_value(gpiono4,!gpiod_get_value(gpiono4));
    gpiod_set_value(gpiono5,!gpiod_get_value(gpiono5));
    gpiod_set_value(gpiono6,!gpiod_get_value(gpiono6));
    //再次启用定时器
    mod_timer(timer,jiffies+HZ);
}
static int __init mycdev_init(void)
{
    //解析LED设备树节点
    dev = of_find_node_by_path("/leds");
    if (dev==NULL)
    {
        printk("解析设备树节点失败\n");
        return -ENXIO;
    }
    printk("解析设备树节点成功\n");
    //申请gpio_desc 对象并且设置输出为低电平
   gpiono4 = gpiod_get_from_of_node(dev,"led4-gpio",0,GPIOD_OUT_LOW,NULL);
    if (IS_ERR(gpiono4))
    {
        printk("申请gpio对象失败\n");
        return -PTR_ERR(gpiono4);
    }
    printk("申请gpio对象成功\n");
    gpiono5 = gpiod_get_from_of_node(dev,"led5-gpio",0,GPIOD_OUT_LOW,NULL);
    if (IS_ERR(gpiono5))
    {
        printk("申请gpio对象失败\n");
        return -PTR_ERR(gpiono5);
    }
    printk("申请gpio对象成功\n");
    gpiono6 = gpiod_get_from_of_node(dev,"led6-gpio",0,GPIOD_OUT_LOW,NULL);
    if (IS_ERR(gpiono6))
    {
        printk("申请gpio对象失败\n");
        return -PTR_ERR(gpiono6);
    }
    printk("申请gpio对象成功\n");
    //初始化定时器对象
    mytimer.expires=jiffies+HZ;//设置定时1s
    timer_setup(&mytimer,mytimer_handler,0);
    //注册定时器对象
    add_timer(&mytimer);
    return 0;
}
static void __exit mycdev_exit(void)
{
    //注销定时器
    del_timer(&mytimer);
    //灭灯
    gpiod_set_value(gpiono4,0);
    gpiod_set_value(gpiono5,0);
    gpiod_set_value(gpiono6,0);
    gpiod_put(gpiono4);
    gpiod_put(gpiono5);
    gpiod_put(gpiono6);

}
module_init(mycdev_init);
module_exit(mycdev_exit);
MODULE_LICENSE("GPL");

现象:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/918660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx中location语法有哪些?【杭州多测师_王sir】

1、location 介绍location是Nginx中的块级指令(block directive)&#xff0c;location指令的功能是用来匹配不同的url请求&#xff0c;进而对请求做不同的处理和响应&#xff0c;这其中较难理解的是多个location的匹配顺序&#xff0c;本文会作为重点来解释和说明。开始之前先明…

【Linux】GNOME图形化界面安装

Linux下具有多种图形化界面&#xff0c;每种图形化界面具有不同的功能&#xff0c;在这里我们安装的是GNOME。 1、 挂载yum源 挂载之前首先确保使用ISO映像文件 2.挂载之前先在/mnt下面创建一个cdrom目录用来作为挂载点目录 挂载完成之后那么就要去修改yum源了 Vi /etc/yum.r…

IntelliJ IDEA maven配置,设置pom.xml的配置文件

IntelliJ IDEA项目&#xff0c;选择 文件 设置&#xff0c;弹窗 构建、执行、部署 构建工具 Maven就可以 maven配置好以后&#xff0c;在pom.xml的配置文件中就可以设置对应的jar包了&#xff0c;这样构建的时候自动需要的jar&#xff0c;在项目中导入即 需要的jar包设置在po…

数据驱动工作效率提升的5个层次—以PreMaint设备数字化平台为例

在现代工业领域&#xff0c;数据分析已成为提升工作效率和优化生产的不可或缺的工具。从描述性分析到规范性分析&#xff0c;数据分析逐步揭示了设备运行和维护的深层信息&#xff0c;帮助企业更明智地做出决策。本文将以PreMaint设备数字化平台为例&#xff0c;探讨工业数据驱…

平面设计除了PS还有哪些工具推荐

平面设计在我们的日常生活中无处不在。无论是传统媒体还是网络媒体&#xff0c;我们每天都会沉浸在大量的平面设计作品中。因此&#xff0c;我们或多或少会对设计有自己的看法。其实&#xff0c;即使是非专业人士&#xff0c;市场上也有很多平面设计软件&#xff0c;本文盘点了…

docker 搭建私有仓库和制作镜像

目录 1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 1.1 启动mysql镜像 1.2 启动owncloud镜像 1.3 浏览器访问 1.4 总结 2、安装搭建私有仓库 Harbor 2.1 下载docker-compose并赋予执行权限 2.2 磁盘挂载&#xff0c;保存harbor 2.3 修改配置文件…

最新的单机Lustre文件系统的安装

1.单机Lustre的搭建&#xff1a; 主机名IP地址内存添加的共享磁盘大小Centos7.9-test机192.168.10.30/241G20G 1.安装E2fsprogs包 下载OSS服务器所需要的包&#xff1a;E2fsprogs包只是在Ext4的原版RPM包基础上增加了对Lustre⽀持 mkdir ~/e2fsprogs && cd ~/e2fspro…

day-29 代码随想录算法训练营 回溯part5

491.递增子序列 分析&#xff1a;存在重复元素&#xff0c;求递增子序列思路&#xff1a;1.树层去重2.当 i>0 时当前位大于上一位 思路&#xff1a; 去重逻辑在每一层都需要重新创建&#xff08;每一层遍历&#xff09;&#xff0c;且不能影响到下一层递归 class Soluti…

认识SpringIOC容器

目录 一、SpringFrameWork 二、SpringIOC容器 三、SpringIoc的核心功能 一、SpringFrameWork 1.SpringFrameWork与Spring之间的关系 SpringFrameWork是SpringCould、SpringMVC等等技术的基础实现的&#xff0c;而所有的SpringCloud、SpringFrameWork、SpringMVC等等技术组…

spring之深入理解Spring框架的核心模块与功能

深入理解Spring框架的核心模块与功能 标题: 深入理解Spring框架的核心模块与功能摘要:引言:词汇解释:详细介绍:详细介绍Spring的核心模块&#xff1a;Spring Core、Beans、ContextSpring Core:Beans:Context: 注意事项:Spring数据访问模块&#xff1a;JDBC、ORM、事务管理JDBC&…

【LVS集群】

目录 一、集群概述 1.负载均衡技术类型 2.负载均衡实现方式 二、LVS结构 1.三层结构 2.架构对象 三、LVS工作模式 四、LVS负载均衡算法 1.静态负载均衡 2.动态负载均衡 五、ipvsadm命令详解 1. -A 2. -D 3. -L 4. -a 5. -d 6. -l 7. -t 8. -s 9. -r 10. -…

【IDEA配置创建类注释模板和方法模板教程】

IDEA配置创建类注释模板和方法模板教程 废话不多说直接上干货 废话不多说直接上干货 先看效果: 类: 方法: IDEA类注释模板 &#xff0c;配置步骤&#xff1b; 直接用模板: /*** description: ${description}* author: Lynn.OuYang* create: ${YEAR}-${MONTH}-${DAY} ${HOU…

实验六 u-boot-2013.01移植

【实验目的】 了解u-boot 的代码结构及移植的基本方法 【实验环境】 ubuntu 14.04发行版FS4412实验平台交叉编译工具arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行 【实验步骤】 一、建立自己的平台 下载uboot源码 在uboo…

怎么检测UI卡顿?(线上及线下)

什么是UI卡顿&#xff1f; 在Android系统中&#xff0c;我们知道UI线程负责我们所有视图的布局&#xff0c;渲染工作&#xff0c;UI在更新期间&#xff0c;如果UI线程的执行时间超过16ms&#xff0c;则会产生丢帧的现象&#xff0c;而大量的丢帧就会造成卡顿&#xff0c;影响用…

PDF校对工具正式上线,为用户提供卓越的文档校对解决方案

为满足当下对数字化文档校对的精准需求&#xff0c;我们今日正式发布全新的PDF校对工具。经过深入的技术研发与细致的测试&#xff0c;该工具旨在为企业和个人用户带来一个高效且准确的PDF文档校对平台。 PDF校对工具的主要特性&#xff1a; 1.全面性校对&#xff1a;工具支持…

尚硅谷大数据项目《在线教育之离线数仓》笔记003

视频地址&#xff1a;尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 第8章 数仓开发之DIM层 P039 P040 P041 P042 P043 P044 P045 P046 P047 P048 第8章 数仓开发之DIM层 P039 第8章 数仓开发之DIM层 DIM层设计要点&#xff1a; &#xff08;1&a…

项目计划怎么写? 6 个步骤助你万无一失

项目计划是项目管理的关键步骤&#xff0c;如果跳过这一步&#xff0c;项目还未启动就已岌岌可危。 什么是项目计划&#xff1f; 项目计划是实现特定目标或成果的详细路线图。它是一份全面的文件&#xff0c;回答了 “谁”、“什么”、“为什么”、"如何 "和 "…

美容行业如何快速搭建自己的预约小程序?

现在&#xff0c;搭建一个专属于美容行业的预约小程序不再是只有程序员才能做到的事情了。有了一些小程序制作平台的存在&#xff0c;任何人都可以轻松地制作出自己的小程序。下面&#xff0c;我将揭秘一个快速搭建专属美容行业预约小程序的秘诀。 首先&#xff0c;登录小程序制…

wazuh--sql检测

官网&#xff1a;Virtual Machine (OVA) - Installation alternatives Wazuh(Wazuh The Open Source Security Platform)&#xff1a;是一整套基于ossec安全检测工具和EFK日志工具构成的终端安全管理工具。不管是将其分类至HIDS&#xff0c;还是EDR&#xff0c;它都是一套通过…

【Linux】线程篇Ⅱ:

线程Ⅱ &#x1f517;接上篇【线程篇Ⅰ】五、线程库 和 线程 id六、同步与互斥 &#x1f517;接上篇【线程篇Ⅰ】 &#x1f449;【Linux】线程篇Ⅰ&#xff1a;线程和task_struct 执行流的理解、相关接口命令、线程异常、线程的私有和共享 五、线程库 和 线程 id 对于 Linux …