




已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1,第4章,Linux啟動代碼編程實驗,2,BootLoader的基本概念,BootLoader是系統(tǒng)加電后運(yùn)行的第一段軟件代碼。 嵌入式系統(tǒng)中,整個系統(tǒng)的加載啟動任務(wù)完全由 BootLoader來完成。比如在一個基于ARM920T core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時都從地址0x00000000開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的BootLoader程序。 簡單地說,BootLoader就是在操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序準(zhǔn)備好正確的環(huán)境。 通常,BootLoader 是依賴于硬件而實現(xiàn)的,特別是在嵌入式領(lǐng)域,為嵌入式系統(tǒng)建立一個通用的 BootLoader 是很困難的。,3,Bootloader總結(jié),功能 硬件初始化 引導(dǎo)操作系統(tǒng) 下載程序(串口、網(wǎng)口、USB) 燒寫flash 特征 程序復(fù)位運(yùn)行入口點(diǎn) 通常用匯編語言+C語言編寫 代碼量較小,4,BootLoader 的移植和修改,BootLoader除了依賴于 CPU 的體系結(jié)構(gòu)外,BootLoader 實際上也依賴于具體的嵌入式板級設(shè)備的配置,比如板卡的硬件地址分配,RAM芯片的類型,其他外設(shè)的類型等。 對于兩塊不同的嵌入式板而言,即使它們是基于同一種 CPU而構(gòu)建的,如果他們的硬件資源和配置不一致的話,要想讓運(yùn)行在一塊板子上的BootLoader程序也能運(yùn)行在另一塊板子上,也還是需要作一些必要的修改。,5,BootLoader 的安裝,系統(tǒng)加電或復(fù)位后,所有的CPU通常都從CPU制造商預(yù)先安排的地址上取指令。比如,S3C2410在復(fù)位時都從地址 0x00000000 取它的第一條指令。 嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲設(shè)備(比如:ROM、EEPROM或FLASH等)被安排這個起始地址上,因此在系統(tǒng)加電后,CPU將首先執(zhí)行BootLoader程序。 也就是說對于基于S3C2410的這套系統(tǒng),我們的BootLoader是從0地址開始存放的,而這塊起始地址需要采用可引導(dǎo)的固態(tài)存儲設(shè)備如FLASH。,6,用來控制 BootLoader 的設(shè)備或機(jī)制,串口通訊是最簡單也是最廉價的一種雙機(jī)通訊設(shè)備,所以往往在BootLoader中主機(jī)和目標(biāo)機(jī)之間都通過串口建立連接,BootLoader 程序在執(zhí)行時通常會通過串口來進(jìn)行 I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。當(dāng)然如果認(rèn)為串口通訊速度不夠,也可以采用網(wǎng)絡(luò)或者USB通訊,那么相應(yīng)的在BootLoader中就需要編寫各自的驅(qū)動。,7,Boot Loader 的操作模式,啟動加載模式:這種模式也稱為“自主“(Autonomous)模式。也即BootLoader從目標(biāo)機(jī)上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)行,整個過程并沒有用戶的介入。這種模式是BootLoader的正常工作模式。 下載模式:在這種模式下,目標(biāo)機(jī)上的BootLoader將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)下載文件,比如:下載應(yīng)用程序、數(shù)據(jù)文件、內(nèi)核映像等。從主機(jī)下載的文件通常首先被BootLoader保存到目標(biāo)機(jī)的RAM中,然后再被 BootLoader寫到目標(biāo)機(jī)上的固態(tài)存儲設(shè)備中。BootLoader 的這種模式通常在系統(tǒng)更新時使用。工作于這種模式下的 BootLoader 通常都會向它的終端用戶提供一個簡單的命令行接口。,8,BootLoader與主機(jī)間文件傳輸?shù)耐ㄐ旁O(shè)備及協(xié)議,最常見的情況就是,目標(biāo)機(jī)上的 BootLoader 通過串口與主機(jī)之間進(jìn)行文件傳輸,傳輸可以簡單的采用直接數(shù)據(jù)收發(fā),當(dāng)然在串口上也可以采用xmodemymodemzmodem 協(xié)議以及在以太網(wǎng)上采用TFTP協(xié)議。,9,BootLoader的主要任務(wù)與典型結(jié)構(gòu)框架,從操作系統(tǒng)的角度看,BootLoader的總目標(biāo)就是正確地調(diào)用內(nèi)核來執(zhí)行。 大多數(shù)BootLoader都分為stage1和stage2兩大部分。 依賴于CPU體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在stage1中,而且通常都用匯編語言來實現(xiàn),以達(dá)到短小精悍的目的,也就是前面說的啟動代碼。 而stage2 則通常用C語言來實現(xiàn),這樣可以實現(xiàn)復(fù)雜的功能,而且代碼會具有更好的可讀性和可移植性。,10,BootLoader的主要任務(wù)與典型結(jié)構(gòu)框架,BootLoader的stage1通常包括以下步驟 為加載 BootLoader 的 stage2 準(zhǔn)備 RAM 空間 拷貝 BootLoader 的 stage2 到 RAM 空間中 設(shè)置好堆棧 跳轉(zhuǎn)到 stage2 的 C 入口點(diǎn) BootLoader的stage2通常包括以下步驟 初始化本階段要使用到的硬件設(shè)備 調(diào)用應(yīng)用程序或啟動內(nèi)核,11,Stage 1初始化流程圖,stage 1的功能: RAM初始化,設(shè)置各個部件的時鐘和片選,將BootLoader拷貝到RAM中,設(shè)置堆棧,調(diào)用Stage 2。 注意:在本階段,特別是在堆棧設(shè)置之前,進(jìn)行函數(shù)調(diào)用(也有些匯編子程序不需要使用堆棧)或者使用堆棧保存數(shù)據(jù)將產(chǎn)生不可預(yù)知的結(jié)果;,12,Stage 2,stage 2的功能: 初始化串口,顯示菜單,通過控制臺獲取用戶輸入,并執(zhí)行相應(yīng)的命令操作。 stage 2的代碼通常用C語言編寫,以便于實現(xiàn)更復(fù)雜的功能,以及取得更好的代碼可讀性和可移植性。但是與普通C語言應(yīng)用程序不同的是,在編譯和鏈接Boot Loader這樣的程序時,不能使用任何glibc庫中支持的函數(shù)。因此,從哪里跳轉(zhuǎn)進(jìn)main()函數(shù)就成為需要解決的問題。直接把main()函數(shù)的起始地址作為整個第二階段執(zhí)行映像的入口點(diǎn),或許是最直接的想法。 但是這樣做有兩個缺點(diǎn): 無法通過main()函數(shù)傳遞函數(shù)參數(shù); 無法處理main()函數(shù)返回的情況。 一種較為巧妙的方法是利用trampoline(彈簧床)的概念,即用匯編語言編寫一段trampoline小程序,并將這段小程序作為第二階段可執(zhí)行映像的執(zhí)行入口點(diǎn)??梢栽趖rampoline匯編小程序中用CPU跳轉(zhuǎn)指令跳人到main()函數(shù)中去執(zhí)行;而當(dāng)main()函數(shù)返回時,CPU執(zhí)行路徑顯然會再次回到trampoline程序。簡而言之,這種方法的思想就是用這段trampoline小程序作為main()函數(shù)的外部包裹(External Wrapper)。,13,VIVI,VIVI是韓國Mizi公司開發(fā)的一種Boot Loader,適合于ARM9處理器,支持S3C2410X。本實驗系統(tǒng)采用的Boot Loader就是VIVI 同所有的Boot Loader一樣,VIVI也有兩種工作模式,即啟動加載模式和下載模式。在正常運(yùn)行時,都工作在啟動加載模式。 VIVI提供了MTD(Memory Technolog Device) 通過修改代碼就可以從不同的存儲器啟動。,14,VIVI編譯及使用實驗,【實驗?zāi)康摹?了解以VIVI為Boot Load的Linux系統(tǒng)。 通過實驗掌握VIVI工作原理及移植過程。 通過實驗掌握VIVI的配置、編譯、構(gòu)造和使用。 【實驗設(shè)備】 硬件:EDUKIT-III實驗平臺,S3C2410核心子板,Embest JTAG仿真器套件, PC機(jī)。 軟件:Windows XP操作系統(tǒng),Cygwin Unix模擬平臺。 【實驗內(nèi)容】 配置及編譯VIVI。 燒寫VIVI映像到Flash中作為Linux系統(tǒng)的Boot Loader,并運(yùn)行。 【實驗原理】,15,1Boot Loader的作用 Boot Loader是嵌入式系統(tǒng)中,處理器加電復(fù)位后首先執(zhí)行的一段代碼。Boot Loader與硬件密切相關(guān),其代碼主要由匯編語言和C語言編寫。對于不同的系統(tǒng),Boot Loader的功能有所不同,但主要作用是基本相同的,有以下幾點(diǎn): 初始化CPU運(yùn)行的時鐘頻率; 初始化Flash和內(nèi)存的數(shù)據(jù)寬度、讀寫訪問周期和刷新周期; 初始化中斷系統(tǒng); 初始化系統(tǒng)中各種片內(nèi)、片外設(shè)備和IO端口; 初始化系統(tǒng)各種運(yùn)行模式下的寄存器和堆棧; 加載和引導(dǎo)操作系統(tǒng),16,2VIVI的啟動方式 VIVI可以從Nand Flash中啟動,也可以從Nor Flash中啟動。選擇從不同類型的Flash上啟動,其使用方法會有一些差別: 如果VIVI是燒寫到Nand Flash中的,那么VIVI將從Nand Flash啟動。由于NandFlash沒有專門的地址線,所以它在系統(tǒng)中根本就沒有地址空間(其結(jié)構(gòu)是共用地址和數(shù)據(jù)總線,分時發(fā)送地址和數(shù)據(jù)),因此只適合用來存放數(shù)據(jù),而不能夠直接在其上執(zhí)行程序指令。S3C2410專門內(nèi)置了一個Nand Flash控制器,通過在芯片內(nèi)設(shè)置名叫Step Stone的4 KB RAM來完成Nand Flash的啟動功能。因此,通過Nand Flash啟動的啟動代碼不能超過4KB。 如果VIVI是燒寫到Nor Flash中的,那么VIVI將從Nor Flash啟動。因為Nor Flash具有XIP特性(能夠直接在其上執(zhí)行程序指令),所以VIVI將一直在Nor Flash上運(yùn)行,直到進(jìn)入main()函數(shù)中的mem_map_init()函數(shù),17,3.VIVI操作命令 Load part,param,boot,flash,bon,help 4.配置和編譯VIVI 5.燒寫VIVI映像,18,VIVI編譯及使用實驗,【實驗步驟】 復(fù)制EDUKIT-III 2410的VIVI補(bǔ)丁文件ViVkit2410.patch到$SOURCEDIR/patch目錄下。 運(yùn)行Cygwin VIVI源代碼直接使用4.1節(jié)中介紹的代碼,并按以下命令打入補(bǔ)丁(P140) 編譯VIVI (在Cygwin窗口中輸入如下命令:書P140) 把編譯好的VIVI燒到實驗箱Nor Flash(0x00x20000)中 實驗箱加電運(yùn)行VIVI (運(yùn)行VIVI后可在超級終端上看到類似書P141的輸出結(jié)果) 復(fù)位重新運(yùn)行VIVI,按非Return鍵,進(jìn)入ViVi提示符后,執(zhí)行help命令,19,【實驗 過程】,運(yùn)行Cygwin,20,【實驗 過程】,清除老文件,運(yùn)行配置命令,21,【實驗 過程】,加載配置文件,22,【實驗 過程】,輸入已存在的配置文件名,配置文件名,23,【實驗 過程】,保存,退出,24,【實驗 過程】,運(yùn)行配置命令后的結(jié)果,25,【實驗 過程】,編譯,鏈接VIVI,生成boot image文件,26,【實驗 過程】,VIVI boot image文件所在目錄,27,【實驗 過程】,連接并口線到仿真器,啟動燒錄程序,調(diào)配置文件,28,【實驗 過程】,進(jìn)行設(shè)置,29,【實驗 過程】,開始燒錄,30,【實驗 過程】,連接好串口線,在PC機(jī)上啟動超級終端程序, 實驗箱加電運(yùn)行VIVI,31,【實驗 過程】,復(fù)位后,重新運(yùn)行VIVI,按非Return鍵,進(jìn)入ViVi提示符后
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國電腦無梭窄幅提花織帶機(jī)數(shù)據(jù)監(jiān)測研究報告
- 2025-2030中國智能矯姿設(shè)備行業(yè)市場發(fā)展分析及發(fā)展趨勢與投資前景研究報告
- 2025-2030中國旅游地產(chǎn)行業(yè)市場發(fā)展分析及前景趨勢與投資機(jī)會研究報告
- 2025-2030中國控油乳液行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國展覽服務(wù)行業(yè)市場發(fā)展前瞻及投資戰(zhàn)略研究報告
- 2025-2030中國安全玻璃市場發(fā)展分析及市場趨勢與投資方向研究報告
- 領(lǐng)導(dǎo)遴選面試真題及答案
- 靜脈治療技術(shù)發(fā)展
- 臨縣村官面試真題及答案
- 置管治療過程圖解
- 如何進(jìn)行醫(yī)療垃圾的安全運(yùn)輸
- 公共停車場建設(shè)項目可行性研究報告
- 保安服務(wù)標(biāo)準(zhǔn)及工作流程
- 2024年中考數(shù)學(xué)幾何模型歸納(全國通用):18 全等與相似模型之十字模型(學(xué)生版)
- 外科疾病分級目錄
- 國家級教學(xué)成果的培育提煉與申報
- 海南師范大學(xué)《高等數(shù)學(xué)》2020-2021期末試卷B
- 2023年09月黑龍江省大興安嶺地區(qū)“黑龍江人才周”校園引才活動引進(jìn)90名人員筆試歷年難易錯點(diǎn)考題薈萃附帶答案詳解
- 直播傭金直播合同帶貨
- 點(diǎn)凸焊操作工藝規(guī)程
- 跳頻通信系統(tǒng)課件
評論
0/150
提交評論