![嵌入式系統(tǒng)BootLoa1.ppt_第1頁(yè)](http://file.renrendoc.com/FileRoot1/2019-2/2/a33060ee-adba-46a1-98f1-a024ed007b1b/a33060ee-adba-46a1-98f1-a024ed007b1b1.gif)
![嵌入式系統(tǒng)BootLoa1.ppt_第2頁(yè)](http://file.renrendoc.com/FileRoot1/2019-2/2/a33060ee-adba-46a1-98f1-a024ed007b1b/a33060ee-adba-46a1-98f1-a024ed007b1b2.gif)
![嵌入式系統(tǒng)BootLoa1.ppt_第3頁(yè)](http://file.renrendoc.com/FileRoot1/2019-2/2/a33060ee-adba-46a1-98f1-a024ed007b1b/a33060ee-adba-46a1-98f1-a024ed007b1b3.gif)
![嵌入式系統(tǒng)BootLoa1.ppt_第4頁(yè)](http://file.renrendoc.com/FileRoot1/2019-2/2/a33060ee-adba-46a1-98f1-a024ed007b1b/a33060ee-adba-46a1-98f1-a024ed007b1b4.gif)
![嵌入式系統(tǒng)BootLoa1.ppt_第5頁(yè)](http://file.renrendoc.com/FileRoot1/2019-2/2/a33060ee-adba-46a1-98f1-a024ed007b1b/a33060ee-adba-46a1-98f1-a024ed007b1b5.gif)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式系統(tǒng)BootLoader,BootLoader,Boot loader是與系統(tǒng)硬件環(huán)境高度相關(guān)的初始化軟件,它擔(dān)負(fù)著初始化硬件和引導(dǎo)操作系統(tǒng)的雙重責(zé)任。 每一個(gè)特定系統(tǒng)的Boot loader都會(huì)有所不同。 Boot loader移植是在特定硬件平臺(tái)上操作系統(tǒng)移植至關(guān)重要的一步,是引導(dǎo)操作系統(tǒng)和根文件系統(tǒng)的基礎(chǔ)。 對(duì)了解嵌入式系統(tǒng)底層運(yùn)行機(jī)制、優(yōu)化和快速啟動(dòng)的研究都有重要的意義。,PC 機(jī)中的引導(dǎo)加載程序,兩部分組成 BIOS(其本質(zhì)就是一段固件程序) 位于硬盤(pán) MBR 中的 OS Boot Loader(如LILO 和 GRUB 等) 流程 BIOS 在完成硬件檢測(cè)和資源分配后,將硬盤(pán) MBR 中的 Boot Loader 讀到系統(tǒng)的 RAM 中,然后將控制權(quán)交給 OS Boot Loader Boot Loader 的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤(pán)上讀到 RAM 中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即開(kāi)始啟動(dòng)操作系統(tǒng)。,嵌入式系統(tǒng)中引導(dǎo)加載程序,系統(tǒng)的加載啟動(dòng)任務(wù)就完全由 Boot Loader 來(lái)完成 ARM7TDMI中,系統(tǒng)在上電或復(fù)位時(shí)從地址 0x00000000 處開(kāi)始執(zhí)行,這個(gè)地址是Boot Loader 程序 典型的嵌入式系統(tǒng) boot loader Blob: boot loader object的縮寫(xiě) 開(kāi)源,遵循GPL,很好的Linux loader,主要針對(duì)ARM U-boot:universal boot loader的縮寫(xiě), 開(kāi)源,遵循GPL,支持ARM,MIPS,X86,Nios等處理器 可啟動(dòng)VxWorks, QNX, Linux等多種操作系統(tǒng),Boot Loader 的概念,在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序 功能 初始化硬件設(shè)備 建立內(nèi)存空間的映射圖 調(diào)整系統(tǒng)的軟硬件環(huán)境,以便操作系統(tǒng)內(nèi)核啟動(dòng) 不通用 依賴于硬件CPU 依賴于主板board 不同的 CPU有不同的Boot Loader 有些 BootLoader 支持多CPU,如U-Boot支持ARM和MIPS,固態(tài)存儲(chǔ)設(shè)備的典型空間分配結(jié)構(gòu),Boot Loader 的執(zhí)行,第一條指令 eg:地址 0x00000000 嵌入式系統(tǒng)通常有固態(tài)存儲(chǔ)設(shè)備(比如:ROM、EEPROM 或 FLASH 等)被映射到這個(gè)預(yù)先安排的地址上 系統(tǒng)加電后,CPU 將首先執(zhí)行 Boot Loader 程序,用來(lái)控制 Boot Loader 的設(shè)備或機(jī)制,主機(jī)和目標(biāo)機(jī)之間一般通過(guò)串口建立連接 Boot Loader執(zhí)行時(shí)通常會(huì)通過(guò)串口進(jìn)行 I/O 如輸出打印信息到串口,從串口讀取用戶控制字符等,Boot Loader 的啟動(dòng)過(guò)程,從固態(tài)存儲(chǔ)設(shè)備上啟動(dòng)的 Boot Loader 大多都是 2 階段 啟動(dòng)過(guò)程可以分為 stage 1和 stage 2 兩部分 BOOTLOADER一般分為2部分 匯編部分執(zhí)行簡(jiǎn)單的硬件初始化 C語(yǔ)言部分負(fù)責(zé)復(fù)制數(shù)據(jù),設(shè)置啟動(dòng)參數(shù),串口通信等功能 BOOTLOADER的生命周期 1. 初始化硬件,如設(shè)置UART(至少設(shè)置一個(gè)),檢測(cè)存儲(chǔ)器等 2. 設(shè)置啟動(dòng)參數(shù),告訴內(nèi)核硬件的信息,如顯示控制臺(tái)LCD或串口、VGA等. 3. 跳轉(zhuǎn)到操作系統(tǒng)的首地址. 4. 消亡,Boot Loader 的操作模式,啟動(dòng)加載模式 自主(Autonomous)模式 從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到 RAM 中運(yùn)行 Boot Loader 的正常工作模式 下載模式 通過(guò)串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)(Host)下載內(nèi)核映像和根文件系統(tǒng)映像等。 從主機(jī)下載的文件通常首先被 Boot Loader 保存到目標(biāo)機(jī)的 RAM 中,然后再被 BootLoader 寫(xiě)到目標(biāo)機(jī)上的FLASH 類固態(tài)存儲(chǔ)設(shè)備中。 第一次安裝內(nèi)核與根文件系統(tǒng)時(shí)或?qū)ζ涓聲r(shí)使用 通常都會(huì)向它的終端用戶提供一個(gè)簡(jiǎn)單的命令行接口,BootLoader 與主機(jī)之間進(jìn)行文件傳輸所用的通信設(shè)備及協(xié)議,通常Boot Loader 通過(guò)串口與主機(jī)之間進(jìn)行文件傳輸 傳輸協(xié)議 通常是 xmodemymodemzmodem 協(xié)議中的一種 可通過(guò)以太網(wǎng)連接并借助 TFTP 協(xié)議來(lái)下載文件 串口傳輸?shù)乃俣仁怯邢薜?主機(jī)提供 TFTP 服務(wù),Boot Loader 的主要任務(wù),stage1 通常包括以下步驟 硬件設(shè)備初始化 為加載 Boot Loader 的 stage2 準(zhǔn)備 RAM 空間 拷貝 Boot Loader 的 stage2 到 RAM 空間中 設(shè)置好堆棧 跳轉(zhuǎn)到 stage2 的 C 入口點(diǎn) Boot Loader 的 stage2 通常包括以下步驟 初始化本階段要使用到的硬件設(shè)備 檢測(cè)系統(tǒng)內(nèi)存映射(memory map) 將 kernel 和根文件系統(tǒng)映像從 flash 上讀到 RAM 空間中 為內(nèi)核設(shè)置啟動(dòng)參數(shù) 調(diào)用內(nèi)核,stage1,基本的硬件初始化,目的 為 stage2 的執(zhí)行以及隨后的 kernel 的執(zhí)行準(zhǔn)備好一些基本的硬件環(huán)境 1 屏蔽所有的中斷 為中斷提供服務(wù)通常是 OS 設(shè)備驅(qū)動(dòng)程序的責(zé)任,Boot Loader 的執(zhí)行全過(guò)程中可以不必響應(yīng)任何中斷 中斷屏蔽可以通過(guò)寫(xiě) CPU 的中斷屏蔽寄存器或狀態(tài)寄存器(如 ARM 的 CPSR 寄存器)來(lái)完成 2 設(shè)置 CPU 的速度和時(shí)鐘頻率。 3 RAM 初始化 包括正確地設(shè)置系統(tǒng)的內(nèi)存控制器的功能寄存器以及各內(nèi)存庫(kù)控制寄存器等。 4 初始化 LED 通過(guò) GPIO 來(lái)驅(qū)動(dòng) LED,其目的是表明系統(tǒng)的狀態(tài)是 OK 還是 Error 如板子上沒(méi)有LED,那么也可以通過(guò)初始化 UART 向串口打印 Boot Loader 的 Logo 字符信息 5 關(guān)閉 CPU 內(nèi)部指令數(shù)據(jù) cache,為加載 stage2 準(zhǔn)備 RAM 空間,通常把 stage2 加載到 RAM 空間中來(lái)執(zhí)行 stage2 通常是 C 語(yǔ)言執(zhí)行代碼,考慮堆??臻g 空間大小最好是 memory page 大小(通常是 4KB)的倍數(shù) 一般1M RAM 空間已經(jīng)足夠,地址范圍可以任意安排 如 blob 就將 stage2 可執(zhí)行映像從系統(tǒng) RAM 起始地址 0xc0200000 開(kāi)始的 1M 空間內(nèi)執(zhí)行 stage2_endstage2_startstage2_size 對(duì)所安排的地址范圍進(jìn)行測(cè)試 必須確保所安排的地址范圍可讀寫(xiě)的 RAM 空間 測(cè)試方法可以采用類似于 blob 的方法 以 memory page 為被測(cè)試單位,測(cè)試每個(gè) page 開(kāi)始的兩個(gè)字是否是可讀寫(xiě)的,拷貝 stage2 到 RAM 中,拷貝時(shí)要確定兩點(diǎn) (1) stage2 的可執(zhí)行映象在固態(tài)存儲(chǔ)設(shè)備的存放起始地址和終止地址 (2) RAM 空間的起始地址。,設(shè)置堆棧指針 sp (trampoline.S中完成),通常把 sp 的值設(shè)置為(stage2_end-4) 1MB 的 RAM 空間的最頂端(堆棧向下生長(zhǎng)) 在設(shè)置堆棧指針 sp 之前,也可以關(guān)閉 led 燈,以提示用戶我們準(zhǔn)備跳轉(zhuǎn)到 stage2,跳轉(zhuǎn)到 stage2 的 C 入口點(diǎn),可以跳轉(zhuǎn)到 Boot Loader 的 stage2 去執(zhí)行 如在 ARM系統(tǒng)中,這可以通過(guò)修改 PC 寄存器為合適的地址來(lái)實(shí)現(xiàn),Stage2,stage2 的代碼通常用 C 語(yǔ)言來(lái)實(shí)現(xiàn),代碼可讀性和可移植性 不能使用 glibc 庫(kù)中的任何支持函數(shù) Why? trampoline(彈簧床)編程方式 用匯編語(yǔ)言寫(xiě)一段trampoline 小程序,并將這段 trampoline 小程序來(lái)作為 stage2 可執(zhí)行映象的執(zhí)行入口點(diǎn) 在 trampoline 匯編小程序中用 CPU 跳轉(zhuǎn)指令跳入 main() 函數(shù)中去執(zhí)行 當(dāng)main() 函數(shù)返回時(shí),CPU 執(zhí)行路徑顯然再次回到我們的 trampoline 程序。 用 trampoline 小程序來(lái)作為 main() 函數(shù)的外部包裹(exter nal wrapper) Why not use main directly 1)無(wú)法傳遞函數(shù)參數(shù);2)無(wú)法處理函數(shù)返回,blob 的trampoline 程序示例,.text .globl _trampoline _trampoline: bl main /* if main ever returns we just call it again */ b _trampoline,Stage2,初始化本階段要使用到的硬件設(shè)備,1初始化至少一個(gè)串口,以便終端用戶進(jìn)行 I/O 輸出信息 2初始化計(jì)時(shí)器等 在初始化這些設(shè)備之前,也可以重新把 LED 燈點(diǎn)亮,以表明我們已經(jīng)進(jìn)入main() 函數(shù)執(zhí)行 設(shè)備初始化完成后,可以輸出一些打印信息,程序名字字符串、版本號(hào)等,檢測(cè)系統(tǒng)的內(nèi)存映射(memory map),在 4GB 物理地址空間中哪些地址范圍被分配用來(lái)尋址系統(tǒng)的RAM 單元 在Samsung S3C44B0X 中,從0x0c00,0000 (192M)到 0x1000,0000(256M) 之間的 64M 地址空間被用作系統(tǒng)的 RAM 地址空間 嵌入式系統(tǒng)往往只把 CPU 預(yù)留的全部 RAM 地址空間中的一部分映射到 RAM 單元上,而讓剩下的那部分預(yù)留 RAM 地址空間處于未使用狀態(tài) Boot Loader 的 stage2 必須檢測(cè)整個(gè)系統(tǒng)的內(nèi)存映射情況 必須知道 CPU 預(yù)留的全部 RAM 地址空間中的哪些被真正映射到 RAM 地址單元,哪些是處于 “unused“ 狀態(tài)的,加載內(nèi)核映像和根文件系統(tǒng)映像,1 規(guī)劃內(nèi)存占用的布局 內(nèi)核映像所占用的內(nèi)存范圍 根文件系統(tǒng)所占用的內(nèi)存范圍 2從 Flash 上拷貝,內(nèi)存布局,flash布局,include/blob/arch/mba44b0.h,37 #define SDRAMSIZE (8) 38 39 /* the base address were BLOB is loaded by the first stage loader */ 40 #define BLOB_ABS_BASE_ADDR (0x0c200400) 41 42 /* where do various parts live in RAM */ 43 #define BLOB_RAM_BASE (0x0c100000) 44 #define KERNEL_RAM_BASE (0x0c300000) 45 #define PARAM_RAM_BASE (0x0c110000) 46 #define RAMDISK_RAM_BASE (0x0c400000) 47 48 /* and where do they live in flash */ 49 #define BLOB_FLASH_BASE (0x00000000) 50 #define BLOB_FLASH_LEN (60 * 1024) 51 #define PARAM_FLASH_BASE (BLOB_FLASH_BASE + BLOB_FLASH_LEN) 52 #define PARAM_FLASH_LEN (4 * 1024) 53 #define KERNEL_FLASH_BASE (PARAM_FLASH_BASE + PARAM_FLASH_LEN) 54 #define KERNEL_FLASH_LEN (704 * 1024) 55 #define RAMDISK_FLASH_BASE (KERNEL_FLASH_BASE + KERNEL_FLASH_LEN) 56 #define RAMDISK_FLASH_LEN (1280 * 1024) 57 58 /* the position of the kernel boot parameters */ 59 #define BOOT_PARAMS (0x0c000100),設(shè)置內(nèi)核的啟動(dòng)參數(shù),Linux 2.4.x 以后的內(nèi)核都期望以標(biāo)記列表(tagged list)的形式來(lái)傳遞啟動(dòng)參數(shù) 啟動(dòng)參數(shù)標(biāo)記列表以標(biāo)記 ATAG_CORE 開(kāi)始,以標(biāo)記 ATAG_NONE 結(jié)束 每個(gè)標(biāo)記由標(biāo)識(shí)被傳遞參數(shù)的 tag_header 結(jié)構(gòu)以及隨后的參數(shù)值數(shù)據(jù)結(jié)構(gòu)來(lái)組成 在嵌入式 Linux 系統(tǒng)中,通常需要由 Boot Loader 設(shè)置的常見(jiàn)啟動(dòng)參數(shù)有:ATAG_CORE、 ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等,調(diào)用內(nèi)核,直接跳轉(zhuǎn)到內(nèi)核的第一條指令處 在跳轉(zhuǎn)時(shí),下列條件要滿足 1 CPU 寄存器的設(shè)置 R00;R1機(jī)器類型 ID;R2啟動(dòng)參數(shù)標(biāo)記列表在 RAM 中起始基地址 2 CPU 模式 必須禁止中斷(IRQs和FIQs); CPU 必須 SVC 模式; 3 Cache 和 MMU 的設(shè)置 MMU 必須關(guān)閉; 指令 Cache 可以打開(kāi)也可以關(guān)閉; 數(shù)據(jù) Cache 必須關(guān)閉,串口終端,調(diào)試手段:打印信息到串口終端 串口終端顯示亂碼或根本沒(méi)有顯示 (1) boot loader 對(duì)串口的初始化設(shè)置不正確。 (2) 運(yùn)行在 host 端的終端仿真程序?qū)Υ诘脑O(shè)置不正確,這包括:波特率、奇偶校驗(yàn)、數(shù)據(jù)位和停止位等方面的設(shè)置,BLOB移植需要修改的文件,詳見(jiàn)4.3節(jié),Blob編譯與下載實(shí)驗(yàn),詳見(jiàn)4.4節(jié),U-boot,德國(guó)DENX軟件工程中心的Wolfgang De
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年日照貨運(yùn)資格證試題及答案
- 2025年阿勒泰駕駛資格證模擬考試
- 2025年甘肅貨運(yùn)從業(yè)資格證年考試題及答案
- 2025年銅仁從業(yè)資格證模擬考試題貨運(yùn)考題
- 監(jiān)理工程師考試合同(2篇)
- 電力實(shí)時(shí)監(jiān)測(cè)合同(2篇)
- 2024-2025學(xué)年高中生物第3章第1節(jié)細(xì)胞膜-系統(tǒng)的邊界練習(xí)含解析新人教版必修1
- 華師大版數(shù)學(xué)七年級(jí)下冊(cè)《多邊形的外角和》聽(tīng)評(píng)課記錄3
- 學(xué)生暑假實(shí)習(xí)總結(jié)
- 幼兒園中班月工作總結(jié)月工作總結(jié)
- 項(xiàng)目獎(jiǎng)金分配獎(jiǎng)勵(lì)制度和方案完整版
- 上海中學(xué)國(guó)際部幼升小面試真題
- 贏在團(tuán)隊(duì)執(zhí)行力課件
- 慢性胰腺炎課件
- 北京理工大學(xué)應(yīng)用光學(xué)課件第四章
- 陰道鏡幻燈課件
- PCB行業(yè)安全生產(chǎn)常見(jiàn)隱患及防范措施課件
- DB32∕T 186-2015 建筑消防設(shè)施檢測(cè)技術(shù)規(guī)程
- 2022年福建泉州中考英語(yǔ)真題【含答案】
- 汽車(chē)座椅骨架的焊接夾具畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(共23頁(yè))
- 露天礦山職業(yè)危害預(yù)先危險(xiǎn)分析表
評(píng)論
0/150
提交評(píng)論