MX6LL控制LED设备

2023年 9月 26日 88.7k 0

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

一.什么是驱动程序

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

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

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

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

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

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

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

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

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

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

    二.应用程序

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

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

    应用程序的特点如下:

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

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

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

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

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

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

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

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

    控制硬件设备步骤

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

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

    三.LED小demo

    led.c

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    //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 $

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论