GPIO_GET_LINEHANDLE_IOCTL

警告

此 ioctl 是 GPIO 字符设备用户空间 API (v1) 的一部分,并已被 GPIO_V2_GET_LINE_IOCTL 废弃。

名称

GPIO_GET_LINEHANDLE_IOCTL - 从内核请求一个或多个线路。

概要

GPIO_GET_LINEHANDLE_IOCTL

int ioctl(int chip_fd, GPIO_GET_LINEHANDLE_IOCTL, struct gpiohandle_request *request)

参数

chip_fd

open() 返回的 GPIO 字符设备的文件描述符。

request

指定要请求的线路及其配置的 handle_request

描述

从内核请求一个或多个线路。

虽然可以请求多个线路,但相同的配置应用于请求中的所有线路。

成功后,请求进程将被授予对线路值的独占访问权和对线路配置的写访问权。

线路的状态,包括输出线路的值,保证保持为请求状态,直到返回的文件描述符被关闭。一旦文件描述符被关闭,从用户空间的角度来看,线路的状态将变得不受控制,并可能恢复到其默认状态。

请求已在使用的线路会出错 (EBUSY)。

关闭 chip_fd 对现有的线路句柄没有影响。

配置规则

以下配置规则适用

方向标志 GPIOHANDLE_REQUEST_INPUTGPIOHANDLE_REQUEST_OUTPUT 不能组合使用。如果两者都没有设置,则唯一可以设置的另一个标志是 GPIOHANDLE_REQUEST_ACTIVE_LOW,并且线路被请求为“按原样”,以便在不改变电气配置的情况下读取线路值。

驱动标志 GPIOHANDLE_REQUEST_OPEN_xxx 需要设置 GPIOHANDLE_REQUEST_OUTPUT。只能设置一个驱动标志。如果没有设置,则假定线路为推挽式。

只能设置一个偏置标志 GPIOHANDLE_REQUEST_BIAS_xxx,并且它需要同时设置一个方向标志。如果没有设置偏置标志,则偏置配置不会更改。

请求无效的配置会出错 (EINVAL)。

配置支持

如果底层硬件和驱动程序不直接支持请求的配置,内核将应用以下方法之一

  • 拒绝请求

  • 在软件中模拟该功能

  • 将该功能视为尽力而为

应用的方法取决于该功能是否可以在软件中合理地模拟,以及如果不支持该功能,对硬件和用户空间的影响。为每个功能应用的方法如下

功能

方法

偏置

尽力而为

方向

拒绝

驱动

模拟

偏置被视为尽力而为,以允许用户空间对支持内部偏置的平台应用与需要外部偏置的平台相同的配置。最坏的情况是线路浮动而不是按预期偏置。

当线路不应被驱动时,通过将线路切换为输入来模拟驱动。

在所有情况下,由 GPIO_GET_LINEINFO_IOCTL 报告的配置是请求的配置,而不是最终的硬件配置。用户空间无法确定某个功能是否在硬件中受支持,是否被模拟,或者是否是尽力而为。

返回值

成功时返回 0,并且 request.fd 包含请求的文件描述符。

出错时返回 -1,并且 errno 变量会设置为适当的值。常见的错误代码在 GPIO 错误代码 中描述。