Arhn - архитектура программирования

gpiod - использовать метки в devicetree

Я хочу использовать libgpiod для управления несколькими GPIO через пользовательское пространство на настраиваемой плате. У меня есть процессор i.MX6UL, у которого сотни контактов, я буду использовать только 8 из них (как GPIO).

Я читал о libgpiod, поскольку он заменяет старый sysfs API, и я рад, что вы можете указать метки для каждого GPIO. Блок GPIO процессора выглядит как следующий блок кода и уже имеет свойство gpio-controller. (Взято из ядра Linux v4.14)

gpio2: gpio@20a0000 {
    compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio";
    reg = <0x020a0000 0x4000>;
    interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
             <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
    gpio-controller;
    #gpio-cells = <2>;
    interrupt-controller;
    #interrupt-cells = <2>;
    gpio-ranges = <&iomuxc 0 49 16>, <&iomuxc 16 111 6>;
};

Я хочу использовать один вывод этого контроллера, поэтому добавил следующий блок:

&gpio2 {
    resetl0 {
        //gpio-hog;
        output-high;
        line-name = "COBO0_ResetL";
        gpios = <15 1>;
    };
};

Без свойства gpio-hog инструмент gpioinfo не может показать мне метки, то же самое, если я опущу высокий / низкий выход. С помощью свойства метка отображается правильно, но gpio помечен как used, поэтому я не могу управлять из пользовательского пространства. (Устройство или ресурс заняты)

Короче говоря: мне нужен способ установить метку в дереве устройств, которую я могу читать из пользовательского пространства и управлять gpios. Я уже видел gpio-line-names в дереве устройств RPi, но я не хочу указывать весь банк как NC при использовании только одного. Возможно ли это с libgpiod? Как?


  • Метка строки является свойством провайдера, а не потребителя. Итак, вам нужно определить метки в узле устройства GPIO controller. 06.02.2020
  • Да, это то, что я упомянул с gpio-line-names, но означает ли это, что я должен определить метки для всего gpio2 IO-Bank? 07.02.2020

Ответы:


1

Тестировал на ядре Odroid-N2 v5.4.

мезон-g12b-odroid-n2.dts

&gpio {
gpio-line-names = 
    /* GPIOZ */
    "", "", "", "", "", "", "", "",
    "", "", "", "", "", "", "", "",
    /* GPIOH */
    "", "", "", "", "", "", "", "",
    "",
    /* BOOT */
    "", "", "", "", "", "", "", "",
    "", "", "", "", "", "", "", "",
    /* GPIOC */
    "", "", "", "", "", "", "", "",
    /* GPIOA */
    "44", "46", "45", "47",
    "26", "",   "",   "",
    "",   "",   "",   "42",
    "32", "7",  "27", "28",
    /* GPIOX */
    "16", "18", "22", "11",
    "13", "33", "35", "15",
    "19", "21", "24", "23",
    "8",  "0",  "29", "31",
    "12", "3",  "5",  "36";

usb-hub {
        gpio-hog;
        gpios = <GPIOH_4 GPIO_ACTIVE_HIGH>;
        output-high;
        line-name = "usb-hub-reset";
    };
};

Вывод gpioinfo

gpiochip0 - 85 lines:
...
    line  20:      unnamed "usb-hub-reset" input active-high [used]
...
    line  49:         "44"       unused   input  active-high 
    line  50:         "46"       unused   input  active-high 
    line  51:         "45"       unused   input  active-high 
    line  52:         "47"       unused   input  active-high 
    line  53:         "26"       unused   input  active-high 
...
    line  60:         "42"       unused   input  active-high 
    line  61:         "32"       unused   input  active-high 
    line  62:          "7"       unused   input  active-high 
    line  63:         "27"       unused   input  active-high 
    line  64:         "28"       unused   input  active-high 
    line  65:         "16"       unused   input  active-high 
    line  66:         "18"       unused   input  active-high 
    line  67:         "22"       unused   input  active-high 
    line  68:         "11"       unused   input  active-high 
    line  69:         "13"       unused   input  active-high 
    line  70:         "33"       unused   input  active-high 
    line  71:         "35"       unused   input  active-high 
    line  72:         "15"       unused   input  active-high 
    line  73:         "19"       unused   input  active-high 
    line  74:         "21"       unused   input  active-high 
    line  75:         "24"       unused   input  active-high 
    line  76:         "23"       unused   input  active-high 
    line  77:          "8"       unused   input  active-high 
    line  78:          "0"       unused   input  active-high 
    line  79:         "29"       unused   input  active-high 
    line  80:         "31"       unused   input  active-high 
    line  81:         "12"       unused   input  active-high 
    line  82:          "3"       unused   input  active-high 
    line  83:          "5"       unused   input  active-high 
    line  84:         "36"       unused   input  active-high 
...

gpioinfo отображал 'gpio-line-names' как имя и 'line-name' как потребитель.

13.03.2020
  • Спасибо, я нашел такое же решение для своего случая, хотя я не считаю его хорошим решением. Я бы предпочел метод, который работает и для одиночных контактов. 13.03.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..