控制LED灯设备

驱动程序

本质:为硬件设备创建相应的设备节点文件

创建设备文件时,规定好设备文件的使用方式。

应用程序

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

控制硬件设备步骤

1、找出硬件设备所对应的设备节点文件

两个地方:

  • /dev目录下

    对驱动程序熟悉的工程师可以使用,一个设备节点文件控制硬件全部特性

  • /sys目录下

    业余工程师使用,一个设备节点文件只控制硬件的一个特性

    严格来说,它下面的文件是Linux内核导出到用户空间的硬件操作接口

2、找出驱动程序规定的设备文件使用方式

LED灯程序

设备节点文件:/sys/class/leds

往brightness文件写入一个数值,就能控制led灯的亮度

led亮度值:0~255

LED应用程序搭建步骤

1. 先将一个part_1复制到NFS服务器的共享文件夹中

sudo cp -r makefile/part_1 workdir

2. 然后查看Linux本地挂载目录,成功读取到

3. 找到LED设备的文件路径

4. 接下来在Ubuntu上编写代码

先创建好工程文件目录

在共享文件夹中创建part_1作为工程目录,添加头文件目录,源文件目录,Makefile文件。如下:

在module1中编写main.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 the led demon\r\n");//获取红灯的设备文件描述符r_fd = open(RLED_DEV_PATH, O_WRONLY);if(r_fd < 0){printf("Fail to open %s device\r\n", RLED_DEV_PATH);}//获取绿灯的设备文件描述符g_fd = open(GLED_DEV_PATH, O_WRONLY);if(g_fd < 0){printf("Fail to open %s device\r\n", GLED_DEV_PATH);}//获取蓝灯的设备文件描述符b_fd = open(BLED_DEV_PATH, O_WRONLY);if(b_fd < 0){printf("Fail to open %s device\r\n", BLED_DEV_PATH);}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);}
}

再编写Makefile文件,这里用之前的加以修改

ARCH ?= x86ifeq ($(ARCH),x86)CC=gcc
else#在开发板上编译CC=arm-linux-gnueabihf-gcc
endif
#程序名改为led
TARGET=led#编译路径
BUILD_DIR=build
#源文件路径
SRC_DIR=module1
#头文件路径
INC_DIR=includeCFLAGS=$(patsubst %,-I%,$(INC_DIR))
INCLUDES=$(foreach dir,$(INC_DIR),$(wildcard $(dir)/*.h))SOURCES=$(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.c))
OBJS=$(patsubst %.c,$(BUILD_DIR)/%.o,$(notdir $(SOURCES)))#让make在当前目录找不到的情况下,到所指定的目录中去找寻文件
VPATH=$(SRC_DIR)$(BUILD_DIR)/$(TARGET):$(OBJS)$(CC) $^ -o $@$(BUILD_DIR)/%.o:%.c $(INCLUDES) | creat_build$(CC) -c $< -o $@ $(CFLAGS).PHONY:clean create_buildclean:sudo rm -r $(BUILD_DIR)creat_build:sudo mkdir -p $(BUILD_DIR)

5. 在MobaX上,将存放在本地挂载目录中的part_1工程复制到开发板的 /home/user 目录下,进行编译。在开发板里面编译程序之前,需要提前安装gcc和make工具。

sudo apt install gcc/make

6. 在编译后执行程序时出现了如下错误,表示无法打开设备文件

7. 这里一般要给root权限才能正常打开设备文件,如下所示:

8. 之后便可以正常执行,led灯三种颜色交替闪烁。

十、Linux开发板控制LED灯设备相关推荐

  1. 第45讲 控制LED灯设备

    学习资料来自于: 野火[第一期]Linux系列教学视频之"零基础入门"篇,手把手教学,从0开始,基于野火i.MX6ULL Pro/MINI开发板 第45讲 控制LED灯设备_哔哩哔 ...

  2. 点亮stm32开发板的led灯

    点亮stm32开发板的led灯 简述 我使用的是STM公司stm32f103系列开发板,我们通过看原理图,对LED进行操作,以实现led灯的控制.(对于小白来说很有作用哈!废话不说,上料!) 1.查看 ...

  3. 【离线语音专题④】安信可VC离线语音开发板二次开发语音控制LED灯

    系列文章目录 [离线语音专题①]安信可最新离线语音模组VC系列出厂固件使用教程--SDK开源? [离线语音专题②]安信可语音开放平台的使用--VC系列SDK的获取 [离线语音专题③]安信可VC系列离线 ...

  4. 基于stm32通过HC_05(ZS-040)蓝牙模块用手机控制stm32开发板上led灯的亮灭

    文章目录 前言 一.HC-05蓝牙是什么? 二.应用实例步骤 1.使用AT指令对蓝牙的初始化 2.打开手机蓝牙助手查看是否搜索到该蓝牙 3.用蓝牙模块代替TTL连接stm开发板 4.创建项目开始配置相 ...

  5. 简单SOPC实例开发任务——控制led灯闪烁

    任务1:基于nios ii处理器系统控制一个led灯闪烁 硬件系统: Nios ii处理器 4KB片内ROM存储器用于存储程序代码以及程序运行空间: 4KB片内RAM存储器用于变量存储(R/W数据): ...

  6. 【安信可ESP32语音开发板专题①】ESP32-A1S音频开发板之离线语音识别控制LED灯

    ---------- 本博客学习由 安信可开源团队 潜心编写,做ESP32-A1S离线语音初步入门技术交流分享.如有不完善之处,请留言,本团队及时更改. 文章目录 一.前言 二.离线语音框架 2.1 ...

  7. esp32录音功能开发_【安信可ESP32语音开发板专题①】ESP32-A1S音频开发板之离线语音识别控制LED灯...

    本博客学习由 一.前言 离线语音,顾名思义:在不连网络的状态下,产品能识别语音指令并执行相应的控制输出. 安信可基于乐鑫ESP32芯片开发的ESP32-A1S开发板智能语音助手,可支持唤醒词引擎(Wa ...

  8. Arduino系列之米思齐旋钮控制LED灯亮度

    Arduino系列之旋钮控制LED灯亮度 实验原理 电位器的旋钮旋转时改变电阻从而控制LED灯的亮度! 实验所需材料 arduino开发板,LED灯,电位器,1602液晶显示器,杜班线很多根,公母线很 ...

  9. 红外控制LED灯的亮灭———Arduino

    Arduino的中文社区:https://www.arduino.cn/ \黑脸,今天烧坏一个二极管. 原因:正负极没反,没接电阻. 把自己头打烂了- 1. 所需硬件 开发板,led灯(多个),遥控器 ...

  10. 驱动开发--创建设备文件--控制LED灯

    目录 1.手动创建设备文件 2.应用程序如何将数据传递给驱动 3.控制LED灯: 4.应用层控制灯 5.自动创建设备节点 1.手动创建设备文件 cat  /proc/devices 查看主设备号 su ...

最新文章

  1. HTTP精简教程一:Web网络基础
  2. asp.net 服务器应用程序不可用
  3. IIS7.0 网站发布页面显示 500 - 内部服务器错误。您要查找的资源有问题,无法显示...
  4. 程序员用5分钟,把一个400多MB的苹果安装包削掉了187MB
  5. htpdate代替ntpdate同步时间
  6. Table control中列隐藏实现方法
  7. 多线程存数据mysql_java 多线程存储数据库
  8. 批处理命令 / echo
  9. 数据分析工具篇pyspark应用详解——Pyspark实现PCA主成分
  10. linux nsf 扫描,linux 使用NSF 映射远程磁盘目录的实现
  11. Linux基础操作及命令管理
  12. JDK的问题:用C启动虚拟机跟java运行结果有差异
  13. 对OB28的源代码进行调试
  14. Golang系列(四)之面向接口编程
  15. java程序猿面试问缺点怎么回答_面试程序员被问“你的缺点是什么”,我该怎么回答?...
  16. 【电脑删不掉文件或文件夹】总结7种方法永久删除!
  17. BMVC reading list
  18. IC验证笔试题(平头哥)
  19. 易捷行云大规模云数据中心小时级安装部署|轻运维之安装部署
  20. Magic Leap开发指南(7)-- 眼球追踪(Unity)

热门文章

  1. 生物医学数据统计分析-分类资料统计分析
  2. MATLAB角度转换
  3. 表格结构标签 thead tbody
  4. Pycharm导入已有的本地安装包
  5. Excel取整函数汇总
  6. c语言printf小数乘整数,如何将小数化为整数
  7. c语言中十六进制减法,二进制十进制十六进制
  8. 新版百元纸币下月发行!这些防伪你要知道
  9. python实战—考勤报表数据分析处理
  10. python中的反三角函数_用python画所有三角函数和反三角函数图像