【问题标题】:Segmentation Fault sysfs gpio linux odroid分段错误 sysfs gpio linux odroid
【发布时间】:2017-10-05 01:45:15
【问题描述】:

我正在尝试编写一个输出到 GPIO 引脚 1 秒的脚本。 我发现最好的方法是通过 GPIO sysfs 命令,但我一直随机收到“分段错误”。这主要发生在设置方向时。在 bash 脚本中和通过终端运行时也会发生这种情况。

sudo echo 227 > /sys/class/gpio/export
sudo chmod 777 /sys/class/gpio/gpio227/*
sudo echo "out" > /sys/class/gpio/gpio227/direction # sometimes segmentation fault
sudo echo "1" > /sys/class/gpio/gpio227/value
# wait a bit
sudo echo "out" > /sys/class/gpio/gpio227/direction # almost always segmentation fault
sudo echo "0" > /sys/class/gpio/gpio227/value 

我在带有 Ubuntu MATE 1.12.1 和 ARMv7 Processor rev 3 (v7l) 的 ODROID-XU4 上运行它。我也在运行无密码 sudo。

关于为什么会发生这种情况以及如何防止它的任何建议?

编辑:我以为我最初是在 ODROID-XU3 上运行的,但它实际上是 XU4。

【问题讨论】:

  • 这个sudo chmod 777 /sys/class/gpio/gpio227/* 到底是为了什么?!除了阅读文档如何与用户空间中的 GPIO 子系统进行通信,特别是使用 low 和 high 而不是单独的命令。最重要的是,您知道按原样切换此 GPIO 时您在做什么吗?
  • chmod 777 用于启用对 gpio227 文件的写访问,因为它们一开始就不是从它开始的。没有它,在将任何回声运行到方向或值时,我会收到权限错误。我不必使用777,但它更快。我会尝试只运行 low 和 high 看看是否可行。
  • 您的 gpio 227 似乎未导出以将其配置为 GPO,这就是您没有写入权限的原因。在尝试覆盖它的属性之前检查硬件引脚的重要性

标签: linux bash linux-device-driver gpio sysfs


【解决方案1】:

分段错误通常发生在用户空间程序读取或写入非法内存地址时。这种情况在简单且经过充分测试的程序(例如 echo)中并不常见。

这可能是由错误的内核/GPIO 驱动程序甚至损坏的硬件引起的。我建议直接以 root 身份运行该命令,以确保它是导致分段错误的 echo,然后使用 strace 确定分段错误是否总是发生在同一位置...

【讨论】:

    【解决方案2】:

    在测试了一些其他设置 GPIO 值的方法后,我发现其他框架似乎运行良好,没有分段错误。

    总之,使用 echo 写入 GPIO 引脚是分段错误的根源。我不知道为什么。

    我的解决方法是使用 node 中的 gpio 模块或使用 WiringPi for Odroid,因为它们似乎工作得很好。

    发布此内容以便人们知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多