如何设置虚拟GPIO环回

How to setup virtual Gpio loopback(如何设置虚拟GPIO环回)
本文介绍了如何设置虚拟GPIO环回的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在开发一个程序,该程序应该使用.Net中的GPIO管脚。 我想在虚拟GPIO引脚上测试我的程序,但我不知道如何操作。

我想执行环回操作,其中一个虚拟GPIO 1将连接到另一个虚拟GPIO 2。

我已经对串口和tty0tty执行了类似的操作。

还有,我在Ubuntu上。

推荐答案

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

主要思想是。您创建了一个虚拟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

对于输出部分来说,这有点复杂,也就是说,要么需要过时的连接到GPIO芯片的sysf接口,要么必须从代码中运行线程或派生进程以保持上下文状态正确。对于gpiogetgpioset,这目前是不可能的,因为驱动程序在(GPIO控制器的)设备节点关闭后立即恢复状态。

总的来说,我认为您明白了,甚至可能不需要输出GPIO行。

这篇关于如何设置虚拟GPIO环回的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
quot;Overflowquot; compiler error with -9223372036854775808L(编译器错误-9223372036854775808L(Q;溢出Q))
Visual Studio 2010 ReportViewer Assembly References(Visual Studio 2010 ReportViewer程序集引用)
Weird behaviour when I open a reportviewer in WPF(在WPF中打开报表查看器时出现奇怪的行为)
how do i pass parameters to aspnet reportviewer(如何将参数传递给aspnet report查看器)