BIOS和Bootloader部分 Linux系统引导过程

Linux系统引导过程(BIOS和部分)
刘建文()
KEY:x86体系 CPU 系统引导 启动过程 Linux LILO
BIOS()
X86体系计算机系统的自举()过程起始于对CPU的RESET引脚的触发 。这个操作会把CPU的一些寄存器置为默认值,比如代码段寄存器CS(code )被置为、指令指针寄存器(EIP)被置为等,其它寄存器的初始值如下表(下表未列的其它寄存器值均为未定义):
32位还是16位?
细心注意开机时有部分寄存器的值是32位的 。其实在386以后的32位处理器在实模式下产生的地址也是32位的,只不过16位程序只使用固定的16位兼容的一个地址空间罢了(KEMIN:这个结论有待进一步的验证) 。举例如开机第一指令8086上应该是,但是在80368却是 。这个地址在保护模式是通过EIP加上 保存在由段选择子指向的段描述符里的[基址 ]得到的,但是在实模式下[段描述 ]符尚没有初始化,那么基地址从哪来的呢?INTEL解释说为了提高访问的速度,每个段寄存器都有隐藏部分用作缓存,看下面:
The CShas two parts: thepart and thebasepart. In real- mode, the baseisbythe 16-bitvalue 4 bits to the left toa 20-bit base . ,areset, the
in the CSiswith F000H and the baseiswith . Theis thusbythe baseto the value in the EIP(that is,+ FFF0H = ).
Everyhas a “” part and a “” part. (Thepart isto as a “ cache” or a “ .”) When aisinto thepart of a, thealso loads thepart of thewith the base ,limit, andfrom theto by the. Thein the( and )thetoextra busto read the baseand limit from the. Inin whichhaveto the same, it is theoftothewhen theare . If this is not done, an oldin amight be used after its -has been .
因此电脑一开启,工作在实模式下的16位BIOS程序便开始工作,包括系统自检(POST)和硬件初始化工作;BIOS还提供了基本的设备驱动程序,以便进行输入输出,比如磁盘驱动、显示驱动 。一些早期的基于实模式的OS还依赖BIOS提供的驱动程序,比如DOS,比如.1 。由于 Linux内核是工作在保护模式下的,所以内核重新实现了所有设备驱动,用以替换实模式BIOS驱动 。但在内核正式接管计算机之前,引导加载程序还是利 BIOS的磁盘驱动把内核映像和其它数据从磁盘读出 。
在这一阶段BIOS的大概工作为四部分:
1. 第一个部分是对系统硬件进行故障检测,也叫做加电自检(Power On Self Test,简称POST),功能是检查计算机系统是否良好;通常完整的POST自检将包括对CPU,640K基本内存,1M以上的扩展内存,ROM,主板,CMOS存储器,串并口,显示卡,软硬盘子系统及键盘进行测试,一旦在自检中发现问题,系统将给出提示信息或鸣笛警告 。自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理 。80 x 86, AMD64, andmake use of theand Power (ACPI ) . Thecode in an ACPI- BIOSthatthein the . Thesehave a -and can be read by theto learn how tothe .
2. 第二个部分是初始化,包括创建中断向量、设置寄存器、对一些外部设备进行初始化和检测等,其中很重要的一部分是读取BIOS配置,对系统硬件进行状态配置和检查 。This phase isinPCI-based ,itthat allon the IRQ lines and I/O ports. At the end of this phase, a table ofPCIis .
3. 最后一个部分是查找引导程序,用来引导DOS或其他操作系统 。查找顺序取决于BIOS设置 on the BIOS , themay try to(in a ,order) the first(boot ) of everydisk, hard disk, and CD-ROM in the .
4. As soon as a validis found, ittheof its firstinto RAM,from, and then jumps into thatandthe code just .
KEMIN:把引导自举划分为几个阶段,并明确各个阶段的[逻辑任务 ]对把握引导过程很有裨益 。这些[逻辑任务 ]除硬件状态检测,最主要是逻辑环境的构建 。因为这些阶段前后有明显的[逻辑层级 ]关系,后一阶段的操作环境由前一阶段来构建和初始化 。