标签: gpio

尽管 /sys/class/gpio/gpio18/value 具有文件权限,但仍无法写入 GPIO 引脚

这是在树莓派上。

这是 sudo ls -lL /sys/class/gpio/gpio18 的输出:

-rwxrwx--- 1 root     gpio     4096 Mar  8 10:50 active_low
-rwxrwx--- 1 root     gpio     4096 Mar  8 10:52 direction
-rwxrwx--- 1 cameron  cameron  4096 Mar  8 10:50 edge
drwxrwx--- 2 root     gpio        0 Mar  8 10:50 power
drwxrwx--- 2 root     gpio        0 Mar  8 10:50 subsystem
-rwxrwx--- 1 root     gpio     4096 Mar  8 10:50 uevent
-rwxrwx--- 1 cameron  cameron  4096 Mar  8 10:50 value
Run Code Online (Sandbox Code Playgroud)

所以看起来我现在应该可以使用价值了,太好了。然而:

cameron@raspberrypi~ $ echo 1 > /sys/class/gpio/gpio18/value
-bash: /sys/class/gpio/gpio18/value: Permission …
Run Code Online (Sandbox Code Playgroud)

permissions sysfs gpio

8
推荐指数
2
解决办法
3万
查看次数

干净地设置 GPIO 权限

是否可以设置 /sys/class/gpio/ 文件的默认权限和所有权,例如通过配置 udev?关键是为可以访问板上 GPIO 引脚的进程提供真正的 gid。

大多数“解决方案”包括 suid 包装器、带有 chown 的脚本和受信任的中间人二进制文件。网络搜索发现编写 udev 规则的尝试失败

(相关:Q1

(资源:avrfreakslinuxudev

linux permissions embedded arm gpio

7
推荐指数
1
解决办法
3205
查看次数

在 Pi 上运行涉及 GPIO 的守护进程

我有一个守护进程,它使用 GPIO 端口监视各种事物。我已经使用 Python 使用 RPi.GPIO 模块为此编写了代码。

我想确保守护进程始终运行,即在崩溃后重新启动它并在系统启动时启动它(至关重要的是在任何用户登录之前——这个 Pi 无头运行)。有一个闪烁的 LED 告诉我它正在运行,但这并不理想。

我已阅读有关为此目的使用 MONIT 的信息,但我遇到了一些问题。到目前为止,我的尝试主要围绕这个解决方案:

/sf/ask/1641804111/

这是我的 bash 包装文件,名为 /home/pi/UPSalarm/UPSalarm.bash

#!/bin/bash

PIDFILE=/var/run/UPSalarm.pid

case $1 in
    start)
        #source /home
        #Launch script
        sudo python /home/pi/UPSAlarm/UPSalarm.py 2>/dev/null &
        # store PID value
        echo $! > ${PIDFILE}
    ;;
    stop)
        kill `cat ${PIDFILE}`
        # Proccess killed, now remove PID
        rm ${PIDFILE}
    ;;
    *)
        echo "usage: scraper {start|stop}" ;;
esac
exit 0`
Run Code Online (Sandbox Code Playgroud)

这是我的监控规则

check process UPSalarm with pidfile /var/run/UPSalarm.pid
   start = "/home/pi/UPSalarm/UPSalarm start"
   stop = "/home/pi/UPSalarm/UPSalarm …
Run Code Online (Sandbox Code Playgroud)

monitoring sudo python gpio

6
推荐指数
1
解决办法
797
查看次数

电源故障时触发 Linux 关闭

我有一个带有超级电容器硬件的嵌入式 Linux 系统(当前运行 Angstrom),可以提供完成写入的时间,并避免在外部电源断开时损坏文件系统。架构为ARM,SOC为Freescale iMX6Q

有一个 GPIO 输入可监控外部电源的存在。

将此输入连接到现有逻辑以进行电源故障处理的最佳方法是什么?SIGPWR我应该自己向所有正在运行的进程广播吗?仅将其提高到systemd?写点东西给/dev/initctl?做点别的什么让内核本身发送出去SIGPWR

是否存在可以在 devicetree 中配置的硬件电源故障输入的现有机制?或者用户模式守护进程(具有高优先级)轮询 sysfs gpio 文件是最好的方法吗?

这个早期的问题指出了电池备份的优点,但以“保持电源足够长的时间”停止,没有深入讨论如何在写入刷新代码中触发电源故障路径的任何细节。(由于即将断电,系统不应在正常进程关闭中浪费任何时间,只执行保护数据完整性的操作。尤其应避免日志关闭的操作,因为它们会增加执行写入(包括更新)时损坏的机会在最坏的情况下获取磨损均衡数据。 讨论。)

linux power-management systemd gpio

5
推荐指数
0
解决办法
2270
查看次数

ioctl 调用会阻塞吗?

我正在围绕 libgpiod 的接口编写一些代码。比如我想设置一条线输出高电平。在底层,libgpiod 打开内核为该行提供的 fd,然后调用ioctl(fd, GPIO_V2_LINE_SET_VALUES_IOCTL, ...).

我的问题是:

  • 这个特定的ioctl()调用(带有GPIO_V2...参数)理论上(可能)是否会像写入任意文件描述符一样阻塞?

  • ioctl()理论上来说,呼叫通常会阻塞吗?例如,首先请求线路还涉及ioctl()芯片的 on a fd。I2C 怎么样ioctl()

  • fd如果它是阻塞的,那么行 struct ( ) 中的底层是否是line->fd_handle->fd我需要在事件循环中等待的底层(例如,epoll()或像 libuv 这样的抽象事件库)?

我试图通过研究来回答这个问题,但是(a)搜索“ioctl”和“blocking”的任何组合只会给出将fd设置为阻塞或不阻塞的结果,并且(b)它不在手册页或内核中我能找到的文档。

file-descriptors linux-kernel gpio ioctl

5
推荐指数
1
解决办法
2991
查看次数

以普通用户身份运行 Python Portio 脚本,无需 root 访问权限

我知道以普通用户身份运行 root 脚本存在风险,但在这种情况下,我别无选择,我正在做的事情与机器有关。我有一台带有 GPIO 端口的小型板式计算机,我需要使用其中一个输出通过切换关闭线来重置设备。该部分工作正常,设备会按原样重置。

我的问题是我编写了一个 python 脚本来重置设备并且它可以工作,但是我必须以 root 或“sudo 程序名称,输入密码”的身份运行它。但是我需要它作为没有root权限的普通用户工作。换句话说,我添加了一个普通用户,无论如何我都无法运行脚本。

我曾尝试将用户添加到 sudoer 文件中,但这不起作用并且被完全忽略了。我已经更改了权限,设置了 SUID 位以及我能想到的所有其他内容,但它仍然要求输入 root 密码。唯一有效的是当我打开用户和组并将用户添加到 Sudo 组时,但随后用户可以访问我希望它没有的程序,因为它就像我的默认管理员用户一样。那不是我想要的。我想以某种方式将用户可以访问的内容限制为单个脚本或程序。

我让其他人建议我需要编写一个驱动程序,但我真的不知道该怎么做,也不知道他们的确切含义,通常他们不想详细说明。虽然我使用过 Linux,但我不认为自己是这方面的专家。任何人有任何想法如何做到这一点?

linux ubuntu hardware sudo gpio

4
推荐指数
1
解决办法
4682
查看次数