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'
(低电平输出)。
在每个 bank 目录下,有一组属性可用于配置新芯片。此外,用户可以在芯片目录内 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)设置,写入时,值必须是以下之一:
'pull-up'
(上拉),'pull-down'
(下拉)value
- 允许读取引脚的当前值,该值可能与上拉/下拉值不同,如果引脚正由用户空间驱动