跳轉到內容

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/ [已過期]

華夏公益教科書