版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第14章深入Bootloader14.1初識Bootloader14.2U-Boot分析14.3U-Boot啟動流程分析14.4移植U-Boot到開發(fā)板14.1初識Bootloader14.1.1PC(個人電腦)上的Bootloader14.1.2什么是嵌入式系統(tǒng)的Bootloader14.1.3嵌入式系統(tǒng)常見的Bootloader14.1.1PC(個人電腦)上的BootloaderBootloader是系統(tǒng)加電后運行的第一段程序,一般來說,Bootloader為了保證整個系統(tǒng)的啟動速度,要在很短的時間內(nèi)運行。PC的Bootloader由BIOS和MBR組成。其中,BIOS固化在PC主板的一塊內(nèi)存內(nèi);MBR是PC內(nèi)硬盤主引導扇區(qū)(MasterBootRecorder)的縮寫。PC上電后,首先執(zhí)行BIOS的啟動程序。然后根據(jù)用戶配置,由BIOS加載硬盤MBR的啟動數(shù)據(jù)。BIOS把硬盤MBR的數(shù)據(jù)讀取到內(nèi)存,然后把系統(tǒng)的控制權交給保存在MBR的操作系統(tǒng)加載程序(OSLoader)。操作系統(tǒng)加載程序繼續(xù)工作,直到加載操作系統(tǒng)內(nèi)核,再把控制權交給操作系統(tǒng)內(nèi)核。14.1.2什么是嵌入式系統(tǒng)的Bootloader嵌入式系統(tǒng)雖然硬件差異大,但是仍然有相同的規(guī)律可循。在同一體系結構上,外部設備的連接方式、工作方式可能不同,但是CPU的指令、編程模型是相同的。由于和PC系統(tǒng)的差異,在嵌入式系統(tǒng)中,需要開發(fā)人員自己設計Bootloader。一些開源軟件組織以及其他公司已經(jīng)設計出了適合多種系統(tǒng)的Bootloader。這些Bootloader軟件實際上是為嵌入式系統(tǒng)設計的一個相對通用的框架。開發(fā)人員只需要根據(jù)需求,按照不同體系結構的編程模型,以及硬件連接結構,設計與硬件相關的代碼,省去了從頭開發(fā)的繁瑣流程。14.1.3嵌入式系統(tǒng)常見的BootloaderBootloader是嵌入式軟件開發(fā)的第一個環(huán)節(jié)。Bootloader初始化目標硬件,給嵌入式操作系統(tǒng)提供硬件資源信息,并且裝載嵌入式操作系統(tǒng)。在嵌入式開發(fā)過程中Bootloader往往是難點,開源的Bootloader在設計思想上往往有一些相同之處。1.U-Boot系統(tǒng)加載器2.ViVi系統(tǒng)加載器1.U-Boot系統(tǒng)加載器U-Boot是一個規(guī)模龐大的開源Bootloader軟件,最初是由denx()發(fā)起。U-Boot的前身是PPCBoot,目前是SourceForge()的一個項目。目前可以支持PowerPC(MPC5xx、MPC8xx、MPC82xx、MPC7xx、MPC74xx)、ARM(ARM7、ARM9、StrongARM、Xscale)、MIPS(4kc、5kc)、X86等處理器,支持的嵌入式操作系統(tǒng)有Linux、Vx-Works、NetBSD、QNX、RTEMS、ARTOS、LynxOS等,是PowerPC、ARM9、Xscale、X86等系統(tǒng)通用的Boot方案。2.ViVi系統(tǒng)加載器ViVi是韓國的mizi公司專門針對ARM9處理器設計的一款Bootloader。它的特點是操作簡便,同時提供了完備的命令體系,目前在三星系列的ARM9處理器上ViVi也比較流行。與其他的Bootloader一樣,ViVi有兩種工作模式:啟動加載模式和下載模式。14.2U-Boot分析14.2.1獲取U-Boot14.2.2U-Boot工程結構分析14.2.3U-Boot總體工作流程14.2.1獲取U-BootU-Boot的源代碼可以從ftp://ftp.denx.de/pub/u-boot/上獲得。使用匿名用戶身份登錄到U-Boot的FTP服務器后,進入pub/u-boot目錄,該目錄包含了U-Boot所有代碼。本書使用U-Boot1.1.6版本代碼作為分析的樣本。14.2.2U-Boot工程結構分析子目錄名作
用board開發(fā)板相關的定義和結構common包含U-Boot用到的各種處理函數(shù)cpu各種不同類型的處理器相關代碼docU-Boot文檔drivers常用外部設備驅(qū)動程序examples存放U-Boot開發(fā)代碼樣例fs文件系統(tǒng)有關的代碼,包括cramfs、ext2、fat等常見文件系統(tǒng)includeU-Boot用到的頭文件lib_armARM體系結構有關的數(shù)據(jù)定義和操作lib_genericU-Boot通用的操作函數(shù)net常用的網(wǎng)絡協(xié)議,包括bootp、rarp、arp、tftp等post上電自檢相關代碼rtc實時時鐘有關操作toolsU-Boot有關的數(shù)據(jù)代碼14.2.3U-Boot總體工作流程與大多數(shù)Bootloader類似,U-Boot的啟動分成stage1和stage2兩個階段。stage1使用匯編語言編寫,通常與CPU體系緊密相關,如處理器初始化和設備初始化代碼等,該階段在start.S文件中實現(xiàn)。14.2.3U-Boot總體工作流程14.3U-Boot啟動流程分析14.3.1_start標號14.3.2reset標號14.3.3cpu_init_crit標號14.3.4lowlevel_init標號14.3.5relocate標號14.3.6start_armboot()函數(shù)14.3.7main_loop()函數(shù)14.3.1_start標號在U-Boot工程中,每種處理器目錄下都有一個start.S文件,該文件中有一個_start標號,是整個U-Boot代碼的入口點。14.3.2reset標號reset標號的代碼在處理器啟動的時候最先被執(zhí)行。14.3.3cpu_init_crit標號cpu_init_crit標號處的代碼初始化ARM處理器關鍵的寄存器。14.3.4lowlevel_init標號lowlevel_init標號位于board/smdk2410/lowlevel_init.S文件。14.3.5relocate標號relocate部分的代碼負責把U-BootStage2的代碼從Flash存儲器加載到內(nèi)存。14.3.6start_armboot()函數(shù)start_armboot()函數(shù)主要初始化ARM系統(tǒng)的硬件和環(huán)境變量,包括Flash存儲器、FrameBuffer、網(wǎng)卡等,最后進入U-Boot應用程序主循環(huán)。14.3.7main_loop()函數(shù)main_loop()函數(shù)做的都是與具體平臺無關的工作,主要包括初始化啟動次數(shù)限制機制、設置軟件版本號、打印啟動信息、解析命令等。14.4移植U-Boot到開發(fā)板14.4.1U-Boot移植的一般步驟14.4.2移植U-Boot到目標開發(fā)板14.4.3移植U-Boot的常見問題14.4.1
U-Boot移植的一般步驟U-Boot移植工作主要分成處理器相關部分和開發(fā)板相關部分。由于U-Boot已經(jīng)支持目前絕大多數(shù)處理器,因此處理器移植的工作相對較少,主要是修改一些配置。對于開發(fā)板部分的移植,需要參考硬件線路的外圍器件的手冊。U-Boot移植大致可以分為下面的步驟:1.檢查U-Boot工程是否支持目標平臺主要檢查U-Boot根目錄下的Readme文件是否提到目標平臺處理器,cpu目錄下是否有目標平臺的處理器目錄,以及board目錄下是否有目標平臺類似的工程。如果U-Boot已經(jīng)編寫了與目標平臺類似的工程文件,移植工作會大大減輕。2.分析目標平臺類似工程目錄結構如果U-Boot有與目標平臺類似的工程,需要分析一下目標板工程目錄的結構。不同的目標板可能差別很大,分析工程目錄中有哪些文件可以被新的目標開發(fā)板利用。3.分析目標平臺代碼目標平臺代碼分析可以按照14.3.4節(jié)介紹的U-Boot啟動流程分析,看哪些代碼是額外的,是否需要去掉額外的代碼。4.建立新的開發(fā)板平臺目錄在board目錄下建立新的開發(fā)板平臺目錄,目錄下的文件可以從現(xiàn)有類似的開發(fā)板平臺目錄下復制得到。5.對照手冊修改平臺差異部分代碼對照硬件手冊,按照U-Boot啟動流程修改現(xiàn)有代碼與新平臺有差異的部分。6.調(diào)試新代碼新修改的代碼很可能啟動不了,需要通過JTag調(diào)試器跟蹤調(diào)試。找出原因修改后再調(diào)試,直到正確啟動。以上分析的6個步驟并非必須嚴格遵守,這里僅是提供一個一般的思路,讀者在移植的時候需要結合自己的目標板情況來分析。14.4.2移植U-Boot到目標開發(fā)板移植U-Boot到新的目標平臺會有許多問題。為了減少出錯和工作量,在建立一個新的目標平臺的時候可以直接復制現(xiàn)有類似平臺的代碼目錄,然后在現(xiàn)有基礎上修改。如移植到mini2440開發(fā)板,可以按照下面的步驟操作:1.建立新目標板工程目錄在board目錄下建立一個mini2440目錄,現(xiàn)有的smdk2410目錄是類似的平臺,可以復制smdk2410目錄下的所有文件到mini2440目錄。2.向配置文件加入新開發(fā)板配置在U-Boot代碼根目錄下,修改Makefile文件。在1881行插入一行,寫入以下配置:1882mini2440_config
:unconfig1883@$(MKCONFIG)$(@:_config=)armarm920tmini2440NULLs3c24x03.預編譯新開發(fā)板的代碼到目前為止可以先編譯一下新開發(fā)板的代碼,目的是為了驗證工程文件配置是否正確。在U-Boot目錄下執(zhí)行:$makemini2440_configConfiguringformini2440board...$make4.修改目標板配置新的目標板配置主要存放在include/configs/mini2440.h文件中,該文件有幾個宏需要修改:CONFIG_SYS_CLK_FREQ
//目標板處理器晶振的頻率CONFIG_DRIVER_CS8900
//目標板是否有CS8900網(wǎng)卡CS8900_BASE
//CS8900網(wǎng)卡控制器地址CONFIG_BOOTDELAY
//啟動延遲時間CONFIG_NETMASK
//網(wǎng)絡地址掩碼CONFIG_SERVERIP
//服務器IP地址CFG_MAX_FLASH_BANKS
//Flash存儲器Bank數(shù)量PHYS_FLASH_SIZE
//Flash存儲器大小CFG_ENV_ADDR
//環(huán)境配置信息存放地址CFG_FLASH_ERASE_TOUT
//擦除Flash超時時間CFG_FLASH_WRITE_TOUT
//寫Flash超時時間CFG_ENV_SIZE
//環(huán)境變量大小5.編譯新的配置并且下載執(zhí)行回到U-Boot代碼根目錄,重新執(zhí)行make編譯生成u-boot目標文件,然后通過Flash燒寫工具燒寫到mini2440開發(fā)板的NORFlash存儲器,然后上電啟動。14.4.3移植U-Boot的常見問題在移植U-Boot的過程中會遇到很多問題,最主要的是一開始無
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 乳制品托盤周轉(zhuǎn)冷藏管理
- 酒吧玻璃膜施工合同
- 劇院卷簾門改造工程協(xié)議
- 公園石匠施工合同
- 行業(yè)工作計劃模板集合8篇
- 部門月度工作計劃表怎么寫
- 動員會領導講話稿15篇
- 競聘學生會主席演講稿15篇
- 護士職代會精神心得體會
- 西游記讀后感(合集15篇)
- 幼兒游戲的課件
- 2025年重慶貨運從業(yè)資格證考試題及答案詳解
- 三三制薪酬設計
- 【MOOC】中國近現(xiàn)代史綱要-武漢理工大學 中國大學慕課MOOC答案
- 【新教材】蘇教版小學科學三年級上冊:全冊單元試卷、期中期末總復習試卷
- 屋面板的拆除與更換施工方案
- GB/Z 44047-2024漂浮式海上風力發(fā)電機組設計要求
- 2024版統(tǒng)編版一年級道德與法治上冊《2 我向國旗敬個禮》教學課件
- 國開(內(nèi)蒙古)2024年《漢語中的中國文化》形成性考核1-3終結性考核答案
- 司法臨床司法鑒定培訓
- 第47屆世界技能大賽江蘇省選拔賽計算機軟件測試項目樣題
評論
0/150
提交評論