6.8.6 安装X的输入设备驱动

看到输入设备驱动,读者可能会有个疑问:内核中不是包括了各种设备的驱动吗?怎么X中还要安装设备驱动?没错,输入设备的驱动是在内核中,X中的所谓输入设备的驱动evdev谈不上是一个驱动了,只不过大家习惯这么称呼而已。evdev模块并不面向任何具体输入设备,它只不过是接收和解析内核发送到用户空间的输入事件。仔细观察图6-12所示的Linux输入子系统的架构,读者自然就会明白。

6.8.6 安装X的输入设备驱动 - 图1

图 6-12 Linux输入子系统架构

操作系统将面对各种各样的输入设备,如鼠标、键盘、触摸屏、游戏手柄等。由于这些输入设备大部分不遵循统一的标准,所以导致应用程序,比如X将不得不处理来自各种输入设备的五花八门的输入事件。

因此,内核中抽象了一个输入子系统。在输入子系统中,设备驱动面对各种各样具体的硬件设备,而输入事件经过事件处理模块处理后,将以统一的格式发送给用户空间的应用,用户空间的应用无需再为各种各样的输入事件格式疲于奔命。

现在很多输入设备都使用USB接口,对于USB接口的输入设备,图6-12演化为图6-13所示。

6.8.6 安装X的输入设备驱动 - 图2

图 6-13 Linux USB设备的输入子系统架构

USB设备通过主控制器连接到主机,所以内核需要驱动USB主控制器。USB流行的一个主要原因就是具有统一的标准,所以对于USB接口的输入设备,它们使用统一的设备驱动,即图6-13中的USB HID驱动。

通过上面的讨论可见,从操作系统的角度,安装X的输入设备驱动事实上有两件事需要做:一是需要配置内核的输入设备相关的驱动和模块;二是安装X的evdev模块。

1.配置内核输入子系统相关驱动

如前文所说,现在大部分鼠标、键盘等输入设备都使用USB接口,所以这一节我们以USB接口的输入设备为例,来配置内核中的输入设备相关的驱动和模块。包括配置USB总线及控制器的驱动、USB输入设备的驱动以及事件处理模块。

(1)配置USB总线以及USB主控制器驱动

配置USB总线及USB主控制器驱动的步骤如下:

1)执行make menuconfig,出现如图6-14所示的界面。

6.8.6 安装X的输入设备驱动 - 图3

图 6-14 配置USB总线及USB主控制器驱动(1)

2)在图6-14中,选择菜单项"Device Drivers",出现如图6-15所示的界面。

6.8.6 安装X的输入设备驱动 - 图4

图 6-15 配置USB总线及USB主控制器驱动(2)

3)在图6-15中,选中菜单项"USB support",出现如图6-16所示的界面。

6.8.6 安装X的输入设备驱动 - 图5

图 6-16 配置USB总线及USB主控制器驱动(3)

4)在图6-16中,选中"Support for Host-side USB",并分别选中几个典型的USB主控制器的驱动,包括"xHCI HCD(USB 3.0)support"、"EHCI HCD(USB 2.0)support"、"OHCI HCD support"、"UHCI HCD(most Intel and VIA)support"。USB总线及主控制器驱动配置完成。

(2)配置USB输入设备驱动

在配置了内核支持USB总线和主控制器之后,一般内核都会自动配置支持USB HID设备,至少我们使用的3.7.4版本的内核是这样的。如果读者使用了其他版本内核,请自己确认,配置过程为:首先进入"Device Drivers"界面,然后再进入"HID support"界面,查看USB HID是否已经被选中,一般情况下选中"Generic HID driver"即可。

(3)配置事件处理模块

1)执行make menuconfig,出现如图6-17所示的界面。

6.8.6 安装X的输入设备驱动 - 图6

图 6-17 配置事件处理模块(1)

2)在图6-17中,选择菜单项"Device Drivers",出现如图6-18所示的界面。

6.8.6 安装X的输入设备驱动 - 图7

图 6-18 配置事件处理模块(2)

3)在图6-18中,选择菜单项"Input device support",出现如图6-19所示的界面。

6.8.6 安装X的输入设备驱动 - 图8

图 6-19 配置事件处理模块(3)

4)在图6-19中,选中"Event interface",事件处理模块配置完成。

Linux系统运行时,事件处理模块将为输入设备在/dev/input目录下建立相应的节点,一般形如eventX,其中"X"是具体的数字。在调试X的鼠标、键盘、触摸屏等输入设备的驱动时,一旦遇到麻烦,可以先确认内核中的设备驱动和事件处理模块是否已经正确工作。方法之一就是通过直接读取这些输入设备的节点,命令如下(其中"X"根据具体的情况进行替换):

6.8.6 安装X的输入设备驱动 - 图9

然后操作鼠标或者键盘等输入设备,通过观察是否有数据输出,以确认内核的输入子系统部分是否已经正确工作。

2.安装evdev模块

使用如下命令安装X服务器使用的evdev模块:

6.8.6 安装X的输入设备驱动 - 图10