应用层直接操作gpio口及出现的问题sh: write error: Device or resource busy

/sys/class/gpio/sys/class/gpio/export
文件用于通知系统需要导出控制的GPIO引脚编号

/sys/class/gpio/unexport 
用于通知系统取消导出

/sys/class/gpio/gpiochipX
目录保存系统中GPIO寄存器的信息,
包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数

导出一个引脚的操作步骤
1.计算此引脚编号,引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数

2.向/sys/class/gpio/export写入此编号,比如12号引脚,在shell中可以通过以下命令实现,命令成功后生成/sys/class/gpio/gpio12目录,如果没有出现相应的目录,说明此引脚不可导出:
echo 12 > /sys/class/gpio/export

3.direction文件,定义输入输入方向,可以通过下面命令定义为输出
echo out > direction

注意:direction接受的参数:in, out, high, low。high/low同时设置方向为输出,
并将value设置为相应的1或0。


但最近在执行第一步的时候,即:echo 12 > export  时出现了这么一个问题:

sh: write error: Device or resource busy

这个出现这个问题的原因呢就是,你将要使用的这个gpio口之前已经申请过了,如果你一定要使用它,你必须得在申请它的地方将其释放掉,(这再告诉你们下,你释放了它,它的状态将保持不变,还是你没释放之前的状态,不一定对啊,反正至少我的是这样的),因为在你 执行echo 12 > export 的这个过程它还得去重新申请一遍,所以当然就申请不到咯。






当你尝试执行`echo 102 > /sys/class/gpio/export`命令来将GPIO 102导出到系统的GPIO功能时,可能会遇到"Device or resource busy"错误。这通常表示当前该GPIO已经被另一个进程占用,不能立即进行导出操作。具体来说,这个错误可能是因为: 1. **GPIO资源已被其他程序使用**[^1] - 当你试图设置GPIO 102为输出(或者其他用途),但该GPIO已经被其他的内核模块或驱动程序预留或正在使用。 解决这个问题的方法是先确认该GPIO是否已由其他程序占用。你可以尝试列出所有导出的GPIO以查找是否有冲突: ```shell root@freescale /sys/class/gpio$ cat gpiochip*/exported ``` 找到102对应的gpiochip编号后,查看其状态: ```shell root@freescale /sys/class/gpio/gpiochip*/# grep 102 gpiochipX/gpiobankY/gpio102: exported ``` 如果发现它已被导出,可以尝试关闭或释放占用它的应用程序,然后再重新运行`echo 102 > /sys/class/gpio/export`。 2. **文件系统权限问题** - 检查你的用户权限,可能需要使用有相应权限的用户或者以root身份运行命令。 如果你确定没有其他进程占用该GPIO,那么可能是权限问题,可以尝试以超级用户(root)身份运行此命令: ```shell sudo echo 102 > /sys/class/gpio/export ``` 执行完毕后,记得检查设备的状态以确认导出是否成功。如果仍然遇到问题,请检查系统的日志文件以获取更多关于错误的具体信息。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值