如何设置虚拟 Gpio 环回
How to setup virtual Gpio loopback
我目前正在开发一个应该在 .Net 中使用 gpio 引脚的程序。
我想在虚拟 gpio 引脚上测试我的程序,但我不知道该怎么做。
我想做一个环回,其中一个虚拟 gpio 1 将连接到另一个虚拟 gpio 2。
我已经用串行端口和 tty0tty 做了类似的事情。
此外,我在 Ubuntu。
如果没有真正的硬件可供您使用,那么不破解真正的内核驱动程序就没有这种可能性。幸运的是,在 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 线。
我目前正在开发一个应该在 .Net 中使用 gpio 引脚的程序。 我想在虚拟 gpio 引脚上测试我的程序,但我不知道该怎么做。
我想做一个环回,其中一个虚拟 gpio 1 将连接到另一个虚拟 gpio 2。
我已经用串行端口和 tty0tty 做了类似的事情。
此外,我在 Ubuntu。
如果没有真正的硬件可供您使用,那么不破解真正的内核驱动程序就没有这种可能性。幸运的是,在 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 线。