100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > openwrt通过shell控制LED灯 (四--一)

openwrt通过shell控制LED灯 (四--一)

时间:2021-11-07 00:56:30

相关推荐

openwrt通过shell控制LED灯 (四--一)

openwrt通过shell控制LED灯

1、概述2、GPIO 目录说明3、进入到GPIO文件夹目录4、使用5、补充,通过文件读写的方式打包成ipk控制LED灯光5.1、在package目录下创建ledctl文件夹并在ledctl下创建Makefile和src文件夹5.2、编写Makefile5.3、在src目录下创建ledctl.c和Makefile5.4、编写ledctl.c与makefile5.5、回到openwrt的根目录下编译生成ipk包5.6、找到对应的ipk包丢到开发板上安装5.7、运行

1、概述

通过shell对openwrt的LED灯光的控制。

进入到自己rootfs的目录的 /sys/class/gpio目录下

2、GPIO 目录说明

3、进入到GPIO文件夹目录

查看自己板子对应的接口,查看gpio接口对应的LED灯。

我这里以GPIO30为例,这是4G的LED_RED灯

cd gpio30/

4、使用

在gpio文件夹下如果有LED对应的GPIO*文件夹,就直接进入文件夹,然后对value进行操作,来控制灯光。例如:

echo > value 1echo > value 0

如果没有对应的LED灯的gpio文件夹:

第一步 在 Linux 中 使 GPIO 有效:

echo 30> /sys/class/gpio/export

然后你需要决定让 GPIO 作为输入(input)或者输出(output), 本例我们将其作为一个开关使用,所以我们需要输出(ouput)

echo out > /sys/class/gpio/gpio45/direction

最后一行,使用 1 或 0 来表示 GPIO 打开(on)或关闭(off):

echo 1 > /sys/class/gpio/gpio45/value

5、补充,通过文件读写的方式打包成ipk控制LED灯光

回到openwrt的源码的根目录下

5.1、在package目录下创建ledctl文件夹并在ledctl下创建Makefile和src文件夹

touch Makefilemkdir src

5.2、编写Makefile

nclude $(TOPDIR)/rules.mkPKG_NAME:=ledctlPKG_VERSION=1PKG_RELEASE:=1.0PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)include $(INCLUDE_DIR)/package.mkdefine Package/ledctlSECTION:=utilsCATEGORY:= ledctlDEPENDS=+libpthreadTITLE:= ledctlendefdefine Build/Preparemkdir -p $(PKG_BUILD_DIR)cp -rf ./src/* $(PKG_BUILD_DIR)/endefdefine Build/Compile$(MAKE) -C $(PKG_BUILD_DIR) \$(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS)"endefdefine Package/$(PKG_NAME)/install$(INSTALL_DIR) $(1)/usr/bin$(CP) $(PKG_BUILD_DIR)/ledctl $(1)/usr/binendef$(eval $(call BuildPackage,ledctl))

makefile注释在/md/?articleId=109803571这篇文章里,我详细注释了。

5.3、在src目录下创建ledctl.c和Makefile

touch Makefiletouch ledctl.c

5.4、编写ledctl.c与makefile

ledctl.c 我以我的LED的gpio口为例,大家的可能不一样,需要注意一下

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>int main(void){FILE *p=NULL; /*4G LED_GREEN*/FILE *q=NULL; /*4G LED_RED */int i=0;for(;i<100;i++){/*open GPIO29 LED_GREEN*/p=fopen("/sys/class/gpio/gpio29/value","w");fprintf(p,"%s","0");sleep(1);fclose(p);/*open GPIO29 LED_GREEN*/p=fopen("/sys/class/gpio/gpio29/value","w");fprintf(p,"%s","1");sleep(0.5);fclose(p);/*open GPIO30 LED_RED*/q=fopen("/sys/class/gpio/gpio30/value","w");fprintf(q,"%s","0");sleep(1);fclose(q);/*close GPIO30 LED_RED*/q=fopen("/sys/class/gpio/gpio30/value","w");fprintf(q,"%s","1");sleep(0.5);fclose(q);printf("%d ",i);}return 0;}

Makefile

ledctl:ledctl.o$(CC) $(LDFLAGS) ledctl.o -o ledctlledctl.o:ledctl.c$(CC) $(CFLAGS) -c lean:rm *.o ledctl

5.5、回到openwrt的根目录下编译生成ipk包

make ./package/ledctl/compile V=s

5.6、找到对应的ipk包丢到开发板上安装

find ./bin/ -name ledctl*.ipk

丢到开发板上

scp ./bin/ipq/packages/base/ledctl_1-1.0_ipq.ipk root@192.168.1.1:/root

在开发板上安装

opkg install ledctl_1-1.0_ipq.ipk

5.7、运行

ledctl

此时开发板上的灯光开始闪烁。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。