首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在linux嵌入式系统上使用Golang管理I/O?

如何在linux嵌入式系统上使用Golang管理I/O?
EN

Stack Overflow用户
提问于 2021-09-15 08:05:03
回答 1查看 90关注 0票数 1

我有一个linux嵌入式系统。我可以使用shell命令来管理I/O。此命令更改GPIO #48的状态:

代码语言:javascript
复制
/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/O?有没有可能在不使用shell命令的情况下管理它们?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-15 08:26:29

在Linux GPIO上,接口是通过/sys/class/gpio层次结构中的sys文件系统导出的,因此在您的shell示例中,您只需将数据写入这些文件,如下所示:

代码语言:javascript
复制
// To export pin 48 (same as echo 48 > /sys/class/gpio/export)
ioutil.WriteFile("/sys/class/gpio/export", []byte("48"), 0666)
...

根据您的平台和需求,您可能想要考虑一些预先存在的包(例如,Raspberry Pi的go-rpioperiph,它比GPIO更通用且支持更多)。

如果您想要比编写sysfs文件更高效/更快的解决方案,您还可以考虑内存映射GPIO访问,在这种访问中,您基本上可以通过内核提供的内存范围直接访问GPIO外围设备。这需要对您的目标平台有更深入的了解(了解它的GPIO寄存器及其映射)。您可以在this blogpost中详细了解该方法。

编辑:正如@0andriy在他的评论中指出的那样,gpio syssfs is deprecated。这适用于上面的Bash示例和我的答案如何在Go中做同样的事情。相反,引入了一个新的ABI和libgpiod来与其交互。Go端口可在此处https://github.com/warthog618/gpiod获得。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69189262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档