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_CONFIGpadding保留供將來使用
描述
此處嵌入的 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_DRAINeventflags所需 GPIO 事件線路的所需標誌,例如
GPIOEVENT_REQUEST_RISING_EDGE或GPIOEVENT_REQUEST_FALLING_EDGEconsumer_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。