Linux0.11内核引导启动过程概述
生活随笔
收集整理的這篇文章主要介紹了
Linux0.11内核引导启动过程概述
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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。?
總結
以上是生活随笔為你收集整理的Linux0.11内核引导启动过程概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#.net常用函数和方法集
- 下一篇: PHP获取当前时间差8小时的问题