




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
linux系統啟動過程分析(下)linux系統啟動過程分析下共42頁,您現在瀏覽的是第1頁!第二節Linux0.01啟動分析引導過程的描述引導流程和內核鏡像文件計算機加電過程BIOS程序操作系統引導部分代碼的分析Boot.s的分析head.s的分析Head.s的作用AT&T匯編語言初步linux系統啟動過程分析下共42頁,您現在瀏覽的是第2頁!引導過程的描述引導流程和內核鏡像文件計算機加電過程BIOS程序linux系統啟動過程分析下共42頁,您現在瀏覽的是第3頁!Linux0.
01內核鏡像文件
由build.c程序生成寫入到磁盤(makedisk&&dd)linux系統啟動過程分析下共42頁,您現在瀏覽的是第4頁!計算機加電過程當機算機的電源鍵被按下時,同這個鍵相聯的電信號線就會送出一個電信號給主板,主板將此電信號傳給供電系統,供電系統開始工作,為整個系統供電,并送出一個電信號給BIOS,通知BIOS供電系統已經準備完畢。隨后BIOS啟動一個程序,進行主機自檢,主機自檢的主要工作是確保系統的每一個部分都得到了電源支持,內存儲器、主板上的其它芯片、鍵盤、鼠標、磁盤控制器及一些I/O端口正常可用,此后,自檢程序將控制權還給BIOS。接下來BIOS讀取BIOS設置,得到引導驅動器的順序,然后依次檢查,直到找到可以用來引導的驅動器(或說可以用來引導的磁盤,包括軟盤、硬盤、光盤等),然后調用這個驅動器上磁盤的引導扇區進行引導。linux系統啟動過程分析下共42頁,您現在瀏覽的是第5頁!BIOS將所檢查磁盤的個扇區(512B)載入內存,放在0x0000:0x7c00處,如果個扇區的最后兩個字節是“55AA”,那么這就是一個引導扇區,這個磁盤也就是一塊可引導盤。通常這個大小為512B的程序就稱為引導程序(boot)。如果最后兩個字節不是“55AA”,那么BIOS就檢查下一個磁盤驅動器。BIOS是怎么知道或說分辨哪一個磁盤可以用來引導的呢?linux系統啟動過程分析下共42頁,您現在瀏覽的是第6頁!利用BIOS13號中斷讀取磁盤扇區AH寄存器:存放功能號,為2的時候,表示使用讀磁盤功能DL寄存器:存驅動器號,表示欲讀哪一個驅動器CH寄存器:存磁頭號,表示欲讀哪一個磁頭CL寄存器:存扇區號,表示欲讀的啟始扇區AL寄存器:存計數值,表示欲讀入的扇區數量在設置了這幾個寄存器后,我們就可以使用int13這條指令調用BIOS13號中斷讀取指定的磁盤扇區,它將磁盤扇區讀入ES:BX處,因此,在調用它之前,我們實際上還需要設置ES與BX寄存器,以指出數據在內存中存放的位置linux系統啟動過程分析下共42頁,您現在瀏覽的是第7頁!Linux0.01系統引導過程中內核代碼在內存中的位置變化
linux系統啟動過程分析下共42頁,您現在瀏覽的是第8頁!操作系統引導部分代碼0.01版源代碼樹中/boot文件夾中的兩個匯編語言程序文件Boot.sHead.slinux系統啟動過程分析下共42頁,您現在瀏覽的是第9頁!linux系統啟動過程分析下共42頁,您現在瀏覽的是第10頁!Boot.s源代碼分析閱讀時應注意的主要重點實模式的尋址方式內核代碼在內存中的位置使用bios中斷訪問軟盤如何為進入保護模式進行初始化設置開始進入源代碼世界Boot.slinux系統啟動過程分析下共42頁,您現在瀏覽的是第11頁!Head.s的作用這部分代碼工作在保護模式下,主要的作用是為開啟分頁機制進行設置,開啟分頁機制后將控制權交給main.c程序進行進一步的初始化工作采用了AT&T語法的匯編語言語法編寫并使用GNU的as(gas)編譯器進行編譯,由于這種語法和intel8086匯編不同,有必要先學習一下AT&T的匯編語法linux系統啟動過程分析下共42頁,您現在瀏覽的是第12頁!linux系統啟動過程分析下共42頁,您現在瀏覽的是第13頁!AT&T匯編語言初步Linux中的匯編代碼Linux0.01使用兩種匯編器linux系統啟動過程分析下共42頁,您現在瀏覽的是第14頁!Linux中的匯編代碼linux系統啟動過程分析下共42頁,您現在瀏覽的是第15頁!as86語法類似于MASM,NASM等在linux中使用as86生成引導區程序bootas86–0–a–oboot.oboot.sld86–0–s–obootboot.oddif=bootof=/dev/fd0linux系統啟動過程分析下共42頁,您現在瀏覽的是第16頁!as基本命令格式as[選項][-oobjfile][srcfile.s]比如單獨編譯boot/head.sas–ohead.ohead.slinux系統啟動過程分析下共42頁,您現在瀏覽的是第17頁!as匯編命令.align存儲對齊匯編命令,比如.align3表示把位置計數器值增加后其最右邊0的個數為3,就是把位置計數器增加到8的倍數上.byte.word分別定義一個字節,字.fillrepeat,size,value該匯編命令會產生repeat個大小為size字節的重復拷貝,value是填充的值,默認為0.guad定義多個用逗號分開的8字節大數linux系統啟動過程分析下共42頁,您現在瀏覽的是第18頁!AT&T的匯編語言語法Intel語法AT&T語法moveax,8movl$8,%eaxmovebx,0ffffhmovl$0xffff,%ebxint80hint$0x80在Intel的語法中,立即數沒有前綴。但是在AT&T中立即數前冠以“$”linux系統啟動過程分析下共42頁,您現在瀏覽的是第19頁!內存單元操作數內存操作數也有所不同。在Intel的語法中,基寄存器用“[]”括起來,而在AT&T中,用“()”括起來。Intelmoveax,[ebx+5]AT&Tmovl5(%ebx),%eaxlinux系統啟動過程分析下共42頁,您現在瀏覽的是第20頁!例子linux系統啟動過程分析下共42頁,您現在瀏覽的是第21頁!例子的解釋Linux是一個運行在保護模式下的32位操作系統,采用flatmemory模式,目前最常用到的是ELF格式的二進制代碼。一個ELF格式的可執行程序通常劃分為如下幾個部分:.text、.data和.bss,其中.text是只讀的代碼區,.data是可讀可寫的數據區,而.bss則是可讀可寫且沒有初始化的數據區。代碼區和數據區在ELF中統稱為section,根據實際需要你可以使用其它標準的section,也可以添加自定義section,但一個ELF可執行程序至少應該有一個.text部分linux系統啟動過程分析下共42頁,您現在瀏覽的是第22頁!引導的步驟
一般來說,操作系統的引導過程分兩個步驟:首先,計算機硬件經過開機自檢(PowerOnSelf-Test,POST)之后,從軟盤或硬盤的固定位置裝載一小段代碼,這段代碼一般稱為“引導裝載器”。然后,由引導裝載器負責裝入操作系統內核鏡像文件并將控制權交給操作系統進行進一步的初始化和運行操作系統引導裝載器非常小,一般只有幾百個字節,而操作系統龐大而復雜,上述分成兩階段的引導過程,可將計算機中的固化軟件保持得足夠小,同時也便于實現對不同操作系統的引導。linux系統啟動過程分析下共42頁,您現在瀏覽的是第23頁!linux系統啟動過程分析下共42頁,您現在瀏覽的是第24頁!基本輸入輸出系統
BIOS
存放在ROM中的BIOS程序執行開機是系統個部分自檢,經過一系列操作之后,BIOS會將有關代碼和數據存放在內存低端1MB末端的64KB處,然后跳轉到這個地方讓CPU進入實地址模式工作將內核文件加載到內存后,LINUX不再使用BIOS功能,因此BIOS中斷向量表在引導過程中被覆蓋。linux系統啟動過程分析下共42頁,您現在瀏覽的是第25頁!引導程序所具有的特點:它的大小是512B,不能多一字節也不能少一字節,因為BIOS只讀512B到內存中去。它的結尾兩字節必須是“55AA”,這是引導扇區的標志。它總是放在磁盤的個扇區上(0磁頭,0磁道,1扇區),因為BIOS只讀個扇區。linux系統啟動過程分析下共42頁,您現在瀏覽的是第26頁!0.01版內核,以軟盤啟動為例:1開機2BIOS加電自檢(PowerOnSelfTest,POST),內存地址為0ffff:00003將軟盤個扇區(0頭0道1扇區,也就是BootSector)讀入內存地址0000:7c00處。4檢查(WORD)0000:7dfe是否等于0xaa55,若不等于則轉去嘗試其他啟動介質,如果沒有其他啟動介質則顯示"NoROMBASIC"然后死機。5跳轉到0000:7c00處執行MBR中的程序。6MBR將自己移動到9000:00007將內核模塊從軟盤讀入到1000:00008將內核模塊移動到0000:00009進入保護模式10讀取COMS信息,設置有關表格,然后調用操作系統初始化程序MAIN.C1-5完全由BIOS完成,6-10由BOOT\BOOT.SHEAD.S完成其中BOOT.S的目標代碼就是MBR(主引導記錄MasterBootRecord)中的程序操作系統引導流程linux系統啟動過程分析下共42頁,您現在瀏覽的是第27頁!操作系統引導部分代碼的分析Boot.s的分析head.s的分析Head.s的作用AT&T匯編語言初步linux系統啟動過程分析下共42頁,您現在瀏覽的是第28頁!Boot.s的作用引導裝載器,存放在mbr中的一段程序,負責將操作系統加載到內存合適的地方,這一部分的代碼運行在實模式中,boot.s運行的最后將設置cr0進入保護模式,然后將接著執行head.s中的程序Boot.s采用intelx86匯編語法編寫,使用8086匯編編譯器as86和連接器ld86產生可執行代碼。除了boot.s外,linux均使用gnu的as進行編譯,這里使用8086的編譯器的主要原因是當時gnu不支持生成實模式下的16位的代碼程序,內核2.4.x起,這部分代碼才完全使用as來編寫linux系統啟動過程分析下共42頁,您現在瀏覽的是第29頁!linux系統啟動過程分析下共42頁,您現在瀏覽的是第30頁!head.s源代碼分析Head.s的作用AT&T匯編語言初步linux系統啟動過程分析下共42頁,您現在瀏覽的是第31頁!linux系統啟動過程分析下共42頁,您現在瀏覽的是第32頁!Head.s的分析閱讀時應注意的主要重點IDT,GDT的設置如何開啟分頁機制分頁機制的尋址方式HEAD完成后內存的布局開始進入源代碼head.slinux系統啟動過程分析下共42頁,您現在瀏覽的是第33頁!Linux中的匯編代碼linux系統啟動過程分析下共42頁,您現在瀏覽的是第34頁!Linux0.01使用兩種匯編器as86(與之配套的ld86鏈接器)gas(as)(與之配套的GNUld鏈接器)Linus僅用as86創建16位的引導扇區程序boot.s早期的as不支持生成16位的代碼,2.4版本之后已經全部改為使用aslinux系統啟動過程分析下共42頁,您現在瀏覽的是第35頁!GNUas內核中除了boot.s外所有匯編語言程序(包括c語言產生的匯編程序)均使用gas編譯。gas(現在稱為as),匯編器最初是專門用于匯編由gcc產生的中間匯編程序的。因此支持很多c語言特性。(編譯c語言時gcc編譯器會首先輸出一個作為中間結果的as匯編語言文件,然后調用as匯編器進行編譯)linux系統啟動過程分析下共42頁,您現在瀏覽的是第36頁!as局部符號1:incl%eaxmovl%eax,0x000000cmpl%eax,0x100000je1b
linux系統啟動過程分析下共42頁,您現在瀏覽的是第37頁!as語法-AT&T匯編格式1.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年舞蹈藝術基本理論與實踐考核試卷及答案
- 2025年文化禮儀職業素養考試試題及答案
- 2025年新聞傳播學基礎理論考試試題及答案
- 2025年時尚產業設計師考試試題及答案
- 2025年可再生能源與環境保護基礎知識考試試題及答案
- 婦科門診護理年終工作總結范文
- 2024年度浙江省二級造價工程師之建設工程造價管理基礎知識真題練習試卷B卷附答案
- 后備干部培訓心得體會
- 中職生法制安全教育體系構建
- 中孕期超聲系統篩查
- 《合理使用抗生素》課件
- 數字美的智慧工業白皮書-2023.09
- 橋梁施工進度圖
- 某啤酒廠安全現狀評價設計報告書模板
- 廣西桂林市2022-2023學年高二下學期期末質量檢測數學試題(含答案解析)
- 內墻抹灰安全技術交底
- 中學美術校本教材《素描》
- 國開2023年春《理工英語1》機考網考期末復習資料參考答案
- 《幼兒生活活動保育》課程標準
- 年出欄5萬頭生豬養殖場建設項目及年出欄4800頭生豬養殖基地建設項目建議書
- OIF-CEI-04.0OIF-CEI-04.0高速電口標準
評論
0/150
提交評論