我正在尝试为嵌入式系统创建一个设备树,并希望向用户空间公开一些GPIO。这些不是也不应该被内核驱动程序使用。例如,有一个USB设备焊接到由用户空间驱动程序控制的电路板上。它有一条GPIO复位线,用户空间库需要访问它。
我希望它们在sysfs中的某个地方按名称公开,这样用户空间就可以访问/sys/class/gpio/usbreset,而不是需要知道神奇的gpio编号并需要专门“导出”它。我曾尝试将其设置为GPIO hog,这会初始化GPIO,但它的名称不会出现在sysfs中,并且gpio在被占用时无法导出。我知道我可以选择另一种内核驱动程序类型,比如LED,但它不是LED,这对我来说似乎不是很干净。
在sysfs中导出命名GPIO的正确方式是什么?
发布于 2019-03-11 22:10:57
您可以在devtree中使用“gpio-led”类型。确保你的内核中有CONFIG_LEDS_GPIO。按照Documentation/devicetree/bindings/leds/leds-gpio.txt中所述设置您的开发树。我知道,它说的是"LED",但司机只是摆动GPIO,并不关心是什么连接到它。
示例devtree条目(从文档复制):
run-control {
compatible = "gpio-leds";
red {
gpios = <&mpc8572 6 GPIO_ACTIVE_HIGH>;
default-state = "off";
};
green {
gpios = <&mpc8572 7 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
};这些条目将在sysfs中通过名称访问,您可以在那里的用户空间中操作它们。
发布于 2018-01-21 21:18:10
我建议编写一个简单的内核模块来请求GPIO,然后导出一个链接,该链接可以命名,因此适合您的请求。
https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
从上面的链接:
导出GPIO后,gpiod_export_link()允许从sysfs中的其他位置创建指向GPIO sysfs节点的符号链接。驱动程序可以使用它在sysfs中自己的设备下提供具有描述性名称的接口
https://stackoverflow.com/questions/36803143
复制相似问题