嵌入式實(shí)際操作系統(tǒng)_第1頁(yè)
嵌入式實(shí)際操作系統(tǒng)_第2頁(yè)
嵌入式實(shí)際操作系統(tǒng)_第3頁(yè)
嵌入式實(shí)際操作系統(tǒng)_第4頁(yè)
嵌入式實(shí)際操作系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌入式實(shí)際操作系統(tǒng)基于i386體系結(jié)構(gòu)的Linux啟動(dòng)代碼分析Embedded Operating Systems3源代碼來源加壓縮后,建立SourceInsigt工程閱讀linux目錄下的README關(guān)于Linux的介紹該版本內(nèi)核支持的體系結(jié)構(gòu)如何配置、編譯、安裝Embedded Operating Systems4考慮Arch為i386在arch/i386下存在如下目錄I386的啟動(dòng)源代碼文件目錄I386的核心源代碼文件目錄I386的庫(kù)源代碼文件目錄I386的數(shù)學(xué)仿真源代碼文件目錄I386的內(nèi)存管理源代碼文件目錄I386的配置文件I386的體系相關(guān)部分的MakefileI386的Linux

2、內(nèi)核的鏈接描述文件Embedded Operating Systems5I386的啟動(dòng)代碼文件在arch/i386/boot目錄下在arch/i386/boot/compressed目錄下I386的體系結(jié)構(gòu)相關(guān)部分的啟動(dòng)代碼都采用匯編碼寫的啟動(dòng)扇區(qū)中的啟動(dòng)代碼,其目標(biāo)碼必然是512字節(jié)I386初始化內(nèi)核解壓縮Embedded Operating Systems6在arch/i386/kernel目錄下的.S文件在init目錄下32位啟動(dòng)代碼這是體系結(jié)構(gòu)無關(guān)部分,i386體系結(jié)構(gòu)相關(guān)部分的啟動(dòng),其目的就是進(jìn)入中的start_kernel處執(zhí)行Embedded Operating Systems7

3、閱讀對(duì)于i386平臺(tái),由于一些歷史的原因,因此Linux的啟動(dòng)比較復(fù)雜這個(gè)文檔包含如下內(nèi)容1、Linux/i386的啟動(dòng)協(xié)議(4個(gè))2、內(nèi)存布局圖3、實(shí)模式下的內(nèi)核頭結(jié)構(gòu)4、內(nèi)核的命令行(command line)Embedded Operating Systems85、啟動(dòng)配置示例6、裝載Linux的剩余部分7、特殊的命令行參數(shù)8、運(yùn)行內(nèi)核9、高級(jí)啟動(dòng)回調(diào)函數(shù)關(guān)于其中的一些內(nèi)容,我們將在合適的時(shí)候說明Embedded Operating Systems9閱讀頂層目錄下的Makefile找到缺省目標(biāo)鏈接Embedded Operating Systems10找到vmlinux找到vmlinux

4、所依賴的各個(gè)文件或者目標(biāo)可以看到vmlinux包含如下內(nèi)容+ CORE_FILES + DRIVERS+ NETWORKS + LIBSEmbedded Operating Systems11若make install在i386的Makefile中有install規(guī)則若make boot/bzImage/zImage等等,則要找到對(duì)應(yīng)的目標(biāo)然后進(jìn)行make boot在頂層的Makefile中可以找到boot規(guī)則bzImage/zImage可以在i386的Makefile中找到相應(yīng)規(guī)則其他的zXXX/bzXXX也都依賴于boot下的zImage/bzImage它們最終都找到i386/boot的M

5、akefileEmbedded Operating Systems12i386/boot的Makefile看i386/boot的Makefilez代表壓縮;b代表大內(nèi)核可見compressed下的vmlinux/bvmlinux為compressed/head.S + 壓縮后的頂層目錄下的vmlinuxzImage為bootsect + setup + compressed/vmlinuxbzImage為bbootsect + bsetup + compressed/bvmlinuxEmbedded Operating Systems13下面根據(jù)在bzImage/zImage中的順序,我們依次

6、看啟動(dòng)相關(guān)的源代碼和相關(guān)概念最后進(jìn)入Embedded Operating Systems14I386內(nèi)核的啟動(dòng)啟動(dòng)方式軟盤啟動(dòng)硬盤啟動(dòng)軟盤啟動(dòng)從開始運(yùn)行在進(jìn)入的源代碼講解之前,我們先看一下加載i386內(nèi)核的內(nèi)存布局圖Embedded Operating Systems15硬件角度:I386實(shí)模式下的內(nèi)存布局圖RAM1-MBROM-BIOSVIDEO-BIOSVRAM0 xA00000 xC00000 xF00000 x00000Embedded Operating Systems16I386內(nèi)核從實(shí)模式開始運(yùn)行首先看一下什么是實(shí)模式 實(shí)模式是為了兼容早期的CPU而設(shè)置的 i386系統(tǒng)總是始于實(shí)

7、模式 實(shí)模式下 地址總線:20位 內(nèi)存范圍:01MB 邏輯地址 = 段地址 + 段內(nèi)偏移段地址 = 段寄存器中的值*16 (或左移4位)段寄存器長(zhǎng)度:16bitEmbedded Operating Systems17加載I386內(nèi)核的內(nèi)存布局圖zImage/Image的內(nèi)核加載器所使用的經(jīng)典的內(nèi)存布局(1M=0 x100000)為Embedded Operating Systems18軟盤啟動(dòng), 0 x7c000 x90000 0 x7c00, BIOS 0 x90000, lilo 堆棧,0 x3ff4(0 x4000-12), 向下增長(zhǎng) 磁盤參數(shù)表,12Bytes,0 x3ff40 x40

8、00 顯示“Loading” Setup0 x90200 系統(tǒng) 小內(nèi)核,0 x10000(64KB處),低裝載 大內(nèi)核,0 x100000(1MB處),高裝載 setupEmbedded Operating Systems19硬盤啟動(dòng),兩階段引導(dǎo)裝載LILO(LInuxLOader)第一個(gè)扇區(qū)裝載LINUX0 x900000 x90200系統(tǒng)0 x100000 x100000跳轉(zhuǎn)到setupEmbedded Operating Systems20啟動(dòng)第一步,小結(jié)總之,在跳轉(zhuǎn)到setup的時(shí)候,內(nèi)存里面的代碼布局為0 x90000:bootsect0 x90200:setup低裝載:0 x100

9、00:帶解壓的vmlinux高裝載:0 x100000:帶解壓的bvmlinux 實(shí)模式下的內(nèi)核頭結(jié)構(gòu)包括bootsect的最后和setup開始的位置從bootsect的偏移0 x1F1開始,具體描述參見Embedded Operating Systems21Setup:0 x90200 初始化硬件設(shè)備并為內(nèi)核程序的執(zhí)行建立環(huán)境 內(nèi)存檢測(cè) 鍵盤 視頻 磁盤控制器 IBM微通道總線MCA PS/2設(shè)備(總線鼠標(biāo)) APM BIOS 若低裝載,將系統(tǒng)移動(dòng)到0 x1000處(4KB處)否則,不必 臨時(shí)IDT和臨時(shí)GDT FPU PIC, 16個(gè)硬件中斷中斷向量3247 實(shí)模式保護(hù)模式 Startup

10、_32Embedded Operating Systems22 在和中都定義了startup_32 但是中,被壓縮在vmlinux中還沒有解壓縮 只有的startup_32是可用的 zImage中,在0 x1000處 bzImage中,在0 x100000處Embedded Operating Systems23Startup_32初始化段寄存器和一個(gè)臨時(shí)堆棧初始化BSS段解壓縮高裝載或低裝載解壓縮0 x100000(1MB)跳轉(zhuǎn)到0 x100000處Embedded Operating Systems24解壓縮后,vmlinux在0 x100000處根據(jù),vmlinux的地址被鏈接為0 xc

11、0000000+0 x100000處如何正確運(yùn)行呢?此時(shí)仍然是實(shí)模式,還沒有進(jìn)入保護(hù)模式、分頁(yè)、映射好沒有長(zhǎng)跳轉(zhuǎn),只使用采用相對(duì)地址的近距離跳轉(zhuǎn)Embedded Operating Systems25 Startup_32 初始化段寄存器 建立進(jìn)程0的內(nèi)核堆棧 Setup_idt 拷貝系統(tǒng)參數(shù) 識(shí)別處理器 GDT、IDT Start_kernelEmbedded Operating Systems26與內(nèi)存相關(guān)的一些概念在實(shí)模式下,地址總線20位,訪存范圍為1MB,物理地址使用段址:偏移的方式表示段址保存在段寄存器中,段寄存器有:cs/ds/es/fs/gs16位寄存器,偏移也是16位,因此最

12、大段長(zhǎng)為216=0 x10000=64KB物理地址= 段寄存器16+偏移Embedded Operating Systems27保護(hù)模式下,地址總線32位,訪存范圍為4GB原來的段寄存器現(xiàn)在被稱作段選擇子,與GDT表配合使用GDT表由gdtr指示其位置和長(zhǎng)度使用特殊的指令進(jìn)行操作:sgdt/lgdtEmbedded Operating Systems28圖示descriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptordescriptorInterrupt Descriptor TableGlobal Descriptor TableGDTRIDTREmbedded Operating Systems29查看和中的gdt/ldt一般裝載gdt和idt之后,要重新裝載段寄存器cs、ds、es、fs、gscs通常

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論