【问题标题】:Regarding GPIO export关于 GPIO 导出
【发布时间】:2021-08-20 03:50:34
【问题描述】:

我有一些关于 GPIO 导出的基本问题。

  1. 关于 gpio-hog 机制: gpio-hog 机制将帮助我们将 GPIO 初始化为 启动期间的高/低和输入/输出。 这很好。

所以我的问题是,如果我们占用一个 GPIO,它是否也会被导出到 默认用户空间?

  1. 对于旧的 sysfs 接口,我们将使用“echo x > /sys/class/gpio/export" 将 gpiox 导出到用户空间。

我想知道用新版本做这件事的正确方法是什么 界面?

  1. 要检查是否正在导出 GPIO,我们会看到 /sys/class/gpio 与 sysfs 接口。

使用更新的字符设备界面,正确的方法是什么 检查哪些 GPIO 导出到用户空间?

【问题讨论】:

    标签: linux linux-kernel gpio


    【解决方案1】:

    每个0andriy的cmets:

    1. GPIO hog 不是为了那个。您所描述的是使用它的(预期的)副作用。需要 GPIO hog 才能将孤立的 GPIO 线(操作系统没有驱动程序的东西)保持在特定状态。它们的生产者和消费者是 GPIO 控制器本身,您可以不导出已经有消费者的线路。
    2. 使用新的字符设备接口,您不应该导出任何内容,您需要在程序中为 GPIO 线提供上下文。因此,“导出”将在进程内部完成,当进程完成时,它会自动“取消导出”所有消耗的 GPIO 线。
    3. 使用新接​​口,您的进程将通过 IOCTL 获取行句柄,如果它已被占用,它将失败并出现错误。

    把上面的内容稍微扩展一下……

    关于检查当前正在使用的线路,the kernel source tree 提供的lsgpio 报告,libgpiod 提供的gpioinfo 工具也是如此。

    在这两种情况下,该信息都是针对用户的。应用程序只是尝试请求一条线路,如果该线路已在使用中,则会失败并显示 EBUSY

    【讨论】:

    • 感谢您的回复,他们确实帮助我消除了疑虑。 @Kent Gibson,我还看到,当我将特定的 GPIO 占用为低输出或高输出时,它总是显示为带有 gpioinfo 的“输入”和“高电平有效”。这是来自占用的 GPIO 的预期吗?假设如果我将设备树中的 GPIO“p13”占用到“output-low”,然后使用“gpioinfo chipname”检查它,它会报告为“input”和“active-high”
    • 首先要注意,“output-low”是指将线路设置为低物理电平的输出,与active-low不同,gpioinfo不上报物理电平。我的理解是 hog 设置应该反映在 gpioinfo 输出中。对内核代码的粗略检查让我没有理由不这么认为,因此您需要进一步调试您所看到的内容以确定根本原因。例如占用的线路也应报告为正在使用。你确定你有正确的线路吗?是否有任何线路报告在使用中?有这些输出吗?
    • 我同意你的看法。即使我查看了内核代码,它也设置了占用 GPIO 的正确方向。我怀疑这可能是 gpioinfo 工具的一些问题。我占用了一个 GPIO,如下所示 pX { gpio-hog; gpios = ;输出高; }; gpinfo 显示有关 GPIO 的以下信息:第 13 行:“p.X”“some_name”输入 active-high [used] 它显示为 [used],但方向仍然显示输入。 @肯特吉布森
    • @Rizwan 我不认为这是调试您所看到内容的最佳论坛,因此将在 GPIO 邮件列表中回复您的帖子。
    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多