




已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
嵌入式系統(tǒng)BootLoader,BootLoader,Boot loader是與系統(tǒng)硬件環(huán)境高度相關的初始化軟件,它擔負著初始化硬件和引導操作系統(tǒng)的雙重責任。 每一個特定系統(tǒng)的Boot loader都會有所不同。 Boot loader移植是在特定硬件平臺上操作系統(tǒng)移植至關重要的一步,是引導操作系統(tǒng)和根文件系統(tǒng)的基礎。 對了解嵌入式系統(tǒng)底層運行機制、優(yōu)化和快速啟動的研究都有重要的意義。,PC 機中的引導加載程序,兩部分組成 BIOS(其本質就是一段固件程序) 位于硬盤 MBR 中的 OS Boot Loader(如LILO 和 GRUB 等) 流程 BIOS 在完成硬件檢測和資源分配后,將硬盤 MBR 中的 Boot Loader 讀到系統(tǒng)的 RAM 中,然后將控制權交給 OS Boot Loader Boot Loader 的主要運行任務就是將內核映象從硬盤上讀到 RAM 中,然后跳轉到內核的入口點去運行,即開始啟動操作系統(tǒng)。,嵌入式系統(tǒng)中引導加載程序,系統(tǒng)的加載啟動任務就完全由 Boot Loader 來完成 ARM7TDMI中,系統(tǒng)在上電或復位時從地址 0x00000000 處開始執(zhí)行,這個地址是Boot Loader 程序 典型的嵌入式系統(tǒng) boot loader Blob: boot loader object的縮寫 開源,遵循GPL,很好的Linux loader,主要針對ARM U-boot:universal boot loader的縮寫, 開源,遵循GPL,支持ARM,MIPS,X86,Nios等處理器 可啟動VxWorks, QNX, Linux等多種操作系統(tǒng),Boot Loader 的概念,在操作系統(tǒng)內核運行之前運行的一段小程序 功能 初始化硬件設備 建立內存空間的映射圖 調整系統(tǒng)的軟硬件環(huán)境,以便操作系統(tǒng)內核啟動 不通用 依賴于硬件CPU 依賴于主板board 不同的 CPU有不同的Boot Loader 有些 BootLoader 支持多CPU,如U-Boot支持ARM和MIPS,固態(tài)存儲設備的典型空間分配結構,Boot Loader 的執(zhí)行,第一條指令 eg:地址 0x00000000 嵌入式系統(tǒng)通常有固態(tài)存儲設備(比如:ROM、EEPROM 或 FLASH 等)被映射到這個預先安排的地址上 系統(tǒng)加電后,CPU 將首先執(zhí)行 Boot Loader 程序,用來控制 Boot Loader 的設備或機制,主機和目標機之間一般通過串口建立連接 Boot Loader執(zhí)行時通常會通過串口進行 I/O 如輸出打印信息到串口,從串口讀取用戶控制字符等,Boot Loader 的啟動過程,從固態(tài)存儲設備上啟動的 Boot Loader 大多都是 2 階段 啟動過程可以分為 stage 1和 stage 2 兩部分 BOOTLOADER一般分為2部分 匯編部分執(zhí)行簡單的硬件初始化 C語言部分負責復制數(shù)據,設置啟動參數(shù),串口通信等功能 BOOTLOADER的生命周期 1. 初始化硬件,如設置UART(至少設置一個),檢測存儲器等 2. 設置啟動參數(shù),告訴內核硬件的信息,如顯示控制臺LCD或串口、VGA等. 3. 跳轉到操作系統(tǒng)的首地址. 4. 消亡,Boot Loader 的操作模式,啟動加載模式 自主(Autonomous)模式 從目標機上的某個固態(tài)存儲設備上將操作系統(tǒng)加載到 RAM 中運行 Boot Loader 的正常工作模式 下載模式 通過串口連接或網絡連接等通信手段從主機(Host)下載內核映像和根文件系統(tǒng)映像等。 從主機下載的文件通常首先被 Boot Loader 保存到目標機的 RAM 中,然后再被 BootLoader 寫到目標機上的FLASH 類固態(tài)存儲設備中。 第一次安裝內核與根文件系統(tǒng)時或對其更新時使用 通常都會向它的終端用戶提供一個簡單的命令行接口,BootLoader 與主機之間進行文件傳輸所用的通信設備及協(xié)議,通常Boot Loader 通過串口與主機之間進行文件傳輸 傳輸協(xié)議 通常是 xmodemymodemzmodem 協(xié)議中的一種 可通過以太網連接并借助 TFTP 協(xié)議來下載文件 串口傳輸?shù)乃俣仁怯邢薜?主機提供 TFTP 服務,Boot Loader 的主要任務,stage1 通常包括以下步驟 硬件設備初始化 為加載 Boot Loader 的 stage2 準備 RAM 空間 拷貝 Boot Loader 的 stage2 到 RAM 空間中 設置好堆棧 跳轉到 stage2 的 C 入口點 Boot Loader 的 stage2 通常包括以下步驟 初始化本階段要使用到的硬件設備 檢測系統(tǒng)內存映射(memory map) 將 kernel 和根文件系統(tǒng)映像從 flash 上讀到 RAM 空間中 為內核設置啟動參數(shù) 調用內核,stage1,基本的硬件初始化,目的 為 stage2 的執(zhí)行以及隨后的 kernel 的執(zhí)行準備好一些基本的硬件環(huán)境 1 屏蔽所有的中斷 為中斷提供服務通常是 OS 設備驅動程序的責任,Boot Loader 的執(zhí)行全過程中可以不必響應任何中斷 中斷屏蔽可以通過寫 CPU 的中斷屏蔽寄存器或狀態(tài)寄存器(如 ARM 的 CPSR 寄存器)來完成 2 設置 CPU 的速度和時鐘頻率。 3 RAM 初始化 包括正確地設置系統(tǒng)的內存控制器的功能寄存器以及各內存庫控制寄存器等。 4 初始化 LED 通過 GPIO 來驅動 LED,其目的是表明系統(tǒng)的狀態(tài)是 OK 還是 Error 如板子上沒有LED,那么也可以通過初始化 UART 向串口打印 Boot Loader 的 Logo 字符信息 5 關閉 CPU 內部指令數(shù)據 cache,為加載 stage2 準備 RAM 空間,通常把 stage2 加載到 RAM 空間中來執(zhí)行 stage2 通常是 C 語言執(zhí)行代碼,考慮堆??臻g 空間大小最好是 memory page 大小(通常是 4KB)的倍數(shù) 一般1M RAM 空間已經足夠,地址范圍可以任意安排 如 blob 就將 stage2 可執(zhí)行映像從系統(tǒng) RAM 起始地址 0xc0200000 開始的 1M 空間內執(zhí)行 stage2_endstage2_startstage2_size 對所安排的地址范圍進行測試 必須確保所安排的地址范圍可讀寫的 RAM 空間 測試方法可以采用類似于 blob 的方法 以 memory page 為被測試單位,測試每個 page 開始的兩個字是否是可讀寫的,拷貝 stage2 到 RAM 中,拷貝時要確定兩點 (1) stage2 的可執(zhí)行映象在固態(tài)存儲設備的存放起始地址和終止地址 (2) RAM 空間的起始地址。,設置堆棧指針 sp (trampoline.S中完成),通常把 sp 的值設置為(stage2_end-4) 1MB 的 RAM 空間的最頂端(堆棧向下生長) 在設置堆棧指針 sp 之前,也可以關閉 led 燈,以提示用戶我們準備跳轉到 stage2,跳轉到 stage2 的 C 入口點,可以跳轉到 Boot Loader 的 stage2 去執(zhí)行 如在 ARM系統(tǒng)中,這可以通過修改 PC 寄存器為合適的地址來實現(xiàn),Stage2,stage2 的代碼通常用 C 語言來實現(xiàn),代碼可讀性和可移植性 不能使用 glibc 庫中的任何支持函數(shù) Why? trampoline(彈簧床)編程方式 用匯編語言寫一段trampoline 小程序,并將這段 trampoline 小程序來作為 stage2 可執(zhí)行映象的執(zhí)行入口點 在 trampoline 匯編小程序中用 CPU 跳轉指令跳入 main() 函數(shù)中去執(zhí)行 當main() 函數(shù)返回時,CPU 執(zhí)行路徑顯然再次回到我們的 trampoline 程序。 用 trampoline 小程序來作為 main() 函數(shù)的外部包裹(exter nal wrapper) Why not use main directly 1)無法傳遞函數(shù)參數(shù);2)無法處理函數(shù)返回,blob 的trampoline 程序示例,.text .globl _trampoline _trampoline: bl main /* if main ever returns we just call it again */ b _trampoline,Stage2,初始化本階段要使用到的硬件設備,1初始化至少一個串口,以便終端用戶進行 I/O 輸出信息 2初始化計時器等 在初始化這些設備之前,也可以重新把 LED 燈點亮,以表明我們已經進入main() 函數(shù)執(zhí)行 設備初始化完成后,可以輸出一些打印信息,程序名字字符串、版本號等,檢測系統(tǒng)的內存映射(memory map),在 4GB 物理地址空間中哪些地址范圍被分配用來尋址系統(tǒng)的RAM 單元 在Samsung S3C44B0X 中,從0x0c00,0000 (192M)到 0x1000,0000(256M) 之間的 64M 地址空間被用作系統(tǒng)的 RAM 地址空間 嵌入式系統(tǒng)往往只把 CPU 預留的全部 RAM 地址空間中的一部分映射到 RAM 單元上,而讓剩下的那部分預留 RAM 地址空間處于未使用狀態(tài) Boot Loader 的 stage2 必須檢測整個系統(tǒng)的內存映射情況 必須知道 CPU 預留的全部 RAM 地址空間中的哪些被真正映射到 RAM 地址單元,哪些是處于 “unused“ 狀態(tài)的,加載內核映像和根文件系統(tǒng)映像,1 規(guī)劃內存占用的布局 內核映像所占用的內存范圍 根文件系統(tǒng)所占用的內存范圍 2從 Flash 上拷貝,內存布局,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ù),Linux 2.4.x 以后的內核都期望以標記列表(tagged list)的形式來傳遞啟動參數(shù) 啟動參數(shù)標記列表以標記 ATAG_CORE 開始,以標記 ATAG_NONE 結束 每個標記由標識被傳遞參數(shù)的 tag_header 結構以及隨后的參數(shù)值數(shù)據結構來組成 在嵌入式 Linux 系統(tǒng)中,通常需要由 Boot Loader 設置的常見啟動參數(shù)有:ATAG_CORE、 ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等,調用內核,直接跳轉到內核的第一條指令處 在跳轉時,下列條件要滿足 1 CPU 寄存器的設置 R00;R1機器類型 ID;R2啟動參數(shù)標記列表在 RAM 中起始基地址 2 CPU 模式 必須禁止中斷(IRQs和FIQs); CPU 必須 SVC 模式; 3 Cache 和 MMU 的設置 MMU 必須關閉; 指令 Cache 可以打開也可以關閉; 數(shù)據 Cache 必須關閉,串口終端,調試手段:打印信息到串口終端 串口終端顯示亂碼或根本沒有顯示 (1) boot loader 對串口的初始化設置不正確。 (2) 運行在 host 端的終端仿真程序對串口的設置不正確,這包括:波特率、奇偶校驗、數(shù)據位和停止位等方面的設置,BLOB移植需要修改的文件,詳見4.3節(jié),Blob編譯與下載實驗,詳見4.4節(jié),U-boot,德國DENX軟件工程中心的Wolfgang De
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學年第一學期幼兒教學工作總結模版
- 創(chuàng)先爭優(yōu)個人學習心得體會模版
- 新生兒單純皰疹病毒感染的臨床護理
- 社保委托代表協(xié)議
- 重力教學設計
- 上學期八年級語文教學工作總結模版
- 某精密模具有限公司品質管理系統(tǒng)
- 貓咪輸液護理常規(guī)
- 部編本大小多少教學設計
- 7S管理培訓體系精要
- 小學美術1色彩的情感課件
- 奧沙利鉑過敏反應
- 項目部臨時動火作業(yè)審批表
- 機載直流用電設備電源特性要求及試驗方法
- 項目質量管理評價表
- 飲料生產公司應急預案匯編參考范本
- 養(yǎng)老院老人入(出)院流程圖
- 最新-臨時救助申請審核審批表模板
- 藍色大氣商務商業(yè)計劃書PPT模板
- 蘇教版二年級(下冊)科學全冊單元測試卷含期中期末(有答案)
- 三年級數(shù)學下冊口算脫式豎式練習題
評論
0/150
提交評論