如何在设备树中定义继电器

How to define a relay in a device tree

我有一块电路板,SoC 运行 Linux 5+,带有继电器。继电器由 GPIO 触发。我正在寻找一种在设备树文件中定义中继的好方法。

我将 LED 定义为

led {
    compatible = "gpio-leds";
    debug {
        label = "debug";
        gpios = ...
        default-state = "off";
    };
};

这导致

# ls /sys/class/leds/
debug

我希望中继是类似的东西,例如

# ls /sys/class/{relays,outputs,gpios}/
relay1

实现此目的的好方法是什么?

由于中继的行为与 GPIO 输出(或更准确地说是 GPO)一样简单,因此您只需为相应的线路命名即可。可以通过在 ACPI 或设备树中分配 GPIO 控制器的 gpio-line-names 属性 来完成。使用 libgpiod 工具(例如 gpiofindgpioinfo),通过字符设备节点访问 GPIO 控制器,您可以找到您的线路并对其进行操作。请注意,GPIO sysfs 接口已弃用,它将在 ~5 年左右的时间内从内核中删除。