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_IOCTLrequest.fd 中返回的匿名檔案描述符暴露給使用者空間。

在本文件中,線路控制代碼檔案描述符稱為 handle_fd

操作

可以線上路控制代碼上執行以下操作

線路事件

線路事件由 GPIO_GET_LINEEVENT_IOCTL 建立,並提供對請求線路的訪問。線路事件透過 GPIO_GET_LINEEVENT_IOCTLrequest.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_REQUESTEDGPIOLINE_CHANGED_RELEASEDGPIOLINE_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_OUTPUTGPIOHANDLE_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_OUTPUTGPIOHANDLE_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_LOWGPIOHANDLE_REQUEST_OPEN_DRAIN

eventflags

所需 GPIO 事件線路的所需標誌,例如 GPIOEVENT_REQUEST_RISING_EDGEGPIOEVENT_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_EDGEGPIOEVENT_EVENT_FALLING_EDGE 之一

注意

此結構是 ABI v1 的一部分,已被棄用。請改用 ABI v2 和 struct gpio_v2_line_event