【发布时间】:2020-05-22 20:23:54
【问题描述】:
我想使用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。我已经在 RPi 设备树中看到了gpio-line-names,但我不想在只使用一个时将整个银行指定为 NC。 libgpiod 可以吗?怎么样?
【问题讨论】:
-
行的标签是provider的属性,而不是consumer的属性。因此,您必须在 GPIO controller 设备节点中定义标签。
-
是的,这就是我在
gpio-line-names中提到的,但这是否意味着我必须为整个 gpio2 IO-Bank 定义标签? -
可悲的是,答案似乎是“是”——这太可悲了。我们在框架内从一个错综复杂的烂摊子变成了另一个烂摊子。
标签: linux-kernel embedded-linux gpio device-tree