1. 程式人生 > >Linux0.11核心引導啟動過程概述

Linux0.11核心引導啟動過程概述

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

Linux0.11僅支援x86架構。它的核心引導啟動程式在資料夾boot內,共有三個彙編程式碼檔案。按照啟動流程依次是:

    (1)bootsect.s。boot是啟動引導的意思,sect即sector,是扇區的意思,二者合在一起啟動引導扇區。這是 磁碟載入程式
。     (2)setup.s     (3)head.s     前兩個彙編程式採用近似Intel的組合語言語法,第三個採用 GNU的AT&T語法。必須採用相應的編譯器才能進行編譯。     系統上電後,Intel的CPU自動進入真實模式,CS:IP=FFFF:0000,也就是說CPU在上電或者復位時總是執行實體地址0xFFFF0處的程式碼。這個地址預設是ROM-BIOS中的地址,在嵌入式系統來說,這裡存放的是一級bootloader的執行程式碼。它完成的操作就是執行系統自檢,在實體地址0x00000處開始初始化中斷向量表。最後,將啟動盤的第一個扇區(0磁軌,0磁頭,引導扇區)裝載到實體地址0x07C00處,並且跳轉到這裡開始執行此處的程式碼。而此處程式碼的作用是將自己移到實體地址0x90000處,因為第一個扇區的程式碼共512KB=0x0200,所以複製過去的範圍就是0x90000-0x901FF。然後,把啟動裝置中第二個扇區開始的連續4個扇區共2KB程式碼(setup.s)讀入到實體地址0x90200處,核心的其他部分(system模組)則被讀入到實體地址0x10000處。因為當時system模組的長度不會超過0x80000位元組大小,所以不會覆蓋0x90000處開始的bootsect和setup模組。裝入完成後,控制轉向setup.s。     setup.s首先設定一些硬體裝置,然後將核心檔案從0x10000處移至0x00000處。系統轉入保護模式,執行0x00000處的程式碼。核心檔案的頭部是用匯編語言編寫的程式碼,即head.s。     head.s會把IDT(中斷向量表)、GDT(全域性段描述符表)、LDT(區域性段描述符表)的首地址裝入到相應的暫存器裡,初始化處理器和協處理器,設定好分頁,最後呼叫init/main.c中的main()程式。     這個流程跟嵌入式系統中的bootloader要完成的功能是一致的。在AT91RM9200上移植U-boot時,也是要有三個檔案load.bin、boot.bin、u-boot.bin。它們共同點都是先從上電起始位置(硬體設定)跳轉到ROM的一級bootloader處,經過處理,跳轉到二級bootloader處。完成引導,就可以啟動核心,掛載檔案系統了。下面的工作是詳細分析三個彙編程式完成的工作,對整個啟動過程有進一步的瞭解。以後還要研究一下AT91RM9200的bootloader部分,爭取自己寫一個比較簡單的bootloader。

 

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述