GPIO 字符设备用户空间 API (v1)¶
警告
此 API 已被 GPIO 字符设备用户空间 API (v2) 废弃。
新的开发应该使用 v2 API,并且鼓励现有开发尽快迁移,因为此 API 将在未来被移除。 v2 API 是 v1 API 的功能超集,因此任何 v1 调用都可以直接转换为等效的 v2 调用。
此接口将在迁移期间继续维护,但新功能只会添加到新的 API 中。
首次添加于 4.8。
该 API 基于三个主要对象:Chip,线路句柄 和 线路事件。
在本文档中使用“线路事件”是指可以监视线路边缘事件的请求,而不是边缘事件本身。
Chip¶
Chip 表示单个 GPIO 芯片,并使用 /dev/gpiochipX
形式的设备文件暴露给用户空间。
每个芯片支持多个 GPIO 线路,chip.lines
。芯片上的线路由 0 到 chip.lines - 1
范围内的 offset
标识,即 [0,chip.lines)。
线路是通过 GPIO_GET_LINEHANDLE_IOCTL 请求的,并且生成的线路句柄用于访问 GPIO 芯片的线路,或者通过 GPIO_GET_LINEEVENT_IOCTL 请求的,并且生成的线路事件用于监视 GPIO 线路的边缘事件。
在本文档中,通过调用 GPIO 设备文件上的 open() 返回的文件描述符称为 chip_fd
。
操作¶
可以在芯片上执行以下操作
线路句柄¶
线路句柄由 GPIO_GET_LINEHANDLE_IOCTL 创建,并提供对一组请求线路的访问。线路句柄通过 GPIO_GET_LINEHANDLE_IOCTL 在 request.fd
中返回的匿名文件描述符暴露给用户空间。
在本文档中,线路句柄文件描述符称为 handle_fd
。
操作¶
可以在线路句柄上执行以下操作
线路事件¶
线路事件由 GPIO_GET_LINEEVENT_IOCTL 创建,并提供对请求线路的访问。线路事件通过 GPIO_GET_LINEEVENT_IOCTL 在 request.fd
中返回的匿名文件描述符暴露给用户空间。
在本文档中,线路事件文件描述符称为 event_fd
。
操作¶
可以在线路事件上执行以下操作
类型¶
本节包含 ABI v1 引用的结构。
struct gpiochip_info
在 ABI v1 和 v2 中是通用的。
-
struct gpioline_info¶
关于某个 GPIO 线路的信息
定义:
struct gpioline_info {
__u32 line_offset;
__u32 flags;
char name[GPIO_MAX_NAME_SIZE];
char consumer[GPIO_MAX_NAME_SIZE];
};
成员
line_offset
此 GPIO 设备上的本地偏移量,从内核请求线路信息时填充此项
flags
此线路的各种标志
name
此 GPIO 线路的名称,例如线路在芯片上的输出引脚、板上的轨道或引脚接头名称,由 gpio 芯片指定,可能为空 (即 name[0] == '0')
consumer
此 GPIO 线路的使用者的功能名称,由使用它的任何东西设置,如果没有当前用户将为空,但也可能在使用者未设置的情况下为空
注意
此结构是 ABI v1 的一部分,已被弃用。请改用 ABI v2 和 struct gpio_v2_line_info
。
-
struct gpioline_info_changed¶
关于 GPIO 线路状态更改的信息
定义:
struct gpioline_info_changed {
struct gpioline_info info;
__u64 timestamp;
__u32 event_type;
__u32 padding[5];
};
成员
info
更新的线路信息
timestamp
状态更改发生时间的估计值,以纳秒为单位
event_type
以下之一:
GPIOLINE_CHANGED_REQUESTED
、GPIOLINE_CHANGED_RELEASED
和GPIOLINE_CHANGED_CONFIG
padding
保留供将来使用
描述
此处嵌入的 struct gpioline_info
本身具有 32 位对齐,但它也可以与 64 位对齐一起使用。 凭借其 72 字节大小,我们可以保证它和后续成员之间没有隐式孔。 末尾的 20 字节填充确保我们在 64 位架构上的结构末尾没有添加任何隐式填充。
注意
此结构是 ABI v1 的一部分,已被弃用。请改用 ABI v2 和 struct gpio_v2_line_info_changed
。
-
struct gpiohandle_request¶
关于 GPIO 句柄请求的信息
定义:
struct gpiohandle_request {
__u32 lineoffsets[GPIOHANDLES_MAX];
__u32 flags;
__u8 default_values[GPIOHANDLES_MAX];
char consumer_label[GPIO_MAX_NAME_SIZE];
__u32 lines;
int fd;
};
成员
lineoffsets
所需线路的数组,由相关 GPIO 设备的偏移索引指定
flags
所需 GPIO 线路的所需标志,例如
GPIOHANDLE_REQUEST_OUTPUT
、GPIOHANDLE_REQUEST_ACTIVE_LOW
等,加在一起。请注意,即使请求了多条线路,相同的标志也必须适用于所有线路,如果您想要设置各个标志的线路,请逐个请求它们。可以选择一批输入或输出线路,但它们必须具有相同的特性,即所有输入或所有输出,所有低电平有效等default_values
如果在请求的线路上设置了
GPIOHANDLE_REQUEST_OUTPUT
,则此项指定默认输出值,应为 0(非活动)或 1(活动)。 0 或 1 以外的任何值都将被解释为活动。consumer_label
所选 GPIO 线路的所需使用者标签,例如“my-bitbanged-relay”
lines
此请求中请求的线路数,即上述数组中有效字段的数量,设置为 1 以请求单条线路
fd
在成功执行
GPIO_GET_LINEHANDLE_IOCTL
操作后,包含表示该请求的有效匿名文件描述符
注意
此结构是 ABI v1 的一部分,已被弃用。请改用 ABI v2 和 struct gpio_v2_line_request
。
-
struct gpiohandle_config¶
GPIO 句柄请求的配置
定义:
struct gpiohandle_config {
__u32 flags;
__u8 default_values[GPIOHANDLES_MAX];
__u32 padding[4];
};
成员
flags
请求的 GPIO 线路的更新标志,例如
GPIOHANDLE_REQUEST_OUTPUT
、GPIOHANDLE_REQUEST_ACTIVE_LOW
等,加在一起default_values
如果在 flags 中设置了
GPIOHANDLE_REQUEST_OUTPUT
,则此项指定默认输出值,应为 0(非活动)或 1(活动)。 0 或 1 以外的任何值都将被解释为活动。padding
保留供将来使用,应填充为零
注意
此结构是 ABI v1 的一部分,已被弃用。请改用 ABI v2 和 struct gpio_v2_line_config
。
-
struct gpiohandle_data¶
GPIO 句柄的值信息
定义:
struct gpiohandle_data {
__u8 values[GPIOHANDLES_MAX];
};
成员
values
获取线路状态时,此项包含线路的当前状态;设置线路状态时,此项应包含所需的目标状态。状态为 0(非活动)或 1(活动)。设置时,0 或 1 以外的任何值都将被解释为活动。
注意
此结构是 ABI v1 的一部分,已被弃用。请改用 ABI v2 和 struct gpio_v2_line_values
。
-
struct gpioevent_request¶
关于 GPIO 事件请求的信息
定义:
struct gpioevent_request {
__u32 lineoffset;
__u32 handleflags;
__u32 eventflags;
char consumer_label[GPIO_MAX_NAME_SIZE];
int fd;
};
成员
lineoffset
要订阅事件的所需线路,由相关 GPIO 设备的偏移索引指定
handleflags
所需 GPIO 线路的所需句柄标志,例如
GPIOHANDLE_REQUEST_ACTIVE_LOW
或GPIOHANDLE_REQUEST_OPEN_DRAIN
eventflags
所需 GPIO 事件线路的所需标志,例如
GPIOEVENT_REQUEST_RISING_EDGE
或GPIOEVENT_REQUEST_FALLING_EDGE
consumer_label
所选 GPIO 线路的所需使用者标签,例如“my-listener”
fd
在成功执行
GPIO_GET_LINEEVENT_IOCTL
操作后,包含表示该请求的有效匿名文件描述符
注意
此结构是 ABI v1 的一部分,已被弃用。请改用 ABI v2 和 struct gpio_v2_line_request
。
-
struct gpioevent_data¶
正在推送到用户空间的实际事件
定义:
struct gpioevent_data {
__u64 timestamp;
__u32 id;
};
成员
timestamp
事件发生时间的最佳估计值,以纳秒为单位
id
事件标识符,
GPIOEVENT_EVENT_RISING_EDGE
或GPIOEVENT_EVENT_FALLING_EDGE
之一
注意
此结构是 ABI v1 的一部分,已被弃用。请改用 ABI v2 和 struct gpio_v2_line_event
。