Linux查看GPIO被哪个程序占用了

设备上有一个GPIO,在通过命令:

echo 53 > /sys/class/gpio/export

初始化时报错:sh: write error: Device or resource busy。

于是想查看一下这个管脚被谁给占用了,执行如下命令:

cat /sys/kernel/debug/gpio

结果报错,提示没有这个文件:cat: can't open '/sys/kernel/debug/gpio': No such file or directory。上网查了下,需要先执行这个命令:

mount -t debugfs debugfs /sys/kernel/debug

再执行“cat /sys/kernel/debug/gpio”命令,就可以得到如下结果:

通过以上信息,可以知道已初始化的GPIO都被谁给占用了。 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
下面是一个简单的Linux GPIO心跳点灯程序的示例: ```c #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/mman.h> #define GPIO_BASE 0x3F200000 // 树莓派GPIO控制器的基地址 #define GPIO_LEN 0xB4 // 控制器的长度 // GPIO控制器的物理地址指针 volatile unsigned *gpio; // GPIO输出引脚号 #define GPIO_PIN 17 // 定义GPIO寄存器的偏移量 #define GPFSEL1 0x04 // GPIO功能寄存器1 #define GPSET0 0x1C // GPIO输出寄存器(置1) #define GPCLR0 0x28 // GPIO输出寄存器(清0) #define GPPUD 0x94 // GPIO上下拉寄存器 #define GPPUDCLK0 0x98 // GPIO上下拉时钟寄存器 // GPIO功能寄存器的模式(输出) #define GPIO_MODE_OUT 0b001 // 定义延时函数 void delay(int millis) { usleep(millis * 1000); } // 初始化GPIO控制器 void setupGPIO() { int fd = open("/dev/mem", O_RDWR | O_SYNC); if (fd < 0) { printf("无法打开/dev/mem,需要root权限运行\n"); exit(-1); } gpio = (unsigned *)mmap(NULL, GPIO_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, fd, GPIO_BASE); close(fd); if (gpio == MAP_FAILED) { printf("mmap失败\n"); exit(-1); } } // 设置GPIO引脚功能模式 void setGPIOFunction(int pin, int mode) { int regnum = pin / 10; int offset = (pin % 10) * 3; unsigned mask = 0b111 << offset; gpio[GPFSEL1 + regnum] = (gpio[GPFSEL1 + regnum] & ~mask) | (mode << offset); } // 将GPIO引脚置为高电平 void setGPIOHigh(int pin) { gpio[GPSET0] = 1 << pin; } // 将GPIO引脚置为低电平 void setGPIOLow(int pin) { gpio[GPCLR0] = 1 << pin; } // 配置GPIO引脚的上下拉电阻 void setGPIOPullUpDown(int pin, int pud) { gpio[GPPUD] = pud; delay(1); gpio[GPPUDCLK0] = 1 << pin; delay(1); gpio[GPPUD] = 0; gpio[GPPUDCLK0] = 0; } int main() { setupGPIO(); setGPIOFunction(GPIO_PIN, GPIO_MODE_OUT); setGPIOPullUpDown(GPIO_PIN, 0); while (1) { setGPIOHigh(GPIO_PIN); delay(500); setGPIOLow(GPIO_PIN); delay(500); } return 0; } ``` 编译方法: ```bash gcc -o gpio-led gpio-led.c ``` 需要在root用户下运行,可以使用sudo命令执行。执行后,GPIO17引脚将会不停地闪烁。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值