色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式Linux開發(fā)環(huán)境的搭建之:U-Boot移植

          嵌入式Linux開發(fā)環(huán)境的搭建之:U-Boot移植

          作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://cafeforensic.com/article/257139.htm

          5.2

          5.2.1介紹

          1.概念

          簡(jiǎn)單地說(shuō),就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段程序,它類似于PC機(jī)中的BIOS程序。通過(guò)這段程序,可以完成硬件設(shè)備的初始化,并建立內(nèi)存空間的映射關(guān)系,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),為最終加載系統(tǒng)內(nèi)核做好準(zhǔn)備。

          通常,比較依賴于硬件平臺(tái),特別是在嵌入式系統(tǒng)中,更為如此。因此,在嵌入式世界里建立一個(gè)通用的Bootloader是一件比較困難的事情。盡管如此,仍然可以對(duì)Bootloader歸納出一些通用的概念來(lái)指導(dǎo)面向用戶定制的Bootloader設(shè)計(jì)與實(shí)現(xiàn)。

          (1)Bootloader所支持的CPU和嵌入式開發(fā)板。

          每種不同的CPU體系結(jié)構(gòu)都有不同的Bootloader。有些Bootloader也支持多種體系結(jié)構(gòu)的CPU,如后面要介紹的U-Boot支持ARM、MIPS、PowerPC等眾多體系結(jié)構(gòu)。除了依賴于CPU的體系結(jié)構(gòu)外,Bootloader實(shí)際上也依賴于具體的嵌入式板級(jí)設(shè)備的配置。

          (2)Bootloader的存儲(chǔ)位置。

          系統(tǒng)加電或復(fù)位后,所有的CPU通常都從某個(gè)由CPU制造商預(yù)先安排的地址上取指令。而基于CPU構(gòu)建的嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲(chǔ)設(shè)備(比如ROM、EEPROM或Flash等)被映射到這個(gè)預(yù)先安排的地址上。因此在系統(tǒng)加電后,CPU將首先執(zhí)行Bootloader程序。

          (3)Bootloader的啟動(dòng)過(guò)程分為單階段和多階段兩種。通常多階段的Bootloader能提供更為復(fù)雜的功能,以及更好的可移植性。

          (4)Bootloader的操作模式。大多數(shù)Bootloader都包含兩種不同的操作模式:“啟動(dòng)加載”模式和“下載”模式,這種區(qū)別僅對(duì)于開發(fā)人員才有意義。

          n 啟動(dòng)加載模式:這種模式也稱為“自主”模式。也就是Bootloader從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)行,整個(gè)過(guò)程并沒(méi)有用戶的介入。這種模式是嵌入式產(chǎn)品發(fā)布時(shí)的通用模式。

          n 下載模式:在這種模式下,目標(biāo)機(jī)上的Bootloader將通過(guò)串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)(Host)下載文件,比如:下載內(nèi)核映像和根文件系統(tǒng)映像等。從主機(jī)下載的文件通常首先被Bootloader保存到目標(biāo)機(jī)的RAM中,然后再被Bootloader寫入到目標(biāo)機(jī)上的Flash類固態(tài)存儲(chǔ)設(shè)備中。Bootloader的這種模式在系統(tǒng)更新時(shí)使用。工作于這種模式下的Bootloader通常都會(huì)向它的終端用戶提供一個(gè)簡(jiǎn)單的命令行接口。

          (5)Bootloader與主機(jī)之間進(jìn)行文件傳輸所用的通信設(shè)備及協(xié)議,最常見的情況就是,目標(biāo)機(jī)上的Bootloader通過(guò)串口與主機(jī)之間進(jìn)行文件傳輸,傳輸協(xié)議通常是xmodem/ymodem/zmodem等。但是,串口傳輸?shù)乃俣仁怯邢薜?,因此通過(guò)以太網(wǎng)連接并借助TFTP等協(xié)議來(lái)下載文件是個(gè)更好的選擇。

          2.Bootloader啟動(dòng)流程

          Bootloader的啟動(dòng)流程一般分為兩個(gè)階段:stage1和stage2,下面分別對(duì)這兩個(gè)階段進(jìn)行講解。

          (1)Bootloader的stage1。

          在stage1中Bootloader主要完成以下工作。

          n 基本的硬件初始化,包括屏蔽所有的中斷、設(shè)置CPU的速度和時(shí)鐘頻率、RAM初始化、初始化外圍設(shè)備、關(guān)閉CPU內(nèi)部指令和數(shù)據(jù)cache等。

          n 為加載stage2準(zhǔn)備RAM空間,通常為了獲得更快的執(zhí)行速度,通常把stage2加載到RAM空間中來(lái)執(zhí)行,因此必須為加載Bootloader的stage2準(zhǔn)備好一段可用的RAM空間。

          n 復(fù)制stage2到RAM中,在這里要確定兩點(diǎn):①stage2的可執(zhí)行映像在固態(tài)存儲(chǔ)設(shè)備的存放起始地址和終止地址;②RAM空間的起始地址。

          n 設(shè)置堆棧指針sp,這是為執(zhí)行stage2的C語(yǔ)言代碼做好準(zhǔn)備。

          (2)Bootloader的stage2。

          在stage2中Bootloader主要完成以下工作。

          n 用匯編語(yǔ)言跳轉(zhuǎn)到main入口函數(shù)。

          由于stage2的代碼通常用C語(yǔ)言來(lái)實(shí)現(xiàn),目的是實(shí)現(xiàn)更復(fù)雜的功能和取得更好的代碼可讀性和可移植性。但是與普通C語(yǔ)言應(yīng)用程序不同的是,在編譯和鏈接Bootloader這樣的程序時(shí),不能使用glibc庫(kù)中的任何支持函數(shù)。

          n 初始化本階段要使用到的硬件設(shè)備,包括初始化串口、初始化計(jì)時(shí)器等。在初始化這些設(shè)備之前可以輸出一些打印信息。

          n 檢測(cè)系統(tǒng)的內(nèi)存映射,所謂內(nèi)存映射就是指在整個(gè)4GB物理地址空間中指出哪些地址范圍被分配用來(lái)尋址系統(tǒng)的內(nèi)存。

          n 加載內(nèi)核映像和根文件系統(tǒng)映像,這里包括規(guī)劃內(nèi)存占用的布局和從Flash上復(fù)制數(shù)據(jù)。

          n 設(shè)置內(nèi)核的啟動(dòng)參數(shù)。

          5.2.2U-Boot概述

          1.U-Boot簡(jiǎn)介

          U-Boot(UniversalBootloader)是遵循GPL條款的開放源碼項(xiàng)目。它是從FADSROM、8xxROM、PPCBOOT逐步發(fā)展演化而來(lái)。其源碼目錄、編譯形式與Linux內(nèi)核很相似,事實(shí)上,不少U-Boot源碼就是相應(yīng)的Linux內(nèi)核源程序的簡(jiǎn)化,尤其是一些設(shè)備的驅(qū)動(dòng)程序,這從U-Boot源碼的注釋中能體現(xiàn)這一點(diǎn)。但是U-Boot不僅僅支持系統(tǒng)的引導(dǎo),而且還支持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的一層含義,另外一層含義則是U-Boot除了支持PowerPC系列的處理器外,還能支持MIPS、x86、ARM、NIOS、XScale等諸多常用系列的處理器。這兩個(gè)特點(diǎn)正是U-Boot項(xiàng)目的開發(fā)目標(biāo),即支持盡可能多的嵌入式處理器和嵌入式操作系統(tǒng)。就目前為止,U-Boot對(duì)PowerPC系列處理器支持最為豐富,對(duì)Linux的支持最完善。

          2.U-Boot特點(diǎn)

          U-Boot的特點(diǎn)如下。

          n 開放源碼;

          n 支持多種嵌入式操作系統(tǒng)內(nèi)核,如Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS;

          n 支持多個(gè)處理器系列,如PowerPC、ARM、x86、MIPS、XScale;

          n 較高的可靠性和穩(wěn)定性;

          n 高度靈活的功能設(shè)置,適合U-Boot調(diào)試、操作系統(tǒng)不同引導(dǎo)要求和產(chǎn)品發(fā)布等;

          n 豐富的設(shè)備驅(qū)動(dòng)源碼,如串口、以太網(wǎng)、SDRAM、Flash、LCD、NVRAM、EEPROM、RTC、鍵盤等;

          n 較為豐富的開發(fā)調(diào)試文檔與強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持。

          3.U-Boot主要功能

          U-Boot可支持的主要功能列表。

          n 系統(tǒng)引導(dǎo):支持NFS掛載、RAMDISK(壓縮或非壓縮)形式的根文件系統(tǒng)。支持NFS掛載,并從Flash中引導(dǎo)壓縮或非壓縮系統(tǒng)內(nèi)核。

          n 基本輔助功能:強(qiáng)大的操作系統(tǒng)接口功能;可靈活設(shè)置、傳遞多個(gè)關(guān)鍵參數(shù)給操作系統(tǒng),適合系統(tǒng)在不同開發(fā)階段的調(diào)試要求與產(chǎn)品發(fā)布,尤其對(duì)Linux支持最為強(qiáng)勁;支持目標(biāo)板環(huán)境參數(shù)多種存儲(chǔ)方式,如Flash、NVRAM、EEPROM;CRC32校驗(yàn),可校驗(yàn)Flash中內(nèi)核、RAMDISK映像文件是否完好。

          n 設(shè)備驅(qū)動(dòng):串口、SDRAM、Flash、以太網(wǎng)、LCD、NVRAM、EEPROM、鍵盤、USB、PCMCIA、PCI、RTC等驅(qū)動(dòng)支持。

          n 上電自檢功能:SDRAM、Flash大小自動(dòng)檢測(cè);SDRAM故障檢測(cè);CPU型號(hào)。

          n 特殊功能:XIP內(nèi)核引導(dǎo)。

          5.2.3U-Boot源碼導(dǎo)讀

          1.U-Boot源碼結(jié)構(gòu)

          U-Boot源碼結(jié)構(gòu)如圖5.27所示。

          圖5.27U-Boot源碼結(jié)構(gòu)

          n board:和一些已有開發(fā)板有關(guān)的代碼,比如makefile和U-Boot.lds等都和具體開發(fā)板的硬件和地址分配有關(guān)。

          n common:與體系結(jié)構(gòu)無(wú)關(guān)的代碼,用來(lái)實(shí)現(xiàn)各種命令的C程序。

          n cpu:包含CPU相關(guān)代碼,其中的子目錄都是以U-BOOT所支持的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個(gè)特定的子目錄中都包括cpu.c和interrupt.c,start.S等。其中cpu.c初始化CPU、設(shè)置指令Cache和數(shù)據(jù)Cache等;interrupt.c設(shè)置系統(tǒng)的各種中斷和異常,比如快速中斷、開關(guān)中斷、時(shí)鐘中斷、軟件中斷、預(yù)取中止和未定義指令等;匯編代碼文件start.S是U-BOOT啟動(dòng)時(shí)執(zhí)行的第一個(gè)文件,它主要是設(shè)置系統(tǒng)堆棧和工作方式,為進(jìn)入C程序奠定基礎(chǔ)。

          n disk:disk驅(qū)動(dòng)的分區(qū)相關(guān)代碼。

          n doc:文檔。

          n drivers:通用設(shè)備驅(qū)動(dòng)程序,比如各種網(wǎng)卡、支持CFI的Flash、串口和USB總線等。

          n fs:支持文件系統(tǒng)的文件,U-BOOT現(xiàn)在支持cramfs、fat、fdos、jffs2和registerfs等。

          n include:頭文件,還有對(duì)各種硬件平臺(tái)支持的匯編文件,系統(tǒng)的配置文件和對(duì)文件系統(tǒng)支持的文件。

          n net:與網(wǎng)絡(luò)有關(guān)的代碼,BOOTP協(xié)議、TFTP協(xié)議、RARP協(xié)議和NFS文件系統(tǒng)的實(shí)現(xiàn)。

          n lib_arm:與ARM體系結(jié)構(gòu)相關(guān)的代碼。

          n tools:創(chuàng)建S-Record格式文件和U-BOOTimages的工具。

          c語(yǔ)言相關(guān)文章:c語(yǔ)言教程


          linux相關(guān)文章:linux教程



          上一頁(yè) 1 2 3 4 5 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉