Получение значения gpio pinctrl в Linux во время выполнения

#linux #gpio #device-driver

Вопрос:

Я знаю, что вывод Gpio может быть настроен на несколько альтернативных функций (i2c, uart,…) через подсистему pinctrl. это можно настроить в дереве устройств. Теперь я хочу прочитать функцию, назначенную определенному pin-коду во время выполнения, я смотрю /proc/sys/class/gpio , но информации, похоже, там нет, У кого-нибудь есть подсказка ?

Комментарии:

1. Такого интерфейса не существует. Некоторые контроллеры, например контроллеры Intel, могут предоставлять отладочную информацию, доступную через средства отладки, откуда можно декодировать то, что вам нужно. Декодируйте , потому что это будет необработанное значение регистра, и вы должны знать, какие биты соответствуют тому, что вам нужно. Опять же, в Intel есть специальный режим, который печатается напрямую, что немного облегчает анализ. Пример: pin 57 (SLP_S0B) 44:INT34C6:00 mode 1 0x44000700 0x00000051 0x00000000 [LOCKED full, ACPI] .

2. Да, в основном все SOC должны предоставлять такой регистр состояния, чтобы предоставить настроенную альтернативную функцию, но я заметил, что она не поддерживается в драйвере устройства, возможно, мне нужно взломать драйвер устройства для моей цели

3. Взлом драйвера устройства и ускорение изменений-это, безусловно, победа.

Ответ №1:

информация о pinctl доступна в файле /sys/ядро/отладка/pinctrl/*

Чтобы он был доступен, ваше ядро должно быть настроено для отладки, а отладочные файлы должны быть смонтированы:

zcat /proc/config.gz | grep CONFIG_DEBUG_KERNEL

mount -t debugfs none /sys/kernel/debug