版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第10章Bootloader設(shè)計基礎(chǔ)
10.1Bootloader概述Bootloader,啟動引導(dǎo)程序,又叫引導(dǎo)加載程序,功能強大的Bootloader也就直接叫做板級支持包(BSP,BoardSupportPacket)或者固件(Firmware)。10.1.1Bootloader的作用
Bootloader是在嵌入式操作系統(tǒng)內(nèi)核運行之前運行的一段小程序,也是系統(tǒng)開機后執(zhí)行的第一段程序。通過這段小程序,可以初始化硬件設(shè)備建立內(nèi)存空間將系統(tǒng)的軟硬件環(huán)境設(shè)置成一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Bootloader是依賴于底層硬件而實現(xiàn)的,因此建立一個通用的嵌入式系統(tǒng)Bootloader幾乎是不可能的。在嵌入式系統(tǒng)中,Bootloader對嵌入式設(shè)備中的主要部件如CPU、SDRAM、FLASH、串口等進行了初始化可以使用Bootloader通過串口下載各種文件到設(shè)備的SDRAM中或者燒錄Flash,然后將操作系統(tǒng)內(nèi)核讀入到內(nèi)存中來或者直接跳轉(zhuǎn)到內(nèi)核的入口點,從而實現(xiàn)操作系統(tǒng)的引導(dǎo)。Bootloader從第一條指令跳轉(zhuǎn)后,就開始初始化各種最重要的硬件,比如CPU的工作頻率、定時器、中斷、看門狗、檢測RAM大小和Flash等。一般,硬件初始化的這段程序是用匯編語言編寫的,其后就用C語言編寫??傮w上Bootloader主要完成以下工作:初始化CPU速度;初始化內(nèi)存,包括啟用內(nèi)存庫,初始化內(nèi)存配置寄存器等;初始化中斷控制器,在系統(tǒng)啟動時,關(guān)閉中斷,關(guān)閉看門狗;初始化串行端口(如果在目標(biāo)上有的話);關(guān)閉指令/數(shù)據(jù)高速緩存;設(shè)置堆棧指針;設(shè)置參數(shù)區(qū)域并構(gòu)造參數(shù)結(jié)構(gòu)和標(biāo)記,即引導(dǎo)參數(shù);執(zhí)行POST(上電自檢)來標(biāo)識存在的設(shè)備并報告有何問題;為電源管理提供掛起/恢復(fù)支持;傳輸操作系統(tǒng)內(nèi)核鏡像文件到目標(biāo)機。也可以將操作系統(tǒng)內(nèi)核鏡像文件事先存放在Flash中,這樣就不需要Bootloader和主機傳輸操作系統(tǒng)內(nèi)核鏡像文件,這通常是在做成產(chǎn)品的情況下使用。而一般在開發(fā)過程中,為了調(diào)試內(nèi)核的方便,不將操作系統(tǒng)內(nèi)核鏡像文件固化在Flash中,這就需要主機和目標(biāo)機進行文件傳輸;跳轉(zhuǎn)到內(nèi)核的開始,在此又分為ROM啟動和RAM啟動。所謂ROM啟動就是用XIP(executeInPlace就地執(zhí)行)技術(shù)直接在Flash中執(zhí)行操作系統(tǒng)鏡像文件;所謂RAM啟動就是指把內(nèi)核鏡像從Flash復(fù)制到RAM中,然后再將PC指針跳轉(zhuǎn)到RAM中的操作系統(tǒng)啟動地址。在嵌入式Linux軟件系統(tǒng)的開發(fā)中,一般將軟件分為以下幾個部分:啟動引導(dǎo)程序(Bootloader)操作系統(tǒng)內(nèi)核(OSKernel)根文件系統(tǒng)(FileSystem)圖形窗口系統(tǒng)(GUI)應(yīng)用程序(AP).前三部分是一個可運行的嵌入式系統(tǒng)必不可少的,它們在開發(fā)的過程中,被分別獨立地編譯鏈接或打包為一個二進制目標(biāo)文件,然后下載(燒錄)到嵌入式系統(tǒng)的ROM(一般是Flash)中。在Bootloader階段,也提供了對Flash設(shè)備的分區(qū)格式化的支持,其空間分配通常如圖所示。10.1.2Bootloader的工作模式對于嵌入式系統(tǒng)的開發(fā)人員而言,Bootloader通常包含以下兩種不同的工作模式:啟動加載(Bootloading)模式--正常啟動模式(自主模式)(Bootloader將操作系統(tǒng)從目標(biāo)機上的固態(tài)存儲設(shè)備加載到RAM中運行。沒有用戶的介入和操作。)下載(Downloading)模式--提供給開發(fā)人員或者技術(shù)支持人員使用
(Bootloader通過串口或網(wǎng)絡(luò)從主機下載內(nèi)核映像、根文件系統(tǒng)映像、升級軟件等文件,一般先保存到RAM再寫入Flash等存儲設(shè)備。)10.1.3Bootloader的啟動流程
分為stage1和stage2兩個階段Stage1:一般依賴于CPU體系結(jié)構(gòu)的代碼比如設(shè)備初始化代碼等,都放在這一階段;通常都用匯編語言來實現(xiàn),以達(dá)到短小精悍且啟動快的目的;stage2:通常用C語言來實現(xiàn)這樣可以實現(xiàn)各種復(fù)雜的功能
(比如串口、以太網(wǎng)接口的支持等)
Bootloader的Stage11.
硬件設(shè)備初始化
(屏蔽所有中斷、關(guān)閉看門狗、設(shè)置CPU速度和時鐘頻率、RAM初始化、關(guān)閉指令/數(shù)據(jù)cache);2.
為加載Bootloader的stage2準(zhǔn)備RAM空間
(為獲得更快的執(zhí)行速度,stage2加載到RAM空間,檢測壞塊);3.
拷貝Bootloader的stage2到RAM空間中
(確定stage2的可執(zhí)行映像在固態(tài)存儲設(shè)備的存放起始地址和大小,以及RAM空間的起始地址);4.
設(shè)置好堆棧
(為執(zhí)行c語言代碼做好準(zhǔn)備)5.跳轉(zhuǎn)到stage2的C入口點main()函數(shù)處(vivi中利用兩行代碼實現(xiàn):blmainmovpc,#FLASH_BASE若main返回則又重啟)Bootloader的stage2
1.初始化本階段要使用到的硬件設(shè)備(比如串口初始化,可以輸出打印信息)2.檢測系統(tǒng)內(nèi)存映射(memorymap)(哪些地址范圍被分配用來尋址系統(tǒng)的RAM)3.將kernel映像和根文件系統(tǒng)映像從flash讀到RAM空間(內(nèi)核映像被復(fù)制到從MEM_START+0x8000基地址開始的大約1MB的內(nèi)存范圍內(nèi),根文件系統(tǒng)映像被復(fù)制到MEM_START+0x00100000開始的內(nèi)存。從MEM_START到MEM_START+0x8000這段32KB的內(nèi)存放置一些全局?jǐn)?shù)據(jù)結(jié)構(gòu),如啟動參數(shù)和內(nèi)核頁表等。)4.為內(nèi)核設(shè)置啟動參數(shù)(Linux2.4版本后內(nèi)核以標(biāo)記列表的形式來傳遞啟動參數(shù)。每個標(biāo)記列表由被傳遞參數(shù)的結(jié)構(gòu)及參數(shù)值數(shù)據(jù)結(jié)構(gòu)組成。啟動參數(shù)標(biāo)記列表以標(biāo)記ATAG_CORE開始,以ATAG_NONE結(jié)束。)5.調(diào)用內(nèi)核(跳轉(zhuǎn)到內(nèi)核的第一條指令處,即MEM_START+0x8000處。)10.2S3C2410平臺下Linux的BootloaderViviU-BOOT10.2S3C2410平臺下Linux的Bootloader1.vivi簡介vivi是由韓國mizi公司為ARM處理器系列設(shè)計的一個bootloader。它同樣支持啟動加載模式和下載工作模式。在下載模式下,vivi為用戶提供一個命令行人機接口,通過這個人機接口可以使用vivi提供的一些命令。如果嵌入式系統(tǒng)沒有鍵盤和顯示,那么可以利用vivi中的串口,將其和宿主機連接起來利用宿主機中的串口軟件(如windows中的超級終端或者Linux中的minicom)來控制。vivi常用的命令
Load:下載程序到存儲器中(Flash或者RAM中)Part:用于對MTD分區(qū)進行操作。
MTD(內(nèi)存技術(shù)設(shè)備)是用于訪問memory設(shè)備(ROM、flash)的Linux的子系統(tǒng)。MTD的主要目的是為了使新的memory設(shè)備的驅(qū)動更加簡單,為此它在硬件和上層之間提供了一個抽象的接口。MTD的所有源代碼在/drivers/mtd子目錄下。
Bon:用于對bon分區(qū)(nandflash設(shè)備的一種簡單的分區(qū)管理方式)進行操作Param:用于對bootloader的參數(shù)進行操作Boot:用于引導(dǎo)linuxkernel啟動Flash:管理Flash。如刪除數(shù)據(jù)。ViVi代碼包括以下幾個目錄,共200多個文件arch:包含所有ViVi支持的目標(biāo)板的子目錄。如S3C2410。init:只包含main.c和version.c。ViVi從main函數(shù)開始執(zhí)行。lib:一些平臺公共的接口函數(shù),如延時udelay()等。drivers:引導(dǎo)內(nèi)核需要的設(shè)備的驅(qū)動程序(MTD和串口)。include:頭文件的公共目錄。如S3C2410.h和Platform/smdk2410.h分別定義了S3C2410CPU的寄存器和開發(fā)板資源配置參數(shù)。2.vivi文件結(jié)構(gòu)vivi的配置和嵌入式Linux內(nèi)核一樣,可以采用菜單化的形式進行。其步驟主要如下:1、#makedistclean。清除一些早先生成的無用的目標(biāo)文件。2、#makemenuconfig。根據(jù)菜單中的信息進行配置,完畢后,保存退出。3、#make開始編譯
3.vivi的配置和編譯4.vivi第一階段的分析vivi的第一階段主要完成了依賴于CPU的體系結(jié)構(gòu)硬件初始化,包括禁止中斷、初始化串口、復(fù)制第二階段到RAM中等。由于這些代碼是和硬件緊密相關(guān)的,因此要求讀者在閱讀時對照S3C2410處理器的數(shù)據(jù)手冊,查閱相關(guān)的寄存器的描述,以便更好地理解。這些匯編代碼全部就集中在vivi\arch\s3c2410目錄下的head.S這一個匯編文件中,當(dāng)然還有相關(guān)的頭文件。vivi的第二階段的入口就是init/main.c。按照源代碼的組織流程,根據(jù)模塊化劃分的原則,共分為8個功能模塊即八個步驟,在源代碼的注釋中以step非常清晰的給出了區(qū)分。
5.vivi第二階段的分析第1步:vivi從main()函數(shù)開始執(zhí)行,函數(shù)通過putstr(vivi_bannner)打印出vivi的版本。
第2步:主要是初始化GPIO。根據(jù)芯片的數(shù)據(jù)手冊把所有的初始值設(shè)定,在這里利用set_gpios這個函數(shù)就可以完成初始化了。第3步:進行內(nèi)存映射初始化和內(nèi)存管理單元(MMU)的初始化工作。第4步:初始化堆(heap),內(nèi)存會發(fā)生變化。實現(xiàn)動態(tài)內(nèi)存分配策略。函數(shù)heap_init()。第5步:初始化mtd設(shè)備。mtd_dev_init()。至此初始化設(shè)備的任務(wù)完成。下面為引導(dǎo)操作系統(tǒng)作準(zhǔn)備。第6步:配置參數(shù),主要是init_priv_data函數(shù)。將啟動內(nèi)核的命令參數(shù)取出并存放在指定的內(nèi)存中。第7步:提供vivi人機接口的各種命令。主要函數(shù)有init_builtin_cmds()和add_command()。第8步:進入Bootloader的兩種模式之一。(人機接口的下載模式或直接引導(dǎo)操作系統(tǒng)。)核心函數(shù)是boot_or_vivi()10.2.2U-bootU-Boot,全稱UniversalBootloader,是遵循GPL條款的開放源碼項目它還支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS等嵌入式操作系統(tǒng)。其目前主要支持的目標(biāo)操作系統(tǒng)有OpenBSD,NetBSD,FreeBSD,4.4BSD,Linux,SVR4,Esix,Solaris,Irix,SCO,Dell,NCR,VxWorks,LynxOS,pSOS,QNX,RTEMS,ARTOS等,因此功能比較強大,這也是U-Boot中Universal的一層含義。10.2.2U-bootU-Boot的主要特點有:①開放源碼;
②支持多種嵌入式操作系統(tǒng)內(nèi)核,如Linux、NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS;
③支持多個處理器系列,如PowerPC、ARM、x86、MIPS、XScale;
④較高的可靠性和穩(wěn)定性;
④較高的可靠性和穩(wěn)定性;
⑤高度靈活的功能設(shè)置,適合U-Boot調(diào)試、操作系統(tǒng)不同引導(dǎo)要求、產(chǎn)品發(fā)布等;
⑥豐富的設(shè)備驅(qū)動源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;
⑦較為豐富的開發(fā)調(diào)試文檔與強大的網(wǎng)絡(luò)技術(shù)支持;10.2.2U-boot常用命令:Help/?Bdinfosetenvprintenvsaveenvmwmdmmflinfoerase[起始地址結(jié)束地址].cp[源地址目標(biāo)地址大小]imi[起始地址]bootm[起始地址]tftboot[起始地址鏡像名]reset10.2.2U-bootU-boot文件結(jié)構(gòu)U-boot代碼采用了一種高度模塊化的編程方式,與移植樹有關(guān)的有以下幾個目錄.board:這個目錄存放了所有U-boot支持的目標(biāo)板的子目錄,如board/smdk2410/*就是我們說關(guān)心的.要將U-boot移植到自己的s3c2410x目標(biāo)板上,必須參考這個目錄下的內(nèi)容,比如對比Flash以及Flash寬度和大小的定制鄧就要修改其中的mon:獨立于處理器體系結(jié)構(gòu)的通用代碼,如內(nèi)存大小探測與故障檢測;
cpu:與處理器相關(guān)的文件。如mpc8xx子目錄下含串口、網(wǎng)口、LCD驅(qū)動及中斷初始化等文件;
10.2.2U-bootdriver:通用設(shè)備驅(qū)動,如CFIFLASH驅(qū)動(目前對INTELFLASH支持較好)fs:這個目錄中存放了U-boot支持的文件系統(tǒng).
examples:可在U-Boot下運行的示例程序;如hello_world.c,timer.c;Include:U-Boot頭文件;這個目錄存放頭文件的公共目錄,其中include/configs/smdk2410.h定義了所有和S3C2410X相關(guān)的資源的配置參數(shù),我們往往只需修改這個文件就可以配置目標(biāo)板的參數(shù),如波特率、引導(dǎo)參數(shù)、物理內(nèi)存映射等。
10.2.2U-bootlib_xxx:處理器體系相關(guān)的文件,如lib_ppc,lib_arm:目錄分別包含與PowerPC、ARM體系結(jié)構(gòu)相關(guān)的文件;net:與網(wǎng)絡(luò)功能相關(guān)的文件目錄,如bootp,nfs,tftp;post:上電自檢文件目錄。尚有待于進一步完善;rtcrtc:驅(qū)動程序;tools:用于創(chuàng)建U-BootS-RECORD和BIN鏡像文件的工具;10.3其他常見的Bootloader1.WinCE的BootloaderNboot和Eboot是WinCE的Bootloader。Nboot是n
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育工作者勞動合同樣本3篇
- 掛靠經(jīng)營合同范本3篇
- 房屋買賣定金合同判決書中的借鑒意義3篇
- 旅游信息化加強承諾3篇
- 安心行駛電池質(zhì)保承諾3篇
- 安置房轉(zhuǎn)讓協(xié)議3篇
- 安徽旅游行業(yè)勞動合同模板3篇
- 招標(biāo)文件購買明細(xì)簿3篇
- 工傷事故處理協(xié)議書3篇
- 安裝委托書英文版模板3篇
- 江西警察學(xué)院治安學(xué)專業(yè)主干課程教學(xué)大綱 文檔
- 職業(yè)生涯規(guī)劃-體驗式學(xué)習(xí)智慧樹知到期末考試答案章節(jié)答案2024年華僑大學(xué)
- MOOC 信號與系統(tǒng)-西北工業(yè)大學(xué) 中國大學(xué)慕課答案
- 砌磚工程實訓(xùn)總結(jié)報告
- 醫(yī)學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)智慧樹知到期末考試答案2024年
- 低空經(jīng)濟研究報告-中國低空經(jīng)濟行業(yè)市場現(xiàn)狀調(diào)查及未來發(fā)展趨勢報告(2020-2023年)
- 酒水服務(wù)與品鑒智慧樹知到期末考試答案2024年
- 大學(xué)生國家安全教育智慧樹知到期末考試答案2024年
- 商場保潔服務(wù)日常巡檢方案
- 中醫(yī)培訓(xùn)課件:《艾灸技術(shù)》
- 國家開放大學(xué)《理工英語4》綜合練習(xí)參考答案
評論
0/150
提交評論