【问题标题】:How to setup virtual Gpio loopback如何设置虚拟 Gpio 环回
【发布时间】:2021-05-31 02:19:23
【问题描述】:

我目前正在开发一个应该在 .Net 中使用 gpio 引脚的程序。 我想在虚拟 gpio pin 上测试我的程序,但我不知道该怎么做。

我想做一个环回,其中一个虚拟 gpio 1 将连接到另一个虚拟 gpio 2。

我已经用串口和 tty0tty 做过类似的事情。

另外,我在 Ubuntu 上。

【问题讨论】:

  • 谢谢,我一直无法访问硬件,这就是我想用软件重现它的原因。我已经看过 gpio-mockup 但我不知道如何使用它来做我想做的事
  • 是的,这会帮助我(和其他人)。特别是因为我更像是一个软件开发人员而不是系统管理员,所以我不太确定如何做你所描述的 ^^'。另外,我最初想象的是我有两个软件在两个不同的虚拟引脚上进行通信,这两个虚拟引脚将“连接”在一起(例如在连接两个串行端口的 tty0tty 中)。如果我理解正确,我的第二个软件(硬件模拟器)将替换您描述中的 sysfs。

标签: .net ubuntu testing virtual gpio


【解决方案1】:

如果您没有可用的真正硬件,那么不破解真正的内核驱动程序就没有这种可能性。幸运的是,在 Linux 内核中,我们有 gpio-mockup(以及新的 gpio-sim),用于测试 GPIO 库和 API。

主要思想是。您创建一个虚拟 GPIO 芯片:

% modprobe gpio-mockup gpio_mockup_ranges=-1,3 gpio_mockup_named_lines

% gpiodetect
...
gpiochip2 [gpio-mockup-A] (3 lines)

% gpioinfo 2
gpiochip2 - 3 lines:
        line   0: "gpio-mockup-A-0" unused input active-high 
        line   1: "gpio-mockup-A-1" unused input active-high 
        line   2: "gpio-mockup-A-2" unused input active-high 

通过 DebugFS,您可能会看到这些行位于硬件方面,即无论您在那里写什么,Linux 堆栈都会将其视为硬件状态:

% mount -t debugfs none /sys/kernel/debug

% ls -l /sys/kernel/debug/gpio-mockup/gpiochip2/
total 0
--w-------    1 root     root             0 Jan 29 01:10 0
--w-------    1 root     root             0 Jan 29 01:10 1
--w-------    1 root     root             0 Jan 29 01:10 2

(注意这里的只写属性)

现在演示部分

首先检查一个引脚的当前状态(让我们选择那个虚拟 GPIO 控制器的引脚 2):

% gpioget 2 2
0

假设引脚的硬件状态已从 0 更改为 1:

% echo 1 > /sys/kernel/debug/gpio-mockup/gpiochip2/2

再次检查引脚状态:

% gpioget 2 2
1

对于输出部分,它有点复杂,即要么你需要弃用 sysfs 接口到 GPIO 芯片,要么你必须运行一个线程或从你的代码中派生一个进程以保持上下文状态正确。使用 gpioget 和 gpioset 目前是不可能的,因为驱动程序会在(GPIO 控制器的)设备节点关闭后立即恢复状态。

总的来说,我认为您明白了,也许您甚至不需要输出 GPIO 线。

【讨论】:

  • 感谢您的努力 ^^ 也许只有我一个人,但我找不到 gpio-mockup 的综合文档(我通过搜索找到了)。我希望这也能帮助任何想要在没有硬件的情况下测试软件的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
相关资源
最近更新 更多