ipS*_*ack 1 io go embedded-linux
我有一个Linux嵌入式系统。我可以使用 shell 命令管理 I/O。此命令更改 GPIO #48 的状态:
/sys/class/gpio# echo 48 > /sys/class/gpio/export
/sys/class/gpio# echo out > /sys/class/gpio/gpio48/direction
/sys/class/gpio# echo high > /sys/class/gpio/gpio48/direction
/sys/class/gpio# echo low > /sys/class/gpio/gpio48/direction
Run Code Online (Sandbox Code Playgroud)
如何使用 Goland 有效管理 I/O?是否可以在不通过 shell 命令的情况下管理它们?
sys在 Linux 上,GPIO 接口通过层次结构中的文件系统导出/sys/class/gpio,因此在 shell 示例中,您只需将数据写入这些文件,如下所示:
// To export pin 48 (same as echo 48 > /sys/class/gpio/export)
ioutil.WriteFile("/sys/class/gpio/export", []byte("48"), 0666)
...
Run Code Online (Sandbox Code Playgroud)
根据您的平台和需求,您可能需要考虑一些预先存在的软件包(例如,go-rpio用于 Raspberry Pi 或periph更通用且支持的功能远多于 GPIO)。
如果您想要比写入文件更高效/更快的解决方案,sysfs您还可以考虑内存映射 GPIO 访问,您基本上可以通过内核提供的内存范围直接访问 GPIO 外设。这需要对目标平台有更深入的了解(了解其 GPIO 寄存器及其映射)。您可以在这篇博文中详细了解该方法。
编辑:正如 @0andriy 在他的评论中指出的那样,gpio syssfs已弃用。这适用于上面的 Bash 示例和我的回答如何在 Go 中做同样的事情。相反,引入了新的 ABI 和 libgpiod 与之交互。Go 端口可在此处获取https://github.com/warthog618/gpiod。
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |