#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