




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、徐遠超2nboot loader是與系統(tǒng)硬件環(huán)境高度相關(guān)的初始化軟件,它擔負著初始化硬件和引導操作系統(tǒng)的雙重責任。n每一個特定系統(tǒng)的boot loader都會有所不同。nboot loader移植是在特定硬件平臺上系統(tǒng)軟件移植至關(guān)重要的一步,是引導操作系統(tǒng)和根文件系統(tǒng)的基礎(chǔ)。n對了解嵌入式系統(tǒng)底層運行機制、優(yōu)化和快速啟動的研究都有重要的意義。3n兩部分組成lbios(其本質(zhì)就是一段固件程序)l位于硬盤 mbr 中的 os boot loader(如lilo 和 grub 等)n流程lbios 在完成硬件檢測和資源分配后,將硬盤 mbr 中的 boot loader 讀到系統(tǒng)的 ram 中,然后
2、將控制權(quán)交給 os boot loaderlboot loader 的主要運行任務就是將內(nèi)核映象從硬盤上讀到 ram 中,然后跳轉(zhuǎn)到內(nèi)核的入口點去運行,即開始啟動操作系統(tǒng)。4n系統(tǒng)的加載啟動任務就完全由 boot loader 來完成larm7tdmi中,系統(tǒng)在上電或復位時從地址 0 x00000000 處開始執(zhí)行,這個地址是boot loader 程序n典型的嵌入式系統(tǒng) boot loaderlblob: boot loader object的縮寫-開源,遵循gpl,很好的linux loader,主要針對armlu-boot:universal boot loader的縮寫,-開源,遵循g
3、pl,支持arm,mips,x86,nios等處理器-可啟動vxworks, qnx, linux等多種操作系統(tǒng)5n在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序n功能l初始化硬件設(shè)備l建立內(nèi)存空間的映射圖l調(diào)整系統(tǒng)的軟硬件環(huán)境,以便操作系統(tǒng)內(nèi)核啟動n不通用l依賴于硬件cpul依賴于主板board n不同的cpu有不同的boot loader l有些 bootloader 支持多cpu,如u-boot支持arm和mips67n第一條指令l地址 0 x00000000n嵌入式系統(tǒng)通常有固態(tài)存儲設(shè)備(比如:rom、eeprom 或 flash 等)被映射到這個預先安排的地址上n系統(tǒng)加電后,cpu 將首先執(zhí)
4、行 boot loader 程序8n主機和目標板之間一般通過串口建立連接nboot loader執(zhí)行時通常會通過串口進行 i/ol如輸出打印信息到串口,從串口讀取用戶控制字符等9n通常boot loader 通過串口與主機之間進行文件傳輸n傳輸協(xié)議l通常是 xmodemymodemzmodem 協(xié)議中的一種n可通過以太網(wǎng)連接并借助 tftp 協(xié)議來下載文件l串口傳輸?shù)乃俣仁怯邢薜膌主機提供 tftp 服務10n啟動加載模式-自主(autonomous)模式-從目標機上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到ram中運行-boot loader的正常工作模式n下載模式-通過串口連接或網(wǎng)絡(luò)連接等通信手
5、段從主機(host)下載內(nèi)核映像和根文件系統(tǒng)映像等。-從主機下載的文件通常首先被 boot loader 保存到目標機的 ram 中,然后再被 bootloader 寫到目標機上的flash 類固態(tài)存儲設(shè)備中。-第一次安裝內(nèi)核與根文件系統(tǒng)時或?qū)ζ涓聲r使用-通常都會向它的終端用戶提供一個簡單的命令行接口11n從固態(tài)存儲設(shè)備上啟動boot loader大多都是 2 階段lstage 1和 stage 2nbootloader一般分為2部分lstage 1:匯編部分,執(zhí)行簡單的硬件初始化lstage 2:c語言部分,負責復制數(shù)據(jù),設(shè)置啟動參數(shù),串口通信等功能nbootloader的生命周期l1.
6、初始化硬件,如設(shè)置uart(至少設(shè)置一個),檢測存儲器等l2. 設(shè)置啟動參數(shù),告訴內(nèi)核硬件的信息,如顯示控制臺lcd或串口、vga等.l3. 跳轉(zhuǎn)到操作系統(tǒng)的首地址.l4. 消亡 12nstage1 通常包括以下步驟l基本硬件設(shè)備初始化l為加載 boot loader 的 stage2 準備 ram 空間l拷貝 boot loader 的 stage2 到 ram 空間中l(wèi)設(shè)置好堆棧l跳轉(zhuǎn)到 stage2 的 c 入口點nboot loader 的 stage2 通常包括以下步驟l初始化本階段要使用到的硬件設(shè)備l檢測系統(tǒng)內(nèi)存映射(memory map)l將 kernel 和根文件系統(tǒng)映像從 f
7、lash 上讀到 ram 空間中l(wèi)為內(nèi)核設(shè)置啟動參數(shù)l調(diào)用內(nèi)核13n目的l為 stage2 的執(zhí)行以及隨后的 kernel 的執(zhí)行準備好一些基本的硬件環(huán)境 n1 屏蔽所有的中斷l(xiāng)為中斷提供服務通常是 os 設(shè)備驅(qū)動程序的責任,boot loader 的執(zhí)行全過程中可以不必響應任何中斷l(xiāng)中斷屏蔽可以通過寫 cpu 的中斷屏蔽寄存器或狀態(tài)寄存器(如 arm 的 cpsr 寄存器)來完成n2 設(shè)置 cpu 的速度和時鐘頻率。n3 ram 初始化l包括正確地設(shè)置系統(tǒng)的內(nèi)存控制器的功能寄存器以及各內(nèi)存庫控制寄存器等。n4 初始化 ledl通過 gpio 來驅(qū)動 led,其目的是表明系統(tǒng)的狀態(tài)是 ok 還
8、是 errorl如板子上沒有l(wèi)ed,那么也可以通過初始化 uart 向串口打印 boot loader 的 logo 字符信息n5 關(guān)閉 cpu 內(nèi)部指令數(shù)據(jù) cache14n通常把 stage2 加載到 ram 空間中來執(zhí)行 nstage2 通常是 c 語言執(zhí)行代碼,考慮堆??臻gn空間大小最好是 memory page 大小(通常是 4kb)的倍數(shù)n一般1m ram 空間已經(jīng)足夠,地址范圍可以任意安排l如 blob 就將 stage2 可執(zhí)行映像從系統(tǒng) ram 起始地址 0 xc0200000 開始的 1m 空間內(nèi)執(zhí)行l(wèi)stage2_endstage2_startstage2_sizen對所
9、安排的地址范圍進行測試l必須確保所安排的地址范圍可讀寫的 ram 空間l測試方法可以采用類似于 blob 的方法-以 memory page 為被測試單位,測試每個 page 開始的兩個字是否是可讀寫的15n拷貝時要確定兩點l(1) stage2 的可執(zhí)行映象在固態(tài)存儲設(shè)備的存放起始地址和終止地址l(2) ram 空間的起始地址。16n通常把 sp 的值設(shè)置為(stage2_end-4)l1mb 的 ram 空間的最頂端(堆棧向下生長) n在設(shè)置堆棧指針 sp 之前,也可以關(guān)閉 led 燈,以提示用戶我們準備跳轉(zhuǎn)到 stage217n可以跳轉(zhuǎn)到 boot loader 的 stage2 去執(zhí)行
10、n如在 arm系統(tǒng)中,這可以通過修改 pc 寄存器為合適的地址來實現(xiàn)18nstage2 的代碼通常用 c 語言來實現(xiàn),代碼可讀性和可移植性 n不能使用 glibc 庫中的任何支持函數(shù) lwhy?ntrampoline(彈簧床)編程方式l用匯編語言寫一段trampoline 小程序,并將這段 trampoline 小程序來作為 stage2 可執(zhí)行映象的執(zhí)行入口點l在 trampoline 匯編小程序中用 cpu 跳轉(zhuǎn)指令跳入 main() 函數(shù)中去執(zhí)行l(wèi)當main() 函數(shù)返回時,cpu 執(zhí)行路徑顯然再次回到我們的 trampoline 程序。l用 trampoline 小程序來作為 main
11、() 函數(shù)的外部包裹(external wrapper)nwhy not use main directlyl1)無法傳遞函數(shù)參數(shù);2)無法處理函數(shù)返回19.text.globl _trampoline_trampoline:bl main/* if main ever returns we just call it again */b _trampoline20n1初始化至少一個串口,以便終端用戶進行 i/o 輸出信息n2初始化計時器等n在初始化這些設(shè)備之前,也可以重新把 led 燈點亮,以表明我們已經(jīng)進入main() 函數(shù)執(zhí)行n設(shè)備初始化完成后,可以輸出一些打印信息,程序名字字符串、版本號
12、等 21n在 4gb 物理地址空間中哪些地址范圍被分配用來尋址系統(tǒng)的ram 單元l在samsung s3c44b0x 中,從0 x0c00,0000 (192m)到 0 x1000,0000(256m)之間的 64m 地址空間被用作系統(tǒng)的 ram 地址空間n嵌入式系統(tǒng)往往只把 cpu 預留的全部 ram 地址空間中的一部分映射到 ram 單元上,而讓剩下的那部分預留 ram 地址空間處于未使用狀態(tài)nboot loader 的 stage2 必須檢測整個系統(tǒng)的內(nèi)存映射情況l必須知道 cpu 預留的全部 ram 地址空間中的哪些被真正映射到 ram 地址單元,哪些是處于 unused 狀態(tài)的22n
13、1 規(guī)劃內(nèi)存占用的布局 l內(nèi)核映像所占用的內(nèi)存范圍l根文件系統(tǒng)所占用的內(nèi)存范圍n2 從flash上拷貝 內(nèi)存布局flash布局23n 37 #define sdramsize (8)n 38n 39 /* the base address were blob is loaded by the first stage loader */n 40 #define blob_abs_base_addr (0 x0c200400)n 41n 42 /* where do various parts live in ram */n 43 #define blob_ram_base (0 x0c10000
14、0)n 44 #define kernel_ram_base (0 x0c300000)n 45 #define param_ram_base (0 x0c110000)n 46 #define ramdisk_ram_base (0 x0c400000)n 47n 48 /* and where do they live in flash */n 49 #define blob_flash_base (0 x00000000)n 50 #define blob_flash_len (60 * 1024)n 51 #define param_flash_base (blob_flash_bas
15、e + blob_flash_len)n 52 #define param_flash_len (4 * 1024)n 53 #define kernel_flash_base (param_flash_base + param_flash_len)n 54 #define kernel_flash_len (704 * 1024)n 55 #define ramdisk_flash_base (kernel_flash_base + kernel_flash_len)n 56 #define ramdisk_flash_len (1280 * 1024)n 57n 58 /* the pos
16、ition of the kernel boot parameters */n 59 #define boot_params (0 x0c000100)24nlinux 2.4.x 以后的內(nèi)核都期望以標記列表(tagged list)的形式來傳遞啟動參數(shù)n啟動參數(shù)標記列表以標記 atag_core 開始,以標記 atag_none 結(jié)束n每個標記由標識被傳遞參數(shù)的 tag_header 結(jié)構(gòu)以及隨后的參數(shù)值數(shù)據(jù)結(jié)構(gòu)來組成n在嵌入式 linux 系統(tǒng)中,通常需要由 boot loader 設(shè)置的常見啟動參數(shù)有:atag_core、atag_mem、atag_cmdline、atag_ramdis
17、k、atag_initrd等25n直接跳轉(zhuǎn)到內(nèi)核的第一條指令處 n在跳轉(zhuǎn)時,下列條件要滿足l1 cpu 寄存器的設(shè)置-r00;r1機器類型 id;r2啟動參數(shù)標記列表在 ram 中起始基地址l2 cpu 模式-必須禁止中斷(irqs和fiqs);-cpu 必須 svc 模式;l3 cache 和 mmu 的設(shè)置-mmu 必須關(guān)閉;-指令 cache 可以打開也可以關(guān)閉;-數(shù)據(jù) cache 必須關(guān)閉26n調(diào)試手段:打印信息到串口終端n串口終端顯示亂碼或根本沒有顯示 l(1) boot loader 對串口的初始化設(shè)置不正確。l(2) 運行在 host 端的終端仿真程序?qū)Υ诘脑O(shè)置不正確,這包括:
18、波特率、奇偶校驗、數(shù)據(jù)位和停止位等方面的設(shè)置 27n詳見4.34.3節(jié)節(jié)28n詳見4.44.4節(jié)節(jié)29n德國denx軟件工程中心的wolfgang denkn全稱universal boot loaderl開放源碼項目lhttp:/ l從fadsrom、8xxrom 、ppcboot逐步發(fā)展演化而來l其源碼目錄、編譯形式與linux內(nèi)核很相似n支持l嵌入式linux/netbsd/vxworks/qnx/rtems/artos/lynxoslpowerpc、mips、x86、arm 、nios、xscale等處理器 30系統(tǒng)引導支持nfs掛載、ramdisk 系統(tǒng)引導 (壓縮或非壓縮)形式的根文件系統(tǒng)支持nfs掛載
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋市政工程生產(chǎn)安全重大事故隱患判定標準(2024版)檢查指引(西安住房和城鄉(xiāng)建設(shè)局)
- 2024福建福州城市泊車管理有限公司招聘2人筆試參考題庫附帶答案詳解
- 2024浙江寧波市余姚市牟山湖開發(fā)有限公司招聘筆試及人員筆試參考題庫附帶答案詳解
- 2024國投(張掖)金種科技有限公司招聘65人筆試參考題庫附帶答案詳解
- 2024中廣核環(huán)保產(chǎn)業(yè)有限公司招聘筆試參考題庫附帶答案詳解
- 2025至2031年中國染發(fā)膏行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國豆奶杯行業(yè)投資前景及策略咨詢研究報告
- 2025至2030年中國風冷卻器數(shù)據(jù)監(jiān)測研究報告
- 二零二五年度電商企業(yè)客服服務質(zhì)量監(jiān)控外包合同
- 2025年電子控制四輪驅(qū)動裝置項目發(fā)展計劃
- 電子技術(shù)基礎(chǔ)數(shù)字部分第五版康華光
- 國際學校六年級數(shù)學測(英文)
- 國家自然科學基金經(jīng)費預算表模板
- 華能電力定員標準
- 儲能技術(shù)-氫儲能
- 黑河對俄邊境旅游的發(fā)展現(xiàn)狀及對策研究
- 為人民服務 公開課比賽一等獎
- YY/T 1712-2021采用機器人技術(shù)的輔助手術(shù)設(shè)備和輔助手術(shù)系統(tǒng)
- 高中語文部編版(2023)選擇性必修中冊第三單元9屈原列傳 屈原列傳(解析版)
- JJF 1101-2019環(huán)境試驗設(shè)備溫度、濕度參數(shù)校準規(guī)范
- GB/T 31366-2015光伏發(fā)電站監(jiān)控系統(tǒng)技術(shù)要求
評論
0/150
提交評論