【问题标题】:accessing gpio from within kivy android app从 kivy android 应用程序中访问 gpio
【发布时间】:2013-10-03 23:15:55
【问题描述】:

好吧,我被难住了,可能我只是没有足够的 android 经验,所以我不知道该使用哪个 permissions

我已经重新编译了 android 内核以公开我需要的 gpio 引脚,也许我需要在内核中做一些事情来解决我的问题......基本上在这一点上我不知道 p>

可以打开 adb shell 并转到 /sys/class/gpio/export 141 并获取 gpio 文件夹及其文件(值、方向等)。

当我在adb shell 中时,我可以使用echo out>direction;echo 1>value;echo 0>value; 设置方向和值,一切正常,引脚驱动为低或高。

我将export 141 放入init.rc,现在它在启动时导出。 如果我尝试从我的 kivy 应用程序中访问值文件,它会崩溃并说权限被拒绝(意料之中)

如果我将chmod 0666directionvalue 都设置为value,它会成功更新文件sys 中的权限。

-rw-rw-rw- root     root         4096 2013-10-01 06:59 value
-rw-rw-rw- root     root         4096 2013-10-01 06:59 direction

现在 当我尝试从 kivy(python) 写入文件时,我得到 [Errno 1] Operation not permitted 如果我尝试将文件 chown 写入我的应用程序用户或系统,我会得到相同的结果.我觉得我几乎尝试了所有方法,但似乎无法写信给/sys/class/gpio/gpio141/value 或方向

【问题讨论】:

    标签: android permissions kivy gpio


    【解决方案1】:

    好吧,我终于想通了……就在我拔掉所有头发之前。

    所以无论什么原因,当我打电话时它会崩溃并死掉

     with open("/sys/class/gpio/gpio141/value","w") as f:
         f.write("1")
    

    但是如果我把它称为

     os.system("echo 1>/sys/class/gpio/gpio141/value") 
    

    效果很好。

    我仍然不确定为什么当我尝试将其作为文件句柄打开时会出现不允许操作

    【讨论】:

    • echo 自动在文件末尾附加一个换行符,所以f.write("1\n") 可能会有所不同。
    • 我猜原因是 Python 如何处理with。我很确定他们会尝试 mmap() 文件,这对于虚拟内核文件系统来说当然是不行的,例如系统文件。我建议提交一个针对 Python bugs.python.org 的错误。 @tshepang,我相信这与换行无关。
    • 这里github.com/python/cpython/blob/master/Modules/_io/fileio.c 代表open() 标志是flags |= O_CREAT | O_TRUNC;,这里unix.stackexchange.com/a/273639/105842 @NominalAnimal 用O_WRONLY 打开它。这可能就是 shell 中的 > 所做的。如果内核不接受打开标志,则绝对是 Python 中的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多