如何在 linux 嵌入式系统上使用 Golang 管理 I/Os?
How to manage I/Os with Golang on linux embedded system?
我有一个 linux 嵌入式系统。我可以使用 shell 命令来管理 I/Os。此命令更改 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
如何使用 Goland 有效地管理 I/Os?是否可以在不通过 shell 命令的情况下管理它们?
在 Linux 上,GPIO 接口通过 /sys/class/gpio
层次结构中的 sys
文件系统导出,因此在您的 shell 示例中,您只需要将数据写入这些文件,一些东西喜欢:
// To export pin 48 (same as echo 48 > /sys/class/gpio/export)
ioutil.WriteFile("/sys/class/gpio/export", []byte("48"), 0666)
...
根据您的平台和需求,您可能需要考虑一些预先存在的包(例如 go-rpio
for Raspberry Pi or periph
,它比 GPIO 更通用且支持更多)。
如果您想要比编写 sysfs
文件更多的 efficient/faster 解决方案,您还可以考虑内存映射 GPIO 访问,您基本上可以通过内核提供给它的内存范围直接访问 GPIO 外围设备。这需要对目标平台有更深入的了解(了解其 GPIO 寄存器及其映射)。您可以在 this blogpost.
中详细了解该方法
编辑:正如@0andriy 在他的评论中指出的 gpio
syssfs
是 deprecated. That applies for both your Bash example above and my answer how to do same thing in Go. Instead a new ABI was introduced and libgpiod to interact with it. Go port is available here https://github.com/warthog618/gpiod.
我有一个 linux 嵌入式系统。我可以使用 shell 命令来管理 I/Os。此命令更改 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
如何使用 Goland 有效地管理 I/Os?是否可以在不通过 shell 命令的情况下管理它们?
在 Linux 上,GPIO 接口通过 /sys/class/gpio
层次结构中的 sys
文件系统导出,因此在您的 shell 示例中,您只需要将数据写入这些文件,一些东西喜欢:
// To export pin 48 (same as echo 48 > /sys/class/gpio/export)
ioutil.WriteFile("/sys/class/gpio/export", []byte("48"), 0666)
...
根据您的平台和需求,您可能需要考虑一些预先存在的包(例如 go-rpio
for Raspberry Pi or periph
,它比 GPIO 更通用且支持更多)。
如果您想要比编写 sysfs
文件更多的 efficient/faster 解决方案,您还可以考虑内存映射 GPIO 访问,您基本上可以通过内核提供给它的内存范围直接访问 GPIO 外围设备。这需要对目标平台有更深入的了解(了解其 GPIO 寄存器及其映射)。您可以在 this blogpost.
编辑:正如@0andriy 在他的评论中指出的 gpio
syssfs
是 deprecated. That applies for both your Bash example above and my answer how to do same thing in Go. Instead a new ABI was introduced and libgpiod to interact with it. Go port is available here https://github.com/warthog618/gpiod.