【发布时间】:2020-11-04 01:54:22
【问题描述】:
我正在尝试将 GPIO 引脚配置为输出,但由于设备或资源繁忙而失败。该引脚配置为输出、漏极开路,属于gpiochip24 偏移量3 的组。在从线info IOCTL 读取信息时,我可以看到标志为3 (OPEN_DRAIN) 并分配了一个消费者。但是当我尝试使用GPIO_GET_LINEHANDLE_IOCTL 将引脚配置为具有默认值的输出时,IOCTL 失败。
int gpioFd = open("/dev/gpiochip24", 0);
if (gpioFd < 0) {
printf("ERROR: GPIO chip fail\n");
return -1;
}
struct gpiohandle_request req;
req.flags |= GPIOHANDLE_REQUEST_OUTPUT;
req.lineoffsets[0] = 3;
req.lines = 1;
req.default_values[0] = 0;
strcpy(req.consumer_label, "P_EN");
int lhfd = ioctl(gpioFd, GPIO_GET_LINEHANDLE_IOCTL, &req);
if(lhfd < 0)
{
int err = errno;
printf("Error No: %d\n", err);
printf("ERROR: Gpio Line handle\n");
return -1;
}
输出:
Error No: 16
ERROR: Gpio Line handle
我查看了 /sys/kernel/debug/gpio 以了解谁在使用该资源,但得到以下响应:
gpiochip24: GPIOs 99-106, parent: platform/139b0000.pinctrl, gpg2
如何解决设备忙的错误?
【问题讨论】:
-
提示:使用
perror或至少strerror来获取错误消息。例如perror("GPIO line handle");-> 输出:GPIO line handle: Device or resource busy
标签: c embedded linux-device-driver embedded-linux gpio