0.11之路(一):BIOS引導過程
BIOS在記憶體最開始的位置構建中斷向量表,緊接著是BIOS資料區,此外還要有與中斷向量表相應的中斷服務程式。我們正是利用這些中斷服務程式把核心載入到記憶體中。
中斷是作業系統裡的一個意義重大的概念,是一個技術手段。
載入核心程式併為保護模式做準備
對於Linux 0.11來說,計算機將分三批次逐次載入作業系統的核心程式碼,第一批由BIOS中斷 int 0x19 把第一扇區 bootsect 的內容載入到記憶體;第二批、第三批在bootsect的指揮下,分別把其後的4個扇區和隨後的240個扇區的內容載入至記憶體。
先來看一下 int 0x19 指向的中斷服務程式 —— “啟動載入服務程式”。首先這個程式是BIOS事先設計好的,程式碼是固定的,與作業系統無關,它的目的就是找到軟盤並載入第一扇區。
所以BIOS是獨立於作業系統的。
接著就是將第一扇區載入到記憶體 0x07C00 的位置,作業系統出現了。
這個扇區裡存放的是 Linux 0.11 的載入程式(俗稱bootloader)。
這裡要區分一下:BIOS和bootloader是不同的。BIOS之後,bootloader開始工作。在PC上bootloader分為兩部分:第一階段載入程式位於主開機記錄(MBR),用以引導位於某個分割槽上的第二階段載入程式,如NTLDR、BOOTMGR和GNU
GRUB等。所以我們經常見到的grub就屬於bootloader,當然它不是BIOS。
在ARM板移植時,我們通常會對uboot進行裁剪,使得這個板子擁有合適的bootloader,但與PC不同的是,對於嵌入式Linux來說,並沒有BIOS,而是直接從flash中執行bootloader,然後裝載核心,所以省去了BIOS。
於是第一扇區就稱為啟動扇區(boot sector)。第一扇區的載入,標誌著 Linux 0.11 中的程式碼即將發揮作用。第一扇區中的程式碼是彙編程式 bootsect.s ,這是計算機開機以來,記憶體中第一次有了 linux 作業系統自己的程式碼,雖然只是啟動程式碼。
到目前流程是這樣的:
開機——BIOS——bootsect.s
對BIOS開發人員來說,他們只需要做到:接到啟動作業系統的命令後,只從啟動扇區把程式碼載入到0x07C00位置,至於這個扇區中存放的是不是作業系統的載入程式,則不管,將責任推給使用者。也就是說使用者要確保正確安裝了作業系統。而作業系統的設計者必須把最開始執行的程式“定位”在啟動扇區,其餘的程式則可以根據具體的作業系統而有不同的設計。
相關文章
- Windows 作業系統引導過程 BIOS & EFIWindows作業系統iOS
- Linux引導過程和GRUB引導器Linux
- Windows啟動過程(MBR引導過程分析)Windows
- UEFI BIOS模式下Windows系統啟動過程以及引導檔案修復方法iOS模式Windows
- Linux 引導過程內幕Linux
- LINUX的引導過程 (轉)Linux
- 引導過程與服務控制
- 0.11之路(三):system模組
- 計算機系統引導過程計算機
- Android 引導介面的實現過程Android
- AngularJS教程六—— 啟動引導過程AngularJS
- 0.11之路(二):載入setup
- Linux的引導過程與服務控制Linux
- springboot引導上下文載入過程和配置載入過程Spring Boot
- Linunx系統引導過程及MBR/GRUB故障
- 解Bug之路-記一次中介軟體導致的慢SQL排查過程SQL
- Linux 開機引導和啟動過程詳解Linux
- 安裝WIN7過程中提示丟失引導檔案Win7
- 機器學習導圖系列(3):過程機器學習
- 解Bug之路-記一次儲存故障的排查過程
- 第十五單元-Linux系統中引導過程及修復Linux
- 一次FGC導致CPU飆高的排查過程GC
- 一種3位sar adc工作過程推導(二)
- mysql儲存過程的引數MySql儲存過程
- 使用in out引數模式的過程模式
- 使用out引數模式的過程模式
- 【JVM進階之路】十三:類載入過程JVM
- 物件導向和麵向過程物件
- 通過 Grub 來引導啟動 UBUNTUUbuntu
- 一場版本升級引發的效能血案的追凶過程
- 請用物件導向的思想,談一談面試的過程物件面試
- Kotlin協程學習之路【一】Kotlin
- 中介軟體的引數解析過程
- 儲存過程單引號問題儲存過程
- 北航OS課程筆記--二、系統引導筆記
- 【機器學習】邏輯迴歸過程推導機器學習邏輯迴歸
- Gradle系列-引導篇(一)Gradle
- 詳述一條SQL引發的高CPU故障處理過程SQL