1984年出货的IBM PC/AT里,有一段键盘控制器固件直到2008年才被公开转储,距离机器上市已经过去二十多年。随后它被反汇编、逆向工程,人们才看清那段代码到底做了什么。而围绕这颗控制器建立的接口,到那时早已成为x86 PC的固定组成部分。
今天你电脑里早已找不到那颗原始物理芯片——Intel 8042,但它在其他芯片中的兼容实现仍然沿用着同一套软件可见的接口,以及那个用单个字节就能触发处理器复位的命令。四十多年后,这条老路依然活着。
![]()
8042从来不是键盘专用芯片
Intel 8042所属的UPI-42系列,是源自MCS-48微控制器架构的可编程外设控制器。IBM在主板上给它烧录固件,让它接收键盘数据、再转给系统其余部分。换句话说,它并不是为键盘而生,只是被IBM改造成了键盘控制器。
IBM还把8042输出端口的空闲引脚派上了用场。输出端口共有8位,其中两位控制了主板上的关键功能。位1管理A20门,这个变通方案是为了兼容依赖超过1MB地址环绕的8086软件;位0则直接连到了系统复位线路。只要向输出端口写入一个字节、让位0保持低电平,处理器就会被一直摁在复位状态,直到信号释放。
保护模式下的求生之路
这条复位线对当时的软件特别有用。80286有个出了名的设计限制:一旦进入保护模式,就没有任何常规架构指令能切回实模式。于是IBM给出了一条路径,让软件先复位处理器,再安排恢复执行,而不是做一次彻底的冷启动。
因此,键盘控制器复位成了保护模式软件完成模式切换的标准方式之一。在8042上触发复位有两种写法,但只有一种是安全的:向I/O端口0x64写入0xFE,8042会把输出端口位0拉低大约6微秒,短暂触发系统复位。这就是那段持续至今的硬件后门。
Linux仍把它当作第二选择
现在的电脑当然不再以8042复位作为主要重启手段。但奇妙的是,Linux内核通常还是把它列为第二步:先尝试ACPI,接着就轮到键盘控制器复位,如果机器仍然顽固地不肯关机,再继续回退到其他机制。
把它保留下来的原因相当复杂。四十年里,没有人能真正切断这条连接。在现代计算环境里,一个来自1984年兼容方案的复位命令仍然排在系统重启备选路径的第二位,这件事本身就有种荒谬的合理——它太老、太普遍,反而没人敢拔掉。
一块被环境推上C位的芯片
从可编程外设控制器到键盘控制器,再到系统复位的关键开关,8042的故事更像是一场技术演进中的路径依赖。IBM最初只是把它当作键盘数据入口,顺手把空闲引脚接上复位信号,结果这个决定被写进了无数x86平台的兼容基线里。
当原始物理8042被其他芯片的兼容实现取代后,那个接口和复位命令却没有消失。它们继续存在,继续被Linux内核调用,继续支撑着一个四十年没被剪断的旧连接。没人能保证这道门什么时候才会彻底关闭。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.