电子奇趣 · 什么都往 BIOS 里装,包括操作系统

null

作为一名技术宅,redsPL 与国内的技术宅们一样,日常都少不了要为朋友们义务修电脑的事儿。最近,他接手了一位朋友要为好几台 ThinkPad 刷新、重写 BIOS 的 Flash 芯片的任务。随着刷写任务的进行,他逐渐地萌生了一个想法:既然现在计算机中用来存储 BIOS 的 Flash 越来越大,有没有可能将一个完整的操作系统装进去呢?

null

说到这里,我们就有必要回顾一下 BIOS 这个东西了。正如其名“Basic Input/Output System 基本输入输出系统”所代表的意思一样,它负责和硬件打交道,对上,为更上层的操作系统等提供基本调用硬件的接口;对下则负责直接读写硬件并操作它们。另一方面,它还负责在计算机上电时对硬件进行自检(POST 上电自检)并在检查完成后搜索可用的操作系统,将操作权限交给操作系统。这也是为什么一旦 BIOS 被破坏之后,计算机就不能启动了的原因。对计算机硬件的一些操作和配置也是在 BIOS 中完成的。而配置信息则保存在主板上的 CMOS 芯片中。现在,不少新电脑已使用 UEFI(统一可扩展固件接口)替换掉了 BIOS 的位置,但其提供的基本功能变化不大。

null

一开始,BIOS 存储在不可改写的 ROM 中,如果 ROM 是被焊死在主板上的话,连更新都变得非常困难。而 EPROM 和 EEPROM 为 BIOS 程序的更新和升级提供了新的方式。之后,Flash 芯片的诞生使得 BIOS 的更新变得更加方便。老网民们大概还记得在纯 DOS 下小心翼翼地更新 BIOS 的情景,而现在,更新 BIOS 的操作就像是更新其他软件一样简单而轻松。Flash 的容量也越来越大,UEFI 界面更是图形化了,设定参数变得非常简单。而这也为今天的改装带来了方便。

null

edsPL 为计算机刷入的是一款开源的 x86 计算机 BIOS:SeaBIOS。其占用空间为 1MB 左右,这就使得实验对象的 ThinkPad x200 的 BIOS 中还剩下 7MB 左右的空闲空间。而 SeaBIOS 提供的另一个功能就是模拟一个虚拟软驱并将 Flash 中的部分空间映射过去。软盘的最大容量为 2.88MB,因此如果能够将操作系统简化至 2.88MB 以内的话,就有可能在 BIOS 中启动操作系统。

null

因此,redsPL 选定了 Windows 3.1 并将其适度剪裁,在其中,既保留了记事本、计算器、画图等原生应用,又加入了 LifeGenesis、一些小游戏和 VB3.0 的完整程序。其中,部分非关键的程序采用 ZIP 的方式压缩,并在系统启动后解压到内存盘中去。在没有打包的时候,所有数据的大小约为 7MB,而压缩后,数据能够存入一张 2.88MB 的软盘镜像中。系统内置了 SVGA 显示驱动和音频驱动,能够使系统正常显示和发出声音。

null

俗话说麻雀虽小五脏俱全,从一个简单的项目扩展至庞大规模的项目并不难,但要想从复杂的项目开始剥丝抽茧,获得一个精炼的,具有完整功能的项目就变得更加复杂了,这个项目是这样的精妙以至于展现出了独特的美感。