十、Linux开发板控制LED灯设备
2023-09-11 14:20:47 时间
控制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 ?= x86
ifeq ($(ARCH),x86)
CC=gcc
else
#在开发板上编译
CC=arm-linux-gnueabihf-gcc
endif
#程序名改为led
TARGET=led
#编译路径
BUILD_DIR=build
#源文件路径
SRC_DIR=module1
#头文件路径
INC_DIR=include
CFLAGS=$(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_build
clean:
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后台运行代码并追踪日志
- linux 切换root账号_LINUX 创建用户及切换用户
- 使用安卓设备控制你的Linux PC
- 暗渡陈仓:用低消耗设备进行破解和渗透测试3.2 渗透测试Linux发行版本所需的功能特性
- Linux有问必答:如何修复“X11 forwarding request failed on channel 0”错误
- 5个有趣的Linux命令行技巧
- Linux安装mysql
- 《嵌入式Linux开发实用教程》——4.3 块设备驱动
- linux常用命令 2
- Linux分区设置
- linux 不用 ioctl 的设备控制
- linux 字符设备注册
- Linux架设时间服务器
- 文件传输 ------ SSH SFTP ------使用 windows 下的 secureCRT 软件的 通过 sftp( SSH file transfer protocol ) 上传和下载文件到远端 linux 设备
- 【树莓派】crontab设置Linux设备定时重启
- linux 文件与进程
- Performing a thread dump in Linux or Windows--reference
- Linux CentOS 基本命令