Foxdisk04-启动原理1

我不记得是哪个小品了,赵本山用他的标准铁岭普通话说:“我不想知道它怎么来的,我只想知道它是怎么没的。”

对编程而言,“怎么来的”实际上非常重要,不能不了解。Foxdisk的启动过程,在“如何安装1”中已经有了说明,本篇会尽量的把相关的背景知识介绍清楚。

有几个关键词:BBS、Legacy BIOS、UEFI、MBR。

BBS

英特尔、Phoenix和康柏公司在1996年联合发布了BIOS引导规约(BIOS Boot Specification),简称BBS(图2)。尽管十几年已经过去了,但是这个规约中的大多数内容至今仍被使用着。本文中使用的很多术语和数据结构都来自这个规约。

Foxdisk04-BBS spec

 图1 BIOS Boot Spec

BBS将引导设备划分为以下三种类型:

BAID – 即BIOS知道的IPL设备(BIOS Aware IPL Device),也就是说BIOS中已经为这样的设备准备了支持引导的代码。第一个软驱、第一个硬盘、ATAPI接口的光驱等都属于这一类型。
传统设备 – 是指带有Option ROM(见下文)但没有PnP扩展头的标准ISA设备。例如已经过时的通过ISA卡连接到系统中的SCSI硬盘控制器。
PnP设备 – 是指符合PnP BIOS规约(Plug and Play BIOS Specification)的即插即用设备。

第二类设备对很多人来说已经很少见,可是对我来说,几乎天天都要处理这样的产品。隔离卡就是一个带有Option ROM的Pnp设备,上面的代码已经被我不知道折腾过多少次了。

不用理解得太复杂,简单来说,具有符合规范Option ROM的Pnp设备,BIOS会在某个阶段把控制权转交给它。所有隔离卡、还原卡以及一些类似的安全产品,都是基于此原理来构建的。

 

Legacy BIOS&UEFI

网上有太多关于这方面的介绍,我站在Foxdisk开发的角度来谈我的想法。Legacy BIOS大部分都是用汇编写的,对工程师来说那绝不是一个轻松的活。我曾经因工作原因在QDI(已经被记忆科技收购)待过一段时间,天天看着BIOS工程师一点点的除虫,深感不易。我最多的工作是在Legacy BIOS上开发Option ROM,或者开发Oprom嵌入到BIOS中,所以不得不深入去了解它的工作原理。确实能让人对X86有很好的感觉,但仅此而已。为了当时的工作,必须大量的记住各种指令,不停的翻查各种古老的资料。这就是在Legacy BIOS上进行开发给我的感受,我认为确实应该让它退出历史舞台了。

UEFI系统的固件就相当于一个简单的操作系统,在开机程序完成后,使用者可选择执行UEFI Shell当做命令接口,或指定任一其它操作系统。这种情形就有点像早期的DOS一样,Windows只是另一个使用者接口系统。包括AMI和Insyde,现在的UEFI BIOS都是以Intel所撰写的UEFI功能核心Framework(开发代号为Tiano)为基础,再加挂其编写的架构模块。

我大概从2011年初开始,也是因为工作原因,需要写UEFI Oprom、shell app什么的,花了不少时间学习它。当时甚至起过把Foxdisk移植到UEFI shell下的想法,不过动力不足,就留到了现在。

 MBR

主引导记录(MBR,Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。

这是Legacy BIOS时代的遗产。现在的BIOS慢慢的都变成了UEFI BIOS,不过因为历史原因,都会支持Legacy启动方式,所以MBR还会存在一段时间。BIOS在启动引导设备时,会将MBR代码(位于LBA 0)加载到内存0x0:7c00处,并把控制权转移过去。

好,介绍到此处,可以去了解Foxdisk的原理了。

Foxdisk把MBR改为自己的代码,我们暂且取名为Loader,此段代码位于Loader.asm中。Loader用来加载放在硬盘末端的Foxdisk代码,代码段加载到0x7000:0,数据段加载到0x8000:0中。在进行一些简单的校验之后,通过retf指令,远跳转到Fxodisk.c中的BootEntry。从这儿开始,才算是搭建好Foxdisk的工作舞台。

文中介绍的知识,有些文档很有帮助,估计现在网上也很难找到,我就把链接放到这里了。包括:Pnp BIOS spec 1.0a, BIOS Boot Spec 1.01, PhoenixBios 4.0 User’s Manual, BIOS Enhanced Disk Drive Spec 3.0。链接:BIOS手册

2,846 total views, 2 views today

发表评论

电子邮件地址不会被公开。