Configfs GPIO 模拟器¶
configfs GPIO 模拟器 (gpio-sim) 提供了一种创建用于测试目的的模拟 GPIO 芯片的方法。可以使用标准 GPIO 字符设备接口访问这些芯片公开的线路,也可以使用 sysfs 属性进行操作。
创建模拟芯片¶
gpio-sim 模块注册一个名为 'gpio-sim'
的 configfs 子系统。有关 configfs 文件系统的详细信息,请参阅 configfs 文档。
用户可以创建 configfs 组和项的层次结构,以及修改公开属性的值。一旦芯片被实例化,这个层次结构将被转换为适当的设备属性。一般的结构是
组: /config/gpio-sim
这是 gpio-sim configfs 树的顶层目录。
组: /config/gpio-sim/gpio-device
属性: /config/gpio-sim/gpio-device/dev_name
属性: /config/gpio-sim/gpio-device/live
这是一个代表 GPIO 平台设备的目录。'dev_name'
属性是只读的,允许用户空间读取平台设备名称(例如 'gpio-sim.0'
)。'live'
属性允许在设备完全配置后触发设备的实际创建。接受的值为:'1'
以启用模拟设备,'0'
以禁用并拆卸它。
组: /config/gpio-sim/gpio-device/gpio-bankX
属性: /config/gpio-sim/gpio-device/gpio-bankX/chip_name
属性: /config/gpio-sim/gpio-device/gpio-bankX/num_lines
此组表示顶层平台设备下的 GPIO 组。'chip_name'
属性是只读的,允许用户空间读取组设备的设备名称。'num_lines'
属性允许指定此组公开的线路数。
组: /config/gpio-sim/gpio-device/gpio-bankX/lineY
属性: /config/gpio-sim/gpio-device/gpio-bankX/lineY/name
此组表示偏移量 Y 处的单行。“name”属性允许设置“gpio-line-names”属性表示的线路名称。
项: /config/gpio-sim/gpio-device/gpio-bankX/lineY/hog
属性: /config/gpio-sim/gpio-device/gpio-bankX/lineY/hog/name
属性: /config/gpio-sim/gpio-device/gpio-bankX/lineY/hog/direction
此项使 gpio-sim 模块占用关联的线路。'name'
属性指定要使用的内核消费者名称。'direction'
属性指定占用方向,必须是以下之一:'input'
,'output-high'
和 'output-low'
。
在每个组目录中,都有一组可用于配置新芯片的属性。此外,用户可以在芯片的目录中 mkdir()
子目录,这些子目录允许为特定线路传递其他配置。这些子目录的名称必须采用以下形式:'line<offset>'
(例如 'line0'
,'line20'
等),因为模块将使用该名称将配置分配给给定偏移量的特定线路。
一旦配置完成,必须将 'live'
属性设置为 1 以实例化芯片。可以将其设置回 0 以销毁模拟芯片。该模块将同步等待新的模拟设备成功探测,如果发生这种情况,写入 'live'
将导致错误。
模拟 GPIO 芯片也可以在设备树中定义。兼容的字符串必须是:"gpio-simulator"
。支持的属性有
"gpio-sim,label"
- 芯片标签
还支持其他标准 GPIO 属性(如 "gpio-line-names"
,"ngpios"
或 "gpio-hog"
)。有关详细信息,请参阅 GPIO 文档。
定义 GPIO 模拟器的设备树代码示例
gpio-sim {
compatible = "gpio-simulator";
bank0 {
gpio-controller;
#gpio-cells = <2>;
ngpios = <16>;
gpio-sim,label = "dt-bank0";
gpio-line-names = "", "sim-foo", "", "sim-bar";
};
bank1 {
gpio-controller;
#gpio-cells = <2>;
ngpios = <8>;
gpio-sim,label = "dt-bank1";
line3 {
gpio-hog;
gpios = <3 0>;
output-high;
line-name = "sim-hog-from-dt";
};
};
};
操作模拟线路¶
每个模拟 GPIO 芯片都会在其设备目录下的每个公开线路创建一个单独的 sysfs 组(例如 /sys/devices/platform/gpio-sim.X/gpiochipY/
)。每个组的名称采用以下形式:'sim_gpioX'
,其中 X 是线路的偏移量。在每个组中,有两个属性
pull
- 允许读取和设置当前模拟的拉设置对于每条线路,写入时该值必须是以下之一:
'pull-up'
,'pull-down'
value
- 允许读取线路的当前值,这可能是如果线路是从用户空间驱动的,则与拉动不同