跳转到内容

Oberon/ETH Oberon/bootstrap

来自 Wikibooks,开放世界中的开放书籍

本文档最初托管于 ETHZ。它仍在 ETH 许可 下,并存放在 WayBack 存档 中。

在基于 x86 的 PC 上引导操作系统,并应用于 ETH Oberon
概述

本文档的目的是以系统化和渐进的方式解释如何从无到有地启动操作系统(即引导机制),从最简单的单一操作系统设置,到更复杂、更需要多引导管理器的设置,包括引导加载程序的级联。每个操作系统在安装介质上都有自己的引导扇区,这里将回顾其中几个,但将重点强调通用性,以方便理解用于启动操作系统的机制的细节。

启动操作系统的替代方法将按以下顺序进行回顾

  1. 直接从软盘引导:软盘是一种单分区存储介质(本文档中有描述)
  2. 通过(可能包含多个分区的)海量存储介质的 MBR 间接引导分区
  3. 通过 引导管理器 引导,通常在多个操作系统环境中使用
  4. 通过 另一个操作系统 间接引导,例如通过 DOS 使用 noboot.exe(Oberon)或 loadlin.exe(Linux)
  5. 引导一个 托管在文件中的虚拟操作系统(在 FatFS 或 Linux FS 中)

该方法通常适用于大多数操作系统,但重点放在我们感兴趣的操作系统 ETH Oberon 上。

引导序列期间 BIOS 活动

这部分对于所有基于 x86 的机器来说是通用的,但根据不同制造商提供的 BIOS,会观察到一些差异,并且 BIOS 设置也可能因机器而异。

在系统完成开机自检 (POST) 后,BIOS 引导程序会生成一个 INT 19。通常,INT 19 会尝试从第一个软盘驱动器读取引导扇区(参见下一节“直接从软盘引导”)。如果在软盘上找到了引导扇区,该引导扇区将被读入内存位置 0000:7C00,并且 BIOS 检查该扇区的最后两个字节是否为“55 AA”。如果正确,该程序将跳转到内存位置 0000:7C00 以执行负责加载和启动操作系统的引导加载程序(它从内核开始)。

如果最后两个字节不包含“55 AA”签名,则会显示一个依赖于 BIOS 的消息,例如“非可引导磁盘”或“非系统”,并且机器将停止运行。

但是,如果在第一个软盘驱动器上没有找到引导扇区,INT 19 会尝试从第一个硬盘读取 MBR。如果找到 MBR,它将被读入内存位置 0000:7C00,并且 INT 19 将跳转到内存位置 0000:7C00。MBR 中的小程序将在简单情况下尝试在其分区表中找到一个活动(可引导)分区。或者,它可以是引导管理器程序的起始部分。

按下 Ctrl-Alt-Del 键时也会调用 INT 19。在大多数系统中,Ctrl-Alt-Del 会导致在调用 INT 19 之前执行简短的 POST 版本。

直接从软盘引导

一种启动操作系统的简单而稳定的方法,缺点是速度相对较慢。大多数制造商建议创建救援软盘,以便在启动相关操作系统时遇到困难时使用。

先决条件是

  1. 机器必须配备软盘驱动器。对于较新的非传统机器来说,情况并非如此。
  2. BIOS 设置必须优先考虑软盘驱动器。如果安装了两个软盘驱动器,则可以通过 BIOS 设置或在较旧的机器(其 BIOS 不支持软件切换)中切换电缆来切换 A 和 B 驱动器。
  3. 必须提供一张可引导软盘。对于 ETH Oberon,请参见 软盘支持

优势:消除了安装 MBR 或引导管理器时可能遇到的困难。

ETH Oberon 引导加载程序

完整的 ETH Oberon 引导加载程序 (OBL) 汇编代码位于 OBL.Asm 中,其编译后的形式位于 OBL.Bin 中。

当执行 Partitions.Format 命令 时,OBL 写入 Oberon 分区(类型 76)中的前 4 个扇区。一个分区占据整个软盘。对于海量存储设备上的分区来说也是如此。不同之处在于,在后一种情况下,OBL 在 MBR 中的第一阶段加载程序之后成为第二阶段加载程序。

引导扇区的结构是

Offset Value        Assembler      Description 
in hex.             instruction
     First 3 bytes 
0000   EB29         JMP    START 
0002   90           NOP 
     BIOS parameter block (BPB) 
(* the values in the fields depend on the media *)
0003   4F4245524F4E00             ;OEM ID - 'OBERON',0 
000A   1F                         ;mask for shift status byte 
000B   0000                       ;bytes per sector 
000D   00                         ;sectors per cluster 
000E   0800                       ;reserved sectors 
0010   04                         ;table sectors 
0011   0000                       ;root directory size 
0013   0000                       ;total sectors on disk 
0015   00                         ;media descriptor 
0016   0000                       ;sectors per FAT 
0018   3F00                       ;sectors per track 
001A   0000                       ;number of heads 
001C   00000000                   ;hidden sectors 
0020   00000000                   ;total sectors of partition 
0024   00                         ;drive number 
0025   00                         ;current head 
                                  ; used for checksum 
0026   00                         ;signature 
0027   0300                       ;offset of 'OBERON' 
0029   00                         ; 
002A   00                         ; 
     Boot program 
002B   FA            CLI          ;disable interrupts 
002C   EA            JMP          ;jump 
002D   3100          ... 
.... 
     Message 
01E4   492F4F206572726F7221       ;'I/O error!' 
01EF 
01F0   08040000                   ;file system ofs in blocks 
01F4   E7000000                   ;file system size in sectors 
01F8   414F5321                   ;'AOS!' 
01FC   01                         ;version 
01FD   0C                         ;sector size log2 
01FE   55AA                       ;signature

当 Oberon 运行时,可以通过执行以下命令显示引导扇区:Partitions.ShowBlocks dev#part 0 1 ~。可以使用您喜欢的操作系统或第三方软件(商业版、共享版等)的功能获取相同的信息。

DOS 引导扇区

阅读 Hale Landis 编写的 "它是如何工作的:DOS 软盘引导扇区"

Linux 引导扇区

阅读 "示例引导扇区"

2008 年 3 月 19 日 - 版权所有 © 2002 ETH Zürich。保留所有权利。
电子邮件:oberon-web at inf.ethz.ch [已过期]
主页:http://www.ethoberon.ethz.ch/ [已过期]

华夏公益教科书