驱动程序
本质:为硬件设备创建相应的设备节点文件
创建设备文件时,规定好设备文件的使用方式。
应用程序
根据驱动程序规定的设备文件使用方法去控制硬件
控制硬件设备步骤
1.找出硬件设备所对应的节点文件
两个地方:
①/dev目录下
对驱动程序熟悉的工程师可以使用,一个设备节点文件控制硬件的全部特性
②/sys目录下
业余工程师使用,一个设备节点文件只控制硬件的一个特性
2、找出驱动程序规定的设备文件使用方式!
LED灯程序
①设备节点文件:/sys/class/leds
往brightness文件写入一个数值,就能控制led灯的亮度
led亮度值:0~255
sleep(1):在Linux系统里面是休眠的意思,这里也就是休眠1秒的意思
#include#include #include #include #include #include //开发板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 r_fd,g_fd,b_fd; //定义设备的文件描述符 printf("This is the demon"); //获取RLED设备的文件描述符 r_fd = open(RLED_DEV_PATH,O_WRONLY); //当获取失败返回通知 if(r_fd < 0){ printf("Fail to open %s devicen",RLED_DEV_PATH); exit(1); } g_fd = open(GLED_DEV_PATH,O_WRONLY); if(g_fd < 0){ printf("Fail to open %s devicen",GLED_DEV_PATH); exit(1); } b_fd = open(BLED_DEV_PATH,O_WRONLY); if(b_fd < 0){ printf("Fail to open %s devicen",BLED_DEV_PATH); exit(1); } while(1){ //红灯亮 write(r_fd,"255",3); //休眠1秒 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); } }
ARCH ?= x86
ifeq ($(ARCH),x86)
CC=gcc
else
CC=arm-linux-gnueabihf-gcc
endif
TARGET=led
BUILD_DIR=build
SRC_DIR=.
INC_DIR=.
CFLAG=$(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)))
VPATH=$(SRC_DIR)
$(BUILD_DIR)/$(TARGET):$(OBJS)
$(CC) $^ -o $@
$(BUILD_DIR)/%.o:%.c $(INCLUDES) | create_build
$(CC) -c $< -o $@ $(CFLAG)
.PHONY:clean create_build
clean:
rm -r $(BUILD_DIR)
create_build:
mkdir -p $(BUILD_DIR)



