MX6LL控制LED设备

news2024/11/25 22:51:30

在这里插入图片描述

注:本篇基于野火IMX6LL PRO开发板

一.什么是驱动程序

驱动程序(Driver)是一种软件,用于充当操作系统与硬件设备之间的桥梁,使它们能够互相通信和交互。驱动程序的主要功能是提供一个标准化的接口,使操作系统能够控制和管理硬件设备,实现数据传输、设备配置、错误处理和其他与硬件相关的任务。

驱动程序通常由设备制造商或硬件供应商开发,以确保设备与操作系统之间的兼容性和良好的性能。不同类型的硬件设备(如声卡、显卡、网卡、打印机等)通常需要具有独立的驱动程序才能在操作系统中正常工作。

驱动程序的工作原理如下:

  1. 识别硬件设备:操作系统会通过一个过程来识别系统中连接的硬件设备。识别的过程中,操作系统会通过与设备通信交换特定的标识信息或查询设备的特征。

  2. 加载驱动程序:一旦设备被识别,操作系统会查找设备对应的驱动程序。操作系统会根据设备的标识信息或其他特征来确定正确的驱动程序,并将其加载到内存中。

  3. 初始化设备:在加载驱动程序后,操作系统会调用相应的驱动程序代码来初始化设备。这包括配置设备参数、分配设备内存、建立设备与操作系统的连接等。

  4. 提供接口与功能:一旦设备初始化完成,驱动程序会向操作系统提供一个标准化的接口,使操作系统能够与设备进行通信。通过这个接口,操作系统可以向设备发送指令、请求数据、接收设备状态等,并获得设备提供的功能。

  5. 处理异常和错误:驱动程序还负责处理设备发生的异常和错误情况。例如,当设备发生故障或出现错误时,驱动程序会向操作系统报告错误信息或采取适当的纠正措施。

总而言之,驱动程序在操作系统中起着至关重要的作用,它们是实现硬件设备和操作系统之间无缝通信的关键组成部分。通过驱动程序的配合,操作系统可以管理和控制各种硬件设备,为用户提供更好的使用体验和功能扩展。

本质:为硬件设备创建相应的设备节点文件,创建设备文件时,规定好设备文件的使用方式。

二.应用程序

应用程序(Application Program)是一种软件,旨在帮助用户执行特定的任务或完成特定的功能。应用程序通常由开发人员或软件公司开发,以满足用户的需求并提供特定的功能和服务。

应用程序可以运行在各种计算设备上,包括个人电脑、智能手机、平板电脑、服务器等。它们可以包含各种类型的软件,如办公软件、娱乐软件、图像处理软件、游戏软件、通信软件等。应用程序的种类和功能范围广泛,以满足各行各业的需求。

应用程序的特点如下:

  1. 用户界面:应用程序通常具有用户界面,以便用户能够与其进行交互和操作。用户界面可以是图形用户界面(GUI)或命令行界面(CLI),具体取决于应用程序的类型和设计。

  2. 功能和任务:应用程序旨在提供特定的功能和执行特定的任务。不同的应用程序具有不同的功能,例如文字处理、电子表格计算、音频播放、视频编辑等。

  3. 数据处理:许多应用程序需要处理数据,如存储、读取、修改和分析数据。这可以是用户输入的数据、从外部源获取的数据或应用程序自身生成的数据。

  4. 持久性:应用程序通常需要存储和管理数据。这可能涉及到将数据保存到文件、数据库或其他存储介质中,以便在需要时进行读取和使用。

  5. 可定制性:一些应用程序允许用户根据自己的需求进行定制和配置。这可以包括更改用户界面的外观、设置偏好项、添加插件或扩展功能等。

应用程序的开发通常涉及编程语言、开发工具和技术。开发人员使用这些工具和技术来设计、编写、测试和发布应用程序。一旦应用程序开发完成,用户可以通过安装或下载它来使用,并根据自己的需要进行操作和配置。

综上所述,应用程序是为了满足用户需求和提供特定功能而设计的软件。它们为用户提供了各种各样的功能和服务,使用户能够更好地利用计算设备来完成特定任务或获得所需的功能。

本质:根据驱动程序规定的设备文件使用方式去控制硬件

控制硬件设备步骤

1.找到硬件设备所对应的设备节点文件

  • /dev目录下
  • /sys目录下
    2.找出驱动程序规定的设备文件使用方式,并进行调用。

三.LED小demo

led.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

//ARM 开发板LED设备路径宏定义
#define RLED_DEV_PATH "/sys/class/leds/red/brightness"
#define GLED_DEV_PATH "/sys/class/leds/green/brightness"
#define BLED_DEV_PATH "/sys/class/leds/blue/brightness"

int main(int argc, char *argv[])
{

    int res = 0;
    int r_fd, g_fd, b_fd;

    printf("This is led demo\n");

    //获取三个灯的文件描述符
    r_fd = open(RLED_DEV_PATH, O_WRONLY);
    if (r_fd < 0)
    {
        printf("Fail to Open %s device\n", RLED_DEV_PATH);
        exit(1);
    }

    g_fd = open(GLED_DEV_PATH, O_WRONLY);
    if (r_fd < 0)
    {
        printf("Fail to Open %s device\n", GLED_DEV_PATH);
        exit(1);
    }

    b_fd = open(BLED_DEV_PATH, O_WRONLY);
    if (r_fd < 0)
    {
        printf("Fail to Open %s device\n", BLED_DEV_PATH);
        exit(1);
    }

    while (1)
    {
        //红灯亮一秒
        write(r_fd, "255", 3);
        sleep(1);
        write(r_fd, "0", 1);

        //绿灯亮一秒
        write(g_fd, "255", 3);
        sleep(1);
        write(g_fd, "0", 1);

        //红灯亮一秒
        write(b_fd, "255", 3);
        sleep(1);
        write(b_fd, "0", 1);
    }
    write(r_fd, "0", 1);
    write(g_fd, "0", 1);
    write(b_fd, "0", 1);
    close(r_fd);
    close(g_fd);
    close(b_fd);
    return 0;
}

Makefile

ARCH ?= x86

ifneq ($(ARCH),x86)
        CC=gcc
else
        CC=arm-linux-gnueabihf-gcc
endif



#TARGET 目标生成文件
TARGET=led


#生成目录
BUILD_DIR=build

#存放.c的目录
SRC_DIR=led


#存放所有的.c文件,包含路径
SOURCES=$(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.c))


#存放所有的.o文件
OBJS=$(patsubst %.c,$(BUILD_DIR)/%.o,$(notdir $(SOURCES)))


#定义额外的搜索路径
VPATH=$(SRC_DIR)

$(BUILD_DIR)/$(TARGET):$(OBJS)
        $(CC) $^ -o $@

$(BUILD_DIR)/%.o:%.c | create_build
        $(CC) -c $< -o $@


.PHONY:clear earth create_build

clear:
        rm -rf $(BUILD_DIR)

earth:
        . /etc/profile

create_build:
        mkdir -p $(BUILD_DIR)

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

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

相关文章

从0搭建夜莺v6基础监控告警系统(一):基础服务安装

文章目录 1. 写在前面1.1. 官方文档传送门1.2. 部署环境 2. 服务安装2.1. 基础设置2.2. 安装中间件2.3. 安装 nightingale-v62.4. 安装 VictoriaMetrics2.5. 安装 Categraf 3. 部署总结3.1. 安装总结 1. 写在前面 1.1. 官方文档传送门 项目介绍 架构介绍 仪表盘 黄埔营培训计…

来袭!SOLIDWORKS 2024 主要增强功能

在SOLIDWORKS软件使用过程中&#xff0c;我们知道您创建了出色的设计&#xff0c;您的出色设计也会得到构建。为了简化和加快从概念到制造产品的产品开发流程&#xff0c;SOLIDWORKS 2024 包含用户驱动的全新增强功能&#xff0c;重点关注&#xff1a; • 提高工作智能化程度。…

怎么在便携式手持嵌入式设备中实现安全的数字数据传输

为了实施附加的安全性&#xff0c;一些密码算法也可以指定一组不应从设备公开的常数值。这些存储在设备中的&#xff0c;需要防止未经授权暴露的秘密密钥和秘密值在一系列文章中被称为“秘密密钥”。 秘密密钥存储在设备内部&#xff0c;甚至在设备的整个生命周期中都存在。设…

浅谈双十一背后的支付宝LDC架构和其CAP分析

本人汤波&#xff0c;superthem.com 圆领超级个体创始人&#xff0c;Github page地址&#xff1a;https://tbwork.github.io/ 看到很多人在盗用我的文章&#xff0c;还标记成原创&#xff0c;进行收费&#xff0c;非常令人作呕。 我的所有技术文章全部免费阅读&#xff0c;大家…

在Python中 作用域与命名空间的坑

前言&#xff1a; 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 1. 命名空间 1.1 什么是命名空间 Namespace命名空间&#xff0c;也称名字空间&#xff0c;是从名字到对象的映射。 Python中&#xff0c;大…

VMware17 不可恢复错误mks解决方案

用的虚拟机VMware17版本&#xff0c;然后运行带HDR的unity程序&#xff0c;结果报错 网上找了很多解决方案&#xff0c;都没用。毕竟需要在不放弃虚拟机3D加速的情况下运行。 最终皇天不负有心人&#xff0c;亲测有效的方法&#xff1a; 在虚拟机名字.vmx文件里添加以下2行&a…

【整理】难得的中文开源数据集

搞大模型训练&#xff0c;最重要的就是高质量的数据集。 得数据者得天下。全球最大的AI开源社区Huggingface上&#xff0c;已经有5万多的开源数据集了&#xff0c;其中涉及中文的数据集只有区区可怜的151个。中国的AI产业要迎头赶上&#xff0c;中文的数据集是最大的短板之一。…

IOTE2023物联网展最新快讯|央企入驻,找物联网平台这一家就够了

IOTE 2023第20届国际物联网展深圳站即将于9月20-22日在深圳国际会展中心&#xff08;宝安&#xff09;启幕&#xff01;航天科技控股集团股份有限公司旗下AIRIOT物联网平台亮相【工业物联网展区9B31-1展位】。 AIRIOT物联网平台定位于通用型物联网技术框架产品&#xff0c;以软…

oracle创建数据库以及用户,并导入dmp格式数据

oracle创建数据库以及用户&#xff0c;并导入dmp格式数据 安装可参考之前的文章https://blog.csdn.net/qq_43421954/article/details/132717546?spm1001.2014.3001.5501 首先创建表空间&#xff08;也就是其他数据库所谓的数据库&#xff09; 使用的是navicat,连接配置可以参…

python 异常

1.捕获异常 2.密码爆破 3.

Feign远程调用丢失请求头

前言 我们在写服务端项目的时候&#xff0c;总会限制对某些资源的访问&#xff0c;最常见的就是要求用户先登录才能访问资源&#xff0c;当用户登录后就会将此次会话信息保存进session&#xff0c;同时返回给浏览器指定的cookie键值&#xff0c;下次浏览器再次访问&#xff0c…

【虚拟现实】2023年VR技术的10个应用行业

1.医疗保健 现代医疗保健的培训方式离不开VR虚拟现实。。由于医疗行业的特殊性&#xff0c;不允许拿大量的病人来练手&#xff0c;但医疗又非常注重实践&#xff0c;一些新手医生就缺乏锻炼的机会&#xff0c;而VR虚拟现实技术很好的解决了这一问题。医生可以在高清晰、低延时…

【C++】搜索二叉树底层实现

目录 一&#xff0c;概念 二&#xff0c;实现分析 1. 插入 &#xff08;1.&#xff09;非递归版本 &#xff08;2.&#xff09;递归版本 2. 打印搜索二叉树 3.查找函数 &#xff08;1.&#xff09;非递归版本 &#xff08;2.&#xff09;递归版本 4. 删除函数&#x…

【Linux-Day13-生产者消费者模型】

生产者消费者模型 生产者消费者问题概述 生产者/消费者问题&#xff0c;也被称作有限缓冲问题。可以描述为&#xff1a;两个或者更多的线程共享同一个缓冲 区&#xff0c;其中一个或多个线程作为“生产者”会不断地向缓冲区中添加数据&#xff0c;另一个或者多个线程作为“消…

基于CNN-LSTM的时序预测MATLAB实战

一、算法原理 1.1 CNN原理 卷积神经网络具有局部连接、权值共享和空间相关等特性。卷积神经网络结构包含卷积层、激活层和池化层。 &#xff08;a&#xff09;二维卷积层将滑动卷积滤波器应用于输入。该层通过沿输入垂直和水平方向 移动滤波器对输入进行卷积&#xff0c;并计…

阿里云无影电脑:免费体验无影云电脑3个月

阿里云无影云电脑免费领取流程&#xff0c;免费无影云电脑配置为4核8G&#xff0c;可以免费使用3个月&#xff0c;阿里云百科分享阿里云无影云电脑&#xff08;云桌面&#xff09;免费申请入口、申请流程及免费使用限制条件说明&#xff1a; 目录 阿里云无影云电脑免费申请入…

汉威科技亮相上海传感器展并发表主题演讲,智能传感器大有可为

9月15日&#xff0c;第8届中国&#xff08;上海&#xff09;国际传感器技术与应用展览会圆满落幕&#xff0c;该展会吸引了逾400家传感领域国内外的企业、100余家专业传感应用单位、500余位传感大咖共同参与&#xff0c;展会观众达30000人。作为全球三大传感器展之一的盛会&…

2023年最热门的编程语言:前进的趋势和机会

2023年最热门的编程语言&#xff1a;前进的趋势和机会 2023年最热门的编程语言&#xff1a;前进的趋势和机会摘要引言1. 编程语言的热门趋势1.1 新兴编程语言的崛起1.2 编程语言的可持续性发展1.3 跨平台编程语言的兴起1.4 人工智能和机器学习编程语言的需求 2. 编程语言职业机…

Informatica使用操作流程--存储过程调用、序列生成器 使用案例5

映射 [创建]连接工作流 --创建工作流W_EMP_DEPT_COUNT,连接任务S_EMP_DEPT_COUNT,ctrls保存 --右击工作流-->通过任务启动工作流 存储数据的地方查验数据

00后卷王的软件测试面试秘籍(含文档)

前言 前段时间去面试了一个公司&#xff0c;成功拿到了offer&#xff0c;薪资也从12k涨到了20k&#xff0c;对于工作都还没两年的我来说&#xff0c;还是比较满意的&#xff0c;毕竟一些工作3、4年的可能还没我高。 我可能就是大家说的卷王&#xff0c;感觉自己年轻&#xff…