BIOS开发笔记 20 – 按下一个按键发生了什么?
当我们在笔记本的键盘按下一个字符到显示出来时,背后发生了哪些事情呢?本文分 EC 和 CPU 两个部分进行详细剖析。

注:本文探讨的硬件链路特指笔记本电脑内置键盘(基于 EC 与 eSPI 架构模拟的 PS/2 设备)。如果是外接的 USB 键盘,其底层走的是 USB 协议栈的轮询与批量/中断传输机制,与本文的硬件路由链路有所不同。
EC 端
键盘的矩阵信号是连接到 EC 端的,所有的按键都由 EC 进行检测处理。当一个按键按下时,EC 扫描到信号线有变化,便进行查表生成一个对应的按键扫描码,转换处理后写入缓冲区中。键盘数据准备好了,最后一步便是通知 Host 来读取了。
这里又是如何通知 Host 的呢?在 LPC 接口时代,是有一根物理中断信号的,EC 直接操作中断信号来通知 Host 端。而在现代的 eSPI 接口,已经没有了物理中断信号,使用的是虚拟线(Virture Wire), EC 标记中断为 IRQ1,通过寄存器,触发硬件通过 eSPI 接口向 Host 发送一个 Viture Wire Package 消息包,这样Host 端便能收到通知了。
CPU 端
CPU 封装内的 PCH 接收到 eSPI 总线传来的虚拟线消息,其内部的 eSPI Host 控制器将其解码,并还原为内部硬件的中断请求。

PCH 将这个请求传递给内部集成的 IOAPIC(高级可编程中断控制器)。IOAPIC 负责收集所有外部设备的中断。IOAPIC 根据其重定向表(Redirection Table)确认 IRQ1 的信息:

-
查表定位:IRQ1 对应 RTE 的 Index 12h (低 32 位) 和 13h (高 32 位)。 -
门禁审核 (Mask Check): IOAPIC 检查 12h 的 Bit 16 (Mask位)。如果为 1(被屏蔽),这次按键信号就直接被扔进垃圾桶。如果为 0,则准许放行。 -
打包快递 (Packet Generation): IOAPIC 根据 RTE 的配置,把这个简单的电平信号打包成一个复杂的数据包(Message):
-
收件人是谁? 查 13h 的高 8 位 (Destination Field),比如发给 CPU Core 0。
这是什么级别的件? 查 12h 的 Bits 10:8 (Delivery Mode),键盘通常是 Fixed(固定普通中断)。
车牌号是多少? 查 12h 的 Bits 7:0 (Vector,中断向量),比如 OS 给键盘分配的是向量 0x93。
IOAPIC 会把刚才打包好的“快递”,变成一次特殊的内存写操作 (Memory Write),传递给 CPU。
每个 CPU 核心内部,都住着一个 Local APIC(本地 APIC)。它是接收 IOAPIC 快递的门卫。
签收快递 (IRR 挂号): CPU Core 0 的 Local APIC 收到消息,看到向量号是 0x93,它会在自己的 IRR(中断请求寄存器) 的第 0x93 位画个勾,表示“有这个中断在排队了”。
打断 CPU (Interrupt CPU): Local APIC 检查当前 CPU 是否允许被打断(比如 EFLAGS 寄存器的 IF 位是否为 1,以及当前有没有正在处理更高优先级的中断)。如果条件允许,Local APIC 强行暂停 CPU 当前正在执行的指令。
查字典 (IDT 路由): CPU 被打断后,找 Local APIC 要到了向量号 0x93。CPU 拿着这个号码,去查操作系统在内存里建好的 IDT (中断描述符表),找到了第 0x93 项登记的函数地址。
驱动执行 (ISR): CPU 跳转到那个函数地址,这就是 Windows 的 i8042prt.sys 驱动的中断服务例程 (ISR)。
取货与清账 (EOI):
驱动程序从60h端口执行读指令,把第一阶段放在缓冲区里的 Make Code 拿走,准备翻译成字母交给上层应用。
驱动程序通过写 Local APIC 的特定寄存器,发送一个 EOI (End of Interrupt) 信号,告诉硬件:“这单我处理完了,可以接下一单了。”
实验
通过 HE 可以查看键盘中断 IRQ1 的 RTE 表,位于 Index 12h:

如果将 bit 16 置 1,即屏蔽键盘 IRQ1 中断,键盘输入将无效。

参考手册
1.Enhanced Serial Peripheral Interface (eSPI) Interface Base Specification
2.82093AA I/O ADVANCED PROGRAMMABLE INTERRUPT CONTROLLER(IOAPIC)
版权声明:
作者:bin
链接:https://ay123.net/mystudy/1947/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论