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 上回放设备。这些工具的最新版本可以在以下位置找到