一种控制gpio的脚本

本文档介绍了一种用于设置GPIO的脚本,详细阐述了如何拷贝文件到开发板目录、脚本内容及其工作原理。脚本支持设置、清除、获取GPIO状态等功能,适用于GPIO的批量操作。用户只需修改脚本中定义的GPIO编号即可应用到不同场景。通过示例展示了如何在终端中使用该脚本进行GPIO的导出、方向设置、读写等操作。
摘要由CSDN通过智能技术生成


记录一种设置gpio的相关的脚本,方便以后设置gpio

一、拷贝文件

因为设置的是一种脚本,要在板子里面使用,所以我们首先就是先把文件拷贝到对应的目录下
首先找到对应的BoardConfig.mk文件,通过PRODUCT_COPY_FILES += 将文件拷贝到开发板的目录下

PRODUCT_COPY_FILES += \
    device/nxp/custom/gpio:/system/bin/gpio

把自己的device对应目录下的gpio文件拷贝到对应的/system/bin/目录下

二、gpio脚本

#!/system/bin/sh
# GPIO1_IO00, GPIO1_IO01, GPIO1_IO02, GPIO1_IO03, GPIO1_IO04, GPIO1_IO05, GPIO1_IO06, GPIO1_IO07
MY_EXPORT_GPIO="0 1 2 3 4 5 6 7"
GPIOlist=$MY_EXPORT_GPIO
MaxNum=$(echo $GPIOlist|busybox wc -w)
Cond=0-$MaxNum
Help="gpio [ set | clear | get | dirout | dirin | unex ] [ 1-$MaxNum | all ]\n \
ie: gpio set 1\n "
Erro1="Can not export GPIO "
TgtDir=/sys/class/gpio
Exp=$TgtDir/export
Unexp=$TgtDir/unexport


[ -z "$1" ] && echo -e $Help && exit 1
[ -z "$2" ] && echo -e $Help && exit 1

Arg1=$2
Arg2=$1
GpioNum=""
Opt=""
case "$Arg1" in
	"all" )
	GpioNum=$GPIOlist
	;;
	#[1-8] )
	[$Cond] )
	TmpArr=($GPIOlist)
	Num=$(($Arg1))-1
	GpioNum=${TmpArr[$Num]}
	;;
	* )
	echo $Help
	;;
esac

case "$Arg2" in
	"set" )
	for TgtGpio in $GpioNum
	do
		[ ! -e $TgtDir/gpio$TgtGpio ] && echo $TgtGpio > $Exp
		[ ! -e $TgtDir/gpio$TgtGpio ] && echo $Erro1 $TgtGpio && continue 
		# echo "out" > $TgtDir/gpio$TgtGpio/direction
		echo 1 > $TgtDir/gpio$TgtGpio/value
	done
	;;
	"clear" )
	for TgtGpio in $GpioNum
	do
		[ ! -e $TgtDir/gpio$TgtGpio ] && echo $TgtGpio > $Exp
		[ ! -e $TgtDir/gpio$TgtGpio ] && echo $Erro1 $TgtGpio  && continue
		# echo "out" > $TgtDir/gpio$TgtGpio/direction
		echo 0 > $TgtDir/gpio$TgtGpio/value
	done
	;;
	"dirout" )
	for TgtGpio in $GpioNum
	do
		[ ! -e $TgtDir/gpio$TgtGpio ] && echo $TgtGpio > $Exp
		[ ! -e $TgtDir/gpio$TgtGpio ] && echo $Erro1 $TgtGpio && continue
		echo "out" > $TgtDir/gpio$TgtGpio/direction
	done
	;;
	"dirin" )
	for TgtGpio in $GpioNum
	do
		[ ! -e $TgtDir/gpio$TgtGpio ] && echo $TgtGpio > $Exp
		[ ! -e $TgtDir/gpio$TgtGpio ] && echo $Erro1 $TgtGpio && continue
		echo "in" > $TgtDir/gpio$TgtGpio/direction
	done
	;;
	"unex" )
	for TgtGpio in $GpioNum
	do
		[ -e $TgtDir/gpio$TgtGpio ] && echo $TgtGpio > $Unexp
	done
	;;
	"get" )
	for TgtGpio in $GpioNum
	do
		[ ! -e $TgtDir/gpio$TgtGpio ] && echo $TgtGpio > $Exp
		[ ! -e $TgtDir/gpio$TgtGpio ] && echo $Erro1 $TgtGpio && continue
		echo "GPIO $Arg2($TgtGpio) : $(cat $TgtDir/gpio$TgtGpio/direction) $(cat $TgtDir/gpio$TgtGpio/value)"
	done
	;;
	* )
	echo $Help
esac

exit 0

我们只需要修改前面两行就ok

# GPIO1_IO00, GPIO1_IO01, GPIO1_IO02, GPIO1_IO03, GPIO1_IO04, GPIO1_IO05, GPIO1_IO06, GPIO1_IO07
MY_EXPORT_GPIO="0 1 2 3 4 5 6 7"

一行注释和一行对应的gpio号(gpio号需要自己去算算)

三、脚本使用

申请所有的gpio

vt_ipc_rk88:/ # gpio dirout all

申请单独的gpio

vt_ipc_rk88:/ # gpio dirout 0 gpio1
//0 gpio1 代表的是 GPIO0——IO01的意思

后面设置的单独的gpio与之类似

设置所有的gpio输出为高

vt_ipc_rk88:/ # gpio set all

设置所有的gpio输入

vt_ipc_rk88:/ # gpio dirin all

将所设置为高的gpio清除

vt_ipc_rk88:/ # gpio clear all

注销所有的gpio

vt_ipc_rk88:/ # gpio unex all

四、脚本原理

其实就相当于直接把对应的gpio给你export出来,你想要控制那个就控制那个

evk_8mp:/sys/class/gpio # ls
export  gpio1  gpio3  gpio5  gpio7      gpiochip128  gpiochip64  unexport
gpio0   gpio2  gpio4  gpio6  gpiochip0  gpiochip32   gpiochip96

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永不秃头的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值