记录一种设置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