当我按下键盘上的键并显示在shell上时,发生的操作的实际path是什么?

我正在使用一个通用的USB键盘,Linux 2.6.27与GNOME桌面,GNOMEterminal和bashshell。 我有兴趣知道软件中发生了什么。 我的键盘上的特殊字符是如何用某种编码解释成字符的,而字符图片又是从哪里来的?

带USB驱动程序的Linux输入层从键盘上获取扫描码(基本上是“KEY 1 DOWN”,“KEY 1 UP”)。

X使用其键盘映射将扫描码转换为键码和X输入事件。

GTK输入法将输入事件的顺序转换为组合的Unicode字符。

Gnome终端使用UTF-8编码这些外壳。

壳牌不在乎。 它只是知道它正在处理一个多字节编码。

shell通过TTY回显多字节编码的文本。

Gnome终端解码传入的文本并确定unicode代码点。

Gnome终端使用GTK +工具绘制字符。

GTK +使用Pango渲染文本,并调用X库将像素绘制到屏幕上。

X服务器在屏幕缓冲区中绘制字符,视频卡显示它们。

这是我在图表上的尝试:

替代文字http://img.zgserver.com/linux/system_layers.png

看看它的层次。 首先是硬件,Linux内核中的设备驱动程序将具有通过设备中的状态寄存器和中断处理程序来控制和响应键盘的具体方法。

接下来是Linux内核,它将有一些方法为启动时检测到的每个硬件加载相应的驱动程序。 一旦加载,设备驱动程序符合一些内核驱动程序接口,从设备提供数据到内核,反之亦然。

在内核之外,在某种程度上,设备驱动程序和硬件是可见的,通常作为/ dev目录中的列表。 需要使用设备的软件(如终端仿真程序)将通过/ dev中的条目访问设备。

用户级应用程序和设备之间的通信现在通过一系列读/写和读写操作来进行。 这些陷入到内核中(有关详细信息,请参阅手册页),此时内核将与上面加载的设备驱动程序进行通信。

终端仿真程序将在您输入字符(大多数情况下)时显示字符,并且通过使用它可以访问的字体(大多数情况下)从设备接收字符,这取决于应用程序位于各个位置。 (我在这里泛泛而谈,因为我不明白Gnome)。

这有帮助吗?