嵌入式系統(tǒng)BootLoa1.ppt_第1頁(yè)
嵌入式系統(tǒng)BootLoa1.ppt_第2頁(yè)
嵌入式系統(tǒng)BootLoa1.ppt_第3頁(yè)
嵌入式系統(tǒng)BootLoa1.ppt_第4頁(yè)
嵌入式系統(tǒng)BootLoa1.ppt_第5頁(yè)
已閱讀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)介

1、a,1,嵌入式系統(tǒng)BootLoader,2,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)的研究都有重要的意義,3,PC 機(jī)中的引導(dǎo)加載程序,兩部分組成 BIOS(其本質(zhì)就是一段固件程序) 位于硬盤 MBR 中的 OS Boot Loader(如LILO 和 GRUB 等) 流程 BIOS 在完成硬件檢測(cè)和資源

2、分配后,將硬盤 MBR 中的 Boot Loader 讀到系統(tǒng)的 RAM 中,然后將控制權(quán)交給 OS Boot Loader Boot Loader 的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤上讀到 RAM 中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即開(kāi)始啟動(dòng)操作系統(tǒng),4,嵌入式系統(tǒng)中引導(dǎo)加載程序,系統(tǒng)的加載啟動(dòng)任務(wù)就完全由 Boot Loader 來(lái)完成 ARM7TDMI中,系統(tǒng)在上電或復(fù)位時(shí)從地址 0 x00000000 處開(kāi)始執(zhí)行,這個(gè)地址是Boot Loader 程序 典型的嵌入式系統(tǒng) boot loader Blob: boot loader object的縮寫 開(kāi)源,遵循GPL,很好的Linux

3、loader,主要針對(duì)ARM U-boot:universal boot loader的縮寫, 開(kāi)源,遵循GPL,支持ARM,MIPS,X86,Nios等處理器 可啟動(dòng)VxWorks, QNX, Linux等多種操作系統(tǒng),5,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,6,固態(tài)存儲(chǔ)設(shè)備的典型空間分配結(jié)構(gòu),7,B

4、oot Loader 的執(zhí)行,第一條指令 eg:地址 0 x00000000 嵌入式系統(tǒng)通常有固態(tài)存儲(chǔ)設(shè)備(比如:ROM、EEPROM 或 FLASH 等)被映射到這個(gè)預(yù)先安排的地址上 系統(tǒng)加電后,CPU 將首先執(zhí)行 Boot Loader 程序,8,用來(lái)控制 Boot Loader 的設(shè)備或機(jī)制,主機(jī)和目標(biāo)機(jī)之間一般通過(guò)串口建立連接 Boot Loader執(zhí)行時(shí)通常會(huì)通過(guò)串口進(jìn)行 I/O 如輸出打印信息到串口,從串口讀取用戶控制字符等,9,Boot Loader 的啟動(dòng)過(guò)程,從固態(tài)存儲(chǔ)設(shè)備上啟動(dòng)的 Boot Loader 大多都是 2 階段 啟動(dòng)過(guò)程可以分為 stage 1和 stage 2

5、 兩部分 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. 消亡,10,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

6、)下載內(nèi)核映像和根文件系統(tǒng)映像等。 從主機(jī)下載的文件通常首先被 Boot Loader 保存到目標(biāo)機(jī)的 RAM 中,然后再被 BootLoader 寫到目標(biāo)機(jī)上的FLASH 類固態(tài)存儲(chǔ)設(shè)備中。 第一次安裝內(nèi)核與根文件系統(tǒng)時(shí)或?qū)ζ涓聲r(shí)使用 通常都會(huì)向它的終端用戶提供一個(gè)簡(jiǎn)單的命令行接口,11,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ù),12,Bo

7、otLoader的主要任務(wù),stage1通常包括以下步驟 硬件設(shè)備初始化 為加載BootLoader的stage2準(zhǔn)備RAM空間 拷貝BootLoader的stage2到RAM空間中 設(shè)置好堆棧 跳轉(zhuǎn)到stage2的C入口點(diǎn) BootLoader的stage2通常包括以下步驟 初始化本階段要使用到的硬件設(shè)備 檢測(cè)系統(tǒng)內(nèi)存映射(memorymap) 將kernel和根文件系統(tǒng)映像從flash上讀到RAM空間中 為內(nèi)核設(shè)置啟動(dòng)參數(shù) 調(diào)用內(nèi)核,13,stage1,基本的硬件初始化,目的 為stage2的執(zhí)行以及隨后的kernel的執(zhí)行準(zhǔn)備好一些基本的硬件環(huán)境 1屏蔽所有的中斷 為中斷提供服務(wù)通常是O

8、S設(shè)備驅(qū)動(dòng)程序的責(zé)任,BootLoader的執(zhí)行全過(guò)程中可以不必響應(yīng)任何中斷 中斷屏蔽可以通過(guò)寫CPU的中斷屏蔽寄存器或狀態(tài)寄存器(如ARM的CPSR寄存器)來(lái)完成 2設(shè)置CPU的速度和時(shí)鐘頻率。 3RAM初始化 包括正確地設(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向串口打印BootLoader的Logo字符信息 5關(guān)閉CPU內(nèi)部指令數(shù)據(jù)cache,14,為加載 stage2 準(zhǔn)備 RAM 空間,通常把 stage2 加載到 RAM 空間中來(lái)執(zhí)

9、行 stage2 通常是 C 語(yǔ)言執(zhí)行代碼,考慮堆棧空間 空間大小最好是 memory page 大小(通常是 4KB)的倍數(shù) 一般1M RAM 空間已經(jīng)足夠,地址范圍可以任意安排 如 blob 就將 stage2 可執(zhí)行映像從系統(tǒng) RAM 起始地址 0 xc0200000 開(kāi)始的 1M 空間內(nèi)執(zhí)行 stage2_endstage2_startstage2_size 對(duì)所安排的地址范圍進(jìn)行測(cè)試 必須確保所安排的地址范圍可讀寫的 RAM 空間 測(cè)試方法可以采用類似于 blob 的方法 以 memory page 為被測(cè)試單位,測(cè)試每個(gè) page 開(kāi)始的兩個(gè)字是否是可讀寫的,15,拷貝 stage

10、2 到 RAM 中,拷貝時(shí)要確定兩點(diǎn) (1) stage2 的可執(zhí)行映象在固態(tài)存儲(chǔ)設(shè)備的存放起始地址和終止地址 (2) RAM 空間的起始地址,16,設(shè)置堆棧指針 sp (trampoline.S中完成,通常把 sp 的值設(shè)置為(stage2_end-4) 1MB 的 RAM 空間的最頂端(堆棧向下生長(zhǎng)) 在設(shè)置堆棧指針 sp 之前,也可以關(guān)閉 led 燈,以提示用戶我們準(zhǔn)備跳轉(zhuǎn)到 stage2,17,跳轉(zhuǎn)到 stage2 的 C 入口點(diǎn),可以跳轉(zhuǎn)到 Boot Loader 的 stage2 去執(zhí)行 如在 ARM系統(tǒng)中,這可以通過(guò)修改 PC 寄存器為合適的地址來(lái)實(shí)現(xiàn),18,Stage2,sta

11、ge2的代碼通常用C語(yǔ)言來(lái)實(shí)現(xiàn),代碼可讀性和可移植性 不能使用glibc庫(kù)中的任何支持函數(shù) Why? trampoline(彈簧床)編程方式 用匯編語(yǔ)言寫一段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ù)的外部包裹(external wrapper) Why not use main d

12、irectly 1)無(wú)法傳遞函數(shù)參數(shù);2)無(wú)法處理函數(shù)返回,19,blob 的trampoline 程序示例,text .globl _trampoline _trampoline: bl main /* if main ever returns we just call it again */ b _trampoline,20,Stage2,初始化本階段要使用到的硬件設(shè)備,1初始化至少一個(gè)串口,以便終端用戶進(jìn)行 I/O 輸出信息 2初始化計(jì)時(shí)器等 在初始化這些設(shè)備之前,也可以重新把 LED 燈點(diǎn)亮,以表明我們已經(jīng)進(jìn)入main() 函數(shù)執(zhí)行 設(shè)備初始化完成后,可以輸出一些打印信息,程序名字字符

13、串、版本號(hào)等,21,檢測(cè)系統(tǒng)的內(nèi)存映射(memory map,在 4GB 物理地址空間中哪些地址范圍被分配用來(lái)尋址系統(tǒng)的RAM 單元 在Samsung S3C44B0X 中,從0 x0c00,0000 (192M)到 0 x1000,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 地址空間中的哪些被真正映射到 RA

14、M 地址單元,哪些是處于 unused 狀態(tài)的,22,加載內(nèi)核映像和根文件系統(tǒng)映像,1 規(guī)劃內(nèi)存占用的布局 內(nèi)核映像所占用的內(nèi)存范圍 根文件系統(tǒng)所占用的內(nèi)存范圍 2從 Flash 上拷貝,內(nèi)存布局,flash布局,23,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 (0 x0c200400) 41 42 /* where do

15、various parts live in RAM */ 43 #define BLOB_RAM_BASE (0 x0c100000) 44 #define KERNEL_RAM_BASE (0 x0c300000) 45 #define PARAM_RAM_BASE (0 x0c110000) 46 #define RAMDISK_RAM_BASE (0 x0c400000) 47 48 /* and where do they live in flash */ 49 #define BLOB_FLASH_BASE (0 x00000000) 50 #define BLOB_FLASH_LE

16、N (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 #defin

17、e RAMDISK_FLASH_LEN (1280 * 1024) 57 58 /* the position of the kernel boot parameters */ 59 #define BOOT_PARAMS (0 x0c000100,24,設(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 Lo

18、ader 設(shè)置的常見(jiàn)啟動(dòng)參數(shù)有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等,25,調(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)閉,26,串口終端,調(diào)試手段:打印信息到串口終端 串口終端顯示亂碼或根本沒(méi)有顯示 (1) boot loader 對(duì)串口的初始化設(shè)置不正確。 (2) 運(yùn)行在 host 端的終端仿真程序?qū)Υ诘脑O(shè)置不正確,這包括:波特率、奇偶校驗(yàn)、數(shù)據(jù)位和停止位等方面的設(shè)置,27,BLOB移植需要修改的文件,詳見(jiàn)4.3節(jié),28,Blob編譯與下載實(shí)驗(yàn),詳見(jiàn)4.4

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論