Я пытаюсь настроить вывод GPIO в качестве вывода, но он не работает по причине занятости устройства или ресурса. Вывод сконфигурирован как выход с открытым стоком и принадлежит группе gpiochip24
со смещением 3. При чтении информации из строчной информации 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
Как мне устранить эту ошибку о занятости устройства?