电子奇趣 · 什么都往 BIOS 里装,包括操作系统
作为一名技术宅,redsPL 与国内的技术宅们一样,日常都少不了要为朋友们义务修电脑的事儿。最近,他接手了一位朋友要为好几台 ThinkPad 刷新、重写 BIOS 的 Flash 芯片的任务。随着刷写任务的进行,他逐渐地萌生了一个想法:既然现在计算机中用来存储 BIOS 的 Flash 越来越大,有没有可能将一个完整的操作系统装进去呢?
说到这里,我们就有必要回顾一下 BIOS 这个东西了。正如其名“Basic Input/Output System 基本输入输出系统”所代表的意思一样,它负责和硬件打交道,对上,为更上层的操作系统等提供基本调用硬件的接口;对下则负责直接读写硬件并操作它们。另一方面,它还负责在计算机上电时对硬件进行自检(POST 上电自检)并在检查完成后搜索可用的操作系统,将操作权限交给操作系统。这也是为什么一旦 BIOS 被破坏之后,计算机就不能启动了的原因。对计算机硬件的一些操作和配置也是在 BIOS 中完成的。而配置信息则保存在主板上的 CMOS 芯片中。现在,不少新电脑已使用 UEFI(统一可扩展固件接口)替换掉了 BIOS 的位置,但其提供的基本功能变化不大。
一开始,BIOS 存储在不可改写的 ROM 中,如果 ROM 是被焊死在主板上的话,连更新都变得非常困难。而 EPROM 和 EEPROM 为 BIOS 程序的更新和升级提供了新的方式。之后,Flash 芯片的诞生使得 BIOS 的更新变得更加方便。老网民们大概还记得在纯 DOS 下小心翼翼地更新 BIOS 的情景,而现在,更新 BIOS 的操作就像是更新其他软件一样简单而轻松。Flash 的容量也越来越大,UEFI 界面更是图形化了,设定参数变得非常简单。而这也为今天的改装带来了方便。
edsPL 为计算机刷入的是一款开源的 x86 计算机 BIOS:SeaBIOS。其占用空间为 1MB 左右,这就使得实验对象的 ThinkPad x200 的 BIOS 中还剩下 7MB 左右的空闲空间。而 SeaBIOS 提供的另一个功能就是模拟一个虚拟软驱并将 Flash 中的部分空间映射过去。软盘的最大容量为 2.88MB,因此如果能够将操作系统简化至 2.88MB 以内的话,就有可能在 BIOS 中启动操作系统。
因此,redsPL 选定了 Windows 3.1 并将其适度剪裁,在其中,既保留了记事本、计算器、画图等原生应用,又加入了 LifeGenesis、一些小游戏和 VB3.0 的完整程序。其中,部分非关键的程序采用 ZIP 的方式压缩,并在系统启动后解压到内存盘中去。在没有打包的时候,所有数据的大小约为 7MB,而压缩后,数据能够存入一张 2.88MB 的软盘镜像中。系统内置了 SVGA 显示驱动和音频驱动,能够使系统正常显示和发出声音。
俗话说麻雀虽小五脏俱全,从一个简单的项目扩展至庞大规模的项目并不难,但要想从复杂的项目开始剥丝抽茧,获得一个精炼的,具有完整功能的项目就变得更加复杂了,这个项目是这样的精妙以至于展现出了独特的美感。