8. userio 協議¶
- 版權:
© 2015 Stephen Chandler Paul <thatslyude@gmail.com>
由 Red Hat 贊助
8.1. 引言¶
本模組旨在透過允許輸入驅動程式開發人員測試各種 serio 裝置(主要是筆記型電腦上的各種觸控板)而無需實際裝置在手邊,從而簡化他們的工作。userio 透過允許任何特權使用者空間程式直接與核心的 serio 驅動程式互動並從那裡控制虛擬 serio 埠來實現這一點。
8.2. 使用概述¶
要與 userio 核心模組互動,只需在應用程式中開啟 /dev/userio 字元裝置即可。透過向裝置寫入資料來向核心模組傳送命令,從 serio 驅動程式接收到的任何資料都原樣地從 /dev/userio 裝置讀取。所有與裝置互動所需的結構和宏都定義在 <linux/userio.h> 和 <linux/serio.h> 中。
8.3. 命令結構¶
用於向 /dev/userio 傳送命令的結構如下:
struct userio_cmd {
__u8 type;
__u8 data;
};
type 描述了正在傳送的命令型別。它可以是 <linux/userio.h> 中定義的任何 USERIO_CMD 宏。data 是與命令一起的引數。如果命令沒有引數,此欄位可以保持不變,核心將忽略它。每個命令應透過將結構直接寫入字元裝置來發送。如果您傳送的命令無效,字元裝置將返回錯誤,並且會將更詳細的錯誤列印到核心日誌中。每次只能傳送一個命令,初始命令之後寫入字元裝置的任何額外資料都將被忽略。
要關閉虛擬 serio 埠,只需關閉 /dev/userio。
8.4. 命令¶
8.4.1. USERIO_CMD_REGISTER¶
將埠註冊到 serio 驅動程式並開始來回傳輸資料。註冊只能在透過 USERIO_CMD_SET_PORT_TYPE 設定埠型別後執行。沒有引數。
8.4.2. USERIO_CMD_SET_PORT_TYPE¶
設定我們正在模擬的埠型別,其中 data 是正在設定的埠型別。可以是 <linux/serio.h> 中的任何宏。例如:SERIO_8042 會將埠型別設定為正常的 PS/2 埠。
8.4.3. USERIO_CMD_SEND_INTERRUPT¶
透過虛擬 serio 埠向 serio 驅動程式傳送中斷,其中 data 是正在傳送的中斷資料。
8.5. 使用者空間工具¶
userio 使用者空間工具能夠使用 i8042 中的一些除錯資訊記錄 PS/2 裝置,並在 /dev/userio 上回放這些裝置。這些工具的最新版本可在以下網址找到: