嵌入式linux系統(tǒng)開發(fā)詳解-第14章深入bootloader_第1頁(yè)
嵌入式linux系統(tǒng)開發(fā)詳解-第14章深入bootloader_第2頁(yè)
嵌入式linux系統(tǒng)開發(fā)詳解-第14章深入bootloader_第3頁(yè)
嵌入式linux系統(tǒng)開發(fā)詳解-第14章深入bootloader_第4頁(yè)
嵌入式linux系統(tǒng)開發(fā)詳解-第14章深入bootloader_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余30頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第14章深入Bootloader14.1初識(shí)Bootloader14.2U-Boot分析14.3U-Boot啟動(dòng)流程分析14.4移植U-Boot到開發(fā)板14.1初識(shí)Bootloader14.1.1PC(個(gè)人電腦)上的Bootloader14.1.2什么是嵌入式系統(tǒng)的Bootloader14.1.3嵌入式系統(tǒng)常見的Bootloader14.1.1PC(個(gè)人電腦)上的BootloaderBootloader是系統(tǒng)加電后運(yùn)行的第一段程序,一般來(lái)說(shuō),Bootloader為了保證整個(gè)系統(tǒng)的啟動(dòng)速度,要在很短的時(shí)間內(nèi)運(yùn)行。PC的Bootloader由BIOS和MBR組成。其中,BIOS固化在PC主板的一塊內(nèi)存內(nèi);MBR是PC內(nèi)硬盤主引導(dǎo)扇區(qū)(MasterBootRecorder)的縮寫。PC上電后,首先執(zhí)行BIOS的啟動(dòng)程序。然后根據(jù)用戶配置,由BIOS加載硬盤MBR的啟動(dòng)數(shù)據(jù)。BIOS把硬盤MBR的數(shù)據(jù)讀取到內(nèi)存,然后把系統(tǒng)的控制權(quán)交給保存在MBR的操作系統(tǒng)加載程序(OSLoader)。操作系統(tǒng)加載程序繼續(xù)工作,直到加載操作系統(tǒng)內(nèi)核,再把控制權(quán)交給操作系統(tǒng)內(nèi)核。14.1.2什么是嵌入式系統(tǒng)的Bootloader嵌入式系統(tǒng)雖然硬件差異大,但是仍然有相同的規(guī)律可循。在同一體系結(jié)構(gòu)上,外部設(shè)備的連接方式、工作方式可能不同,但是CPU的指令、編程模型是相同的。由于和PC系統(tǒng)的差異,在嵌入式系統(tǒng)中,需要開發(fā)人員自己設(shè)計(jì)Bootloader。一些開源軟件組織以及其他公司已經(jīng)設(shè)計(jì)出了適合多種系統(tǒng)的Bootloader。這些Bootloader軟件實(shí)際上是為嵌入式系統(tǒng)設(shè)計(jì)的一個(gè)相對(duì)通用的框架。開發(fā)人員只需要根據(jù)需求,按照不同體系結(jié)構(gòu)的編程模型,以及硬件連接結(jié)構(gòu),設(shè)計(jì)與硬件相關(guān)的代碼,省去了從頭開發(fā)的繁瑣流程。14.1.3嵌入式系統(tǒng)常見的BootloaderBootloader是嵌入式軟件開發(fā)的第一個(gè)環(huán)節(jié)。Bootloader初始化目標(biāo)硬件,給嵌入式操作系統(tǒng)提供硬件資源信息,并且裝載嵌入式操作系統(tǒng)。在嵌入式開發(fā)過(guò)程中Bootloader往往是難點(diǎn),開源的Bootloader在設(shè)計(jì)思想上往往有一些相同之處。1.U-Boot系統(tǒng)加載器2.ViVi系統(tǒng)加載器1.U-Boot系統(tǒng)加載器U-Boot是一個(gè)規(guī)模龐大的開源Bootloader軟件,最初是由denx()發(fā)起。U-Boot的前身是PPCBoot,目前是SourceForge()的一個(gè)項(xiàng)目。目前可以支持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是韓國(guó)的mizi公司專門針對(duì)ARM9處理器設(shè)計(jì)的一款Bootloader。它的特點(diǎn)是操作簡(jiǎn)便,同時(shí)提供了完備的命令體系,目前在三星系列的ARM9處理器上ViVi也比較流行。與其他的Bootloader一樣,ViVi有兩種工作模式:?jiǎn)?dòng)加載模式和下載模式。14.2U-Boot分析14.2.1獲取U-Boot14.2.2U-Boot工程結(jié)構(gòu)分析14.2.3U-Boot總體工作流程14.2.1獲取U-BootU-Boot的源代碼可以從ftp://ftp.denx.de/pub/u-boot/上獲得。使用匿名用戶身份登錄到U-Boot的FTP服務(wù)器后,進(jìn)入pub/u-boot目錄,該目錄包含了U-Boot所有代碼。本書使用U-Boot1.1.6版本代碼作為分析的樣本。14.2.2U-Boot工程結(jié)構(gòu)分析子目錄名作

用board開發(fā)板相關(guān)的定義和結(jié)構(gòu)common包含U-Boot用到的各種處理函數(shù)cpu各種不同類型的處理器相關(guān)代碼docU-Boot文檔drivers常用外部設(shè)備驅(qū)動(dòng)程序examples存放U-Boot開發(fā)代碼樣例fs文件系統(tǒng)有關(guān)的代碼,包括cramfs、ext2、fat等常見文件系統(tǒng)includeU-Boot用到的頭文件lib_armARM體系結(jié)構(gòu)有關(guān)的數(shù)據(jù)定義和操作lib_genericU-Boot通用的操作函數(shù)net常用的網(wǎng)絡(luò)協(xié)議,包括bootp、rarp、arp、tftp等post上電自檢相關(guān)代碼rtc實(shí)時(shí)時(shí)鐘有關(guān)操作toolsU-Boot有關(guān)的數(shù)據(jù)代碼14.2.3U-Boot總體工作流程與大多數(shù)Bootloader類似,U-Boot的啟動(dòng)分成stage1和stage2兩個(gè)階段。stage1使用匯編語(yǔ)言編寫,通常與CPU體系緊密相關(guān),如處理器初始化和設(shè)備初始化代碼等,該階段在start.S文件中實(shí)現(xiàn)。14.2.3U-Boot總體工作流程14.3U-Boot啟動(dòng)流程分析14.3.1_start標(biāo)號(hào)14.3.2reset標(biāo)號(hào)14.3.3cpu_init_crit標(biāo)號(hào)14.3.4lowlevel_init標(biāo)號(hào)14.3.5relocate標(biāo)號(hào)14.3.6start_armboot()函數(shù)14.3.7main_loop()函數(shù)14.3.1_start標(biāo)號(hào)在U-Boot工程中,每種處理器目錄下都有一個(gè)start.S文件,該文件中有一個(gè)_start標(biāo)號(hào),是整個(gè)U-Boot代碼的入口點(diǎn)。14.3.2reset標(biāo)號(hào)reset標(biāo)號(hào)的代碼在處理器啟動(dòng)的時(shí)候最先被執(zhí)行。14.3.3cpu_init_crit標(biāo)號(hào)cpu_init_crit標(biāo)號(hào)處的代碼初始化ARM處理器關(guān)鍵的寄存器。14.3.4lowlevel_init標(biāo)號(hào)lowlevel_init標(biāo)號(hào)位于board/smdk2410/lowlevel_init.S文件。14.3.5relocate標(biāo)號(hào)relocate部分的代碼負(fù)責(zé)把U-BootStage2的代碼從Flash存儲(chǔ)器加載到內(nèi)存。14.3.6start_armboot()函數(shù)start_armboot()函數(shù)主要初始化ARM系統(tǒng)的硬件和環(huán)境變量,包括Flash存儲(chǔ)器、FrameBuffer、網(wǎng)卡等,最后進(jìn)入U(xiǎn)-Boot應(yīng)用程序主循環(huán)。14.3.7main_loop()函數(shù)main_loop()函數(shù)做的都是與具體平臺(tái)無(wú)關(guān)的工作,主要包括初始化啟動(dòng)次數(shù)限制機(jī)制、設(shè)置軟件版本號(hào)、打印啟動(dòng)信息、解析命令等。14.4移植U-Boot到開發(fā)板14.4.1U-Boot移植的一般步驟14.4.2移植U-Boot到目標(biāo)開發(fā)板14.4.3移植U-Boot的常見問(wèn)題14.4.1

U-Boot移植的一般步驟U-Boot移植工作主要分成處理器相關(guān)部分和開發(fā)板相關(guān)部分。由于U-Boot已經(jīng)支持目前絕大多數(shù)處理器,因此處理器移植的工作相對(duì)較少,主要是修改一些配置。對(duì)于開發(fā)板部分的移植,需要參考硬件線路的外圍器件的手冊(cè)。U-Boot移植大致可以分為下面的步驟:1.檢查U-Boot工程是否支持目標(biāo)平臺(tái)主要檢查U-Boot根目錄下的Readme文件是否提到目標(biāo)平臺(tái)處理器,cpu目錄下是否有目標(biāo)平臺(tái)的處理器目錄,以及board目錄下是否有目標(biāo)平臺(tái)類似的工程。如果U-Boot已經(jīng)編寫了與目標(biāo)平臺(tái)類似的工程文件,移植工作會(huì)大大減輕。2.分析目標(biāo)平臺(tái)類似工程目錄結(jié)構(gòu)如果U-Boot有與目標(biāo)平臺(tái)類似的工程,需要分析一下目標(biāo)板工程目錄的結(jié)構(gòu)。不同的目標(biāo)板可能差別很大,分析工程目錄中有哪些文件可以被新的目標(biāo)開發(fā)板利用。3.分析目標(biāo)平臺(tái)代碼目標(biāo)平臺(tái)代碼分析可以按照14.3.4節(jié)介紹的U-Boot啟動(dòng)流程分析,看哪些代碼是額外的,是否需要去掉額外的代碼。4.建立新的開發(fā)板平臺(tái)目錄在board目錄下建立新的開發(fā)板平臺(tái)目錄,目錄下的文件可以從現(xiàn)有類似的開發(fā)板平臺(tái)目錄下復(fù)制得到。5.對(duì)照手冊(cè)修改平臺(tái)差異部分代碼對(duì)照硬件手冊(cè),按照U-Boot啟動(dòng)流程修改現(xiàn)有代碼與新平臺(tái)有差異的部分。6.調(diào)試新代碼新修改的代碼很可能啟動(dòng)不了,需要通過(guò)JTag調(diào)試器跟蹤調(diào)試。找出原因修改后再調(diào)試,直到正確啟動(dòng)。以上分析的6個(gè)步驟并非必須嚴(yán)格遵守,這里僅是提供一個(gè)一般的思路,讀者在移植的時(shí)候需要結(jié)合自己的目標(biāo)板情況來(lái)分析。14.4.2移植U-Boot到目標(biāo)開發(fā)板移植U-Boot到新的目標(biāo)平臺(tái)會(huì)有許多問(wèn)題。為了減少出錯(cuò)和工作量,在建立一個(gè)新的目標(biāo)平臺(tái)的時(shí)候可以直接復(fù)制現(xiàn)有類似平臺(tái)的代碼目錄,然后在現(xiàn)有基礎(chǔ)上修改。如移植到mini2440開發(fā)板,可以按照下面的步驟操作:1.建立新目標(biāo)板工程目錄在board目錄下建立一個(gè)mini2440目錄,現(xiàn)有的smdk2410目錄是類似的平臺(tái),可以復(fù)制smdk2410目錄下的所有文件到mini2440目錄。2.向配置文件加入新開發(fā)板配置在U-Boot代碼根目錄下,修改Makefile文件。在1881行插入一行,寫入以下配置:1882mini2440_config

:unconfig1883@$(MKCONFIG)$(@:_config=)armarm920tmini2440NULLs3c24x03.預(yù)編譯新開發(fā)板的代碼到目前為止可以先編譯一下新開發(fā)板的代碼,目的是為了驗(yàn)證工程文件配置是否正確。在U-Boot目錄下執(zhí)行:$makemini2440_configConfiguringformini2440board...$make4.修改目標(biāo)板配置新的目標(biāo)板配置主要存放在include/configs/mini2440.h文件中,該文件有幾個(gè)宏需要修改:CONFIG_SYS_CLK_FREQ

//目標(biāo)板處理器晶振的頻率CONFIG_DRIVER_CS8900

//目標(biāo)板是否有CS8900網(wǎng)卡CS8900_BASE

//CS8900網(wǎng)卡控制器地址CONFIG_BOOTDELAY

//啟動(dòng)延遲時(shí)間CONFIG_NETMASK

//網(wǎng)絡(luò)地址掩碼CONFIG_SERVERIP

//服務(wù)器IP地址CFG_MAX_FLASH_BANKS

//Flash存儲(chǔ)器Bank數(shù)量PHYS_FLASH_SIZE

//Flash存儲(chǔ)器大小CFG_ENV_ADDR

//環(huán)境配置信息存放地址CFG_FLASH_ERASE_TOUT

//擦除Flash超時(shí)時(shí)間CFG_FLASH_WRITE_TOUT

//寫Flash超時(shí)時(shí)間CFG_ENV_SIZE

//環(huán)境變量大小5.編譯新的配置并且下載執(zhí)行回到U-Boot代碼根目錄,重新執(zhí)行make編譯生成u-boot目標(biāo)文件,然后通過(guò)Flash燒寫工具燒寫到mini2440開發(fā)板的NORFlash存儲(chǔ)器,然后上電啟動(dòng)。14.4.3移植U-Boot的常見問(wèn)題在移植U-Boot的過(guò)程中會(huì)遇到很多問(wèn)題,最主要的是一開始無(wú)

溫馨提示

  • 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)論