本文介绍了如何设置虚拟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接口,要么必须从代码中运行线程或派生进程以保持上下文状态正确。对于gpioget
和gpioset
,这目前是不可能的,因为驱动程序在(GPIO控制器的)设备节点关闭后立即恢复状态。
总的来说,我认为您明白了,甚至可能不需要输出GPIO行。
这篇关于如何设置虚拟GPIO环回的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!