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