日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式硬件

0 引 言

Bootloader是操作系統(tǒng)運行之前執(zhí)行的一小段程序,用來初始化硬件設備,建立一個系統(tǒng)空間映射圖和一個適當的系統(tǒng)軟硬件環(huán)境。最終Bootloader把操作系統(tǒng)內核映像加載到RAM中。并將系統(tǒng)控制權交給內核。BootLoader就是在操作系統(tǒng)內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適狀態(tài),以便為最終調用操作系統(tǒng)內核準備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會內嵌一段短小的啟動程序),因此整個系統(tǒng)的加載啟動任務就完全由BootLoader來完成。比如在一個基于ARM7TDMI core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復位時通常都從地址0x00000000處開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的BootLoader程序。

U-Boot被認為是功能最多,最具彈性以及開發(fā)最積極的開放源碼Bootloader。U-Boot已經能夠支持PowerPC,ARM,X86和MIPS體系結構的上百種開發(fā)板,U-Boot還具有通過TFTP,從IDE或SCSI磁盤以及DOc啟動的能力,還提供了JFFS2的只讀功能。正是由于U-Boot較高的可靠性和穩(wěn)定性;高度靈活的功能設置;豐富的設備驅動程序和豐富的開發(fā)和調試文檔,因此選擇U-Boot作為目標板的Boot-loader。

對于嵌入式系統(tǒng),Bootloader是基于特定的硬件來實現的,因此建立一個通用的。Bootloader是不可能的,要使Bootloader能在目標板上運行,必須做出相應的修改。

l 目標板

目標板采用Intel PXA255處理器,頻率最高可達400 MHz,配置了32 MB的FLASH(Intel StrataFLASH)和64MB的SDRAM(Samsung),網卡采用LAN91C96。SDRAM:Synchronous Dynamic Random Access Memory,同步動態(tài)隨機存儲器,RAM(隨機存取存儲器)RAM -random access memory 隨機存儲器。存儲單元的內容可按需隨意取出或存入,且存取的速度與存儲單元的位置無關的存儲器。這種存儲器在斷電時將丟失其存儲內容,故主要用于存儲短時間使用的程序。 按照存儲信息的不同,隨機存儲器又分為靜態(tài)隨機存儲器(Static RAM,SRAM)和動態(tài)隨機存儲器(Dynamic RAM,DRAM)。所謂“隨機存取”,指的是當存儲器中的數據被讀取或寫入時,所需要的時間與這段信息所在的位置無關。相對的,讀取或寫入順序訪問(Sequential Access)存儲設備中的信息時,其所需要的時間與位置就會有關系(如磁帶)。同步是指 Memory工作需要同步時鐘,內部的命令的發(fā)送與數據的傳輸都以它為基準;動態(tài)是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲,而是自由指定地址進行數據讀寫。SDRAM從發(fā)展到現在已經經歷了四代,分別是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM.(顯卡上的DDR已經發(fā)展到DDR5) 板上有JTAG口、串口和網口,可分別完成程序的下載和調試工作。目標板的主要硬件資源如圖1所示。

2 U-Boot啟動過程分析

充分理解代碼的啟動流程,對于準確地判斷出移植過程中出錯的原因和出錯的位置具有重要的作用。

2.1 U-Boot啟動的入口點

一個可執(zhí)行的Image必須有一個入口點,并且只能有一個全局入口。可執(zhí)行Image的入口一般通過鏈接腳本文件來實現,腳本簡單地說就是一條條的文字命令,這些文字命令是可以看到的(如可以用記事本打開查看、編輯),腳本程序在執(zhí)行時,是由系統(tǒng)的一個解釋器,將其一條條的翻譯成機器可識別的指令,并按程序順序執(zhí)行。因為腳本在執(zhí)行時多了一道翻譯的過程,所以它比二進制程序執(zhí)行效率要稍低一些。本通??梢杂蓱贸绦蚺R時調用并執(zhí)行。各類腳本被廣泛地應用于網頁設計中,因為腳本不僅可以減小網頁的規(guī)模和提高網頁瀏覽速度,而且可以豐富網頁的表現,如動畫、聲音等。鏈接腳本主要用于規(guī)定如何把文件內的section放入輸出映像文件內,并控制輸出文件內各個部分在程序地址空間內的分布。

以U-Boot支持的開發(fā)板1ubbock為例,查看鏈接腳本board/lubbock/u-boot.lds,就可以知道各個部分的鏈接順序。這個連接腳本決定了U-Boot的第一階段的代碼是從0xO開始的,入口由_start符號指定(ENTRY(_start)),第一個鏈接的文件是cup/pxa/start.o,那么U-Boot的入口指令一定位于這個程序中。

2.2 U-Boot的啟動步驟

U—Boot的啟動一般分為stagel和stage2兩個部分。依賴于CPU體系結構的代碼,通常用匯編語言實現,放在stagel;而stage2則通常用C語言來實現,這樣可以實現復雜的功能,而且有更好的可讀性和移植性。

根據對鏈接腳本文件和源代碼的分析,U-Boot的啟動過程中函數調用的順序如圖2所示。

2.2.1 stagel部分

U-Boot的stagel代碼從人口函數start.S開始,它用匯編語言寫成,主要完成的工作為:設置異常向量;設置CPu的速度、時鐘頻率及中斷控制寄存器;初始化內存控制器;將ROM中的程序復制到RAM中;初始化堆棧;轉到RAM中執(zhí)行。RAM(隨機存取存儲器)RAM -random access memory 隨機存儲器。存儲單元的內容可按需隨意取出或存入,且存取的速度與存儲單元的位置無關的存儲器。這種存儲器在斷電時將丟失其存儲內容,故主要用于存儲短時間使用的程序。 按照存儲信息的不同,隨機存儲器又分為靜態(tài)隨機存儲器(Static RAM,SRAM)和動態(tài)隨機存儲器(Dynamic RAM,DRAM)。

stage1代碼執(zhí)行完以后,就為stage2的運行建立起了基本的硬件環(huán)境,此時的U-Boot的存儲器SDRAM映射圖如圖3所示。

2.2.2 stage2部分

接下來進入到U-Boot stage2,即C語言代碼部分,入口是start_arml300t,位于lib_arm/board.c中。startarmboot是C語言開始的函數,也是整個啟動代碼中C語言的主函數,同時還是整個U-Boot的主函數,該函數主要完成的操作為:初始化本階段要使用到的硬件設備;檢測系統(tǒng)內存映射;將內核映像和根文件系統(tǒng)映像從FLASH拷貝到SDRAM中;為內核設置啟動參數;調用內核。

在stage2部分,首先初始化全局數據表;然后順序執(zhí)行函數指針數組init_sequence中的初始化函數;接下來調用FLAsH_init()函數初始化CFI FLAsH(針對NOR FLASH);接著調用env_relocate()函數初始化環(huán)境變量;然后獲取目標板的網絡地址,包括IP地址和MAC地址;接著調用commend/console.c中定義的函數console_init_r()初始化串口控制臺;最后進入main_loop循環(huán),以接收用戶命令。

3 U-Boot的移植

3.1 移植的目標與主要工作

在移植之前,需要清楚移植的目標是什么。為了達到這個目標,需要做哪些工作。一般的開發(fā)板上U-Boot所需的最小功能,包括:串口、FLASH和網卡,由此可得移植目標是:

(1)將U-Boot移植到目標板FLASH上;

(2)U-Boot能夠在目標板上運行起來;

(3)U-Boot能夠讀寫目標板上FLAsH等存儲設備;

(4)U-Boot能夠使網卡正常工作,能通過網卡下載數據。

根據以上的移植目標,所做的主要工作應該包括:

移植U-Boot與目標CPU相應的代碼;移植U-Boot的FLASH驅動;移植U-Boot,的網卡驅動。

3.2 參考板的選取

U-Boot本身已經支持多種開發(fā)板,所以在移植的過程中一般不需要從零開始,可以選擇一個與自己目標板最接近的參考板,在參考板的基礎上進行修改。所以選擇適當的參考板是十分重要的,選擇參考板的原則是參考板和目標板具有相同的處理器,至少類似的處理器;參考板和開發(fā)板具有相同的外圍接口電路,至少基本接口相同。

這里目標板的CPU為PXA255,在board目錄里選擇lubbock開發(fā)板作為參考板。對于相應的FLASH設備由于Intel FLAsH支持CFI(Common FLAsHInterface),選擇drivers/cfi_FLAsH.c作為FLASH設備驅動。由于目標板使用LAN91C96網卡,所以選擇drivers/lan91c96.c作為網卡驅動。

3.3 建立目標板支持文件

選擇好參考板后,就可以依據參考板按照下面的步驟建立起目標板的支持文件:

在board目錄下,通過“cp-rlubbock xsbase255”建立起目標板的支持目錄,將lubbock.c改名為xsbase255.c,在Makefile里把lubbock.o改名為xsbase255.o。

在inclLlde/configs目錄里。通過“cp 1ubbock.h xs-base255.h”命令建立起目標板的配置文件,這個文件需要經常修改。

在U-Boot根目錄里的MakefiIe中加入如下的命令以創(chuàng)建目標板的編譯環(huán)境:

xsbase2 5 5 config:unconfig

@$(MKCONFIG)$(@:_config=)arm pxa xsbase255

注意在@$(MKCONFIG)$(@:_config=)arm

pxa xsbase255前面的空白處是由Tab鍵生成的,千萬不能以空格代替。

3.4 修改相關代碼

從移植U-Boot最小要求U-Boot能正常啟動的角度出發(fā),主要修改如下文件:

incIude/configs/xsbase255.h文件,大多數的寄存器參數都是在這一文件中設置完成的。

board/xsbase255/xsbase255.c文件,只需進行基本的配置,包括設置math-type,啟動參數首地址,獲取系統(tǒng)的RAM信息等。

board/xsbase255/config.mk文件,設置TEXT-BASE,即設置U-Boot:自己啟動時將自己復制到RAM中的起始地址。

驅動程序文件,主要包括網卡驅動和FLASH驅動程序。

3.4.1 目標板配置文件的修改

目標板配置文件inclLlde/configs/xsbase255.h,是移植過程中最重要的文件。

#define CONFIG_PXA255 1

#define CFG_SDRAMBASE O xa0000000

在這個頭文件中,配置相當的重要,里面配置著主要硬件的參數,配置時必須結合相應的硬件手冊才能正確的完成。主要的配置參數如表1所示。

除了上述表格列舉的以外,還有一些其他的參數需要修改,例如控制臺串口缺省的通信波特率,缺省的環(huán)境變量設置(包括本地IP地址、以太網接口的掩碼和MAC地址、服務器IP地址、傳遞給內核的命令行參數等),啟動參數列表配置等。

3.4.2 目標板支持文件的修改

目標板支持文件board/xsbase255/xsbase255.c也需要修改,此文件中的重點是board_init()函數,這個函數里包含與開發(fā)板密切相關的設備的初始化。bi_arch_number為系統(tǒng)啟動時傳遞給內核的MACH號,如果這個參數與內核配置的不相同,則內核啟動解壓縮完成后將出現“Error:a”錯誤,提示用戶這個是體系結構參數傳遞不正確。bi_boot_params為啟動參數的地址,一般放在RAM起始的16 Kb處,在此設置為Oxa0000100。

3.4.3 驅動的移植

在這一部分主要包括閃存和網卡驅動程序的移植。

(1)FLASH驅動。這里所使用的目標板采用2片NOR型閃存,閃存(Flash Memory)是一種長壽命的非易失性(在斷電情況下仍能保持所存儲的數據信息)的存儲器,數據刪除不是以單個的字節(jié)為單位而是以固定的區(qū)塊為單位(注意:NOR Flash 為字節(jié)存儲。),區(qū)塊大小一般為256KB到20MB。閃存是電子可擦除只讀存儲器(EEPROM)的變種,EEPROM與閃存不同的是,它能在字節(jié)水平上進行刪除和重寫而不是整個芯片擦寫,這樣閃存就比EEPROM的更新速度快。由于其斷電時仍能保存數據,閃存通常被用來保存設置信息,如在電腦的BIOS(基本輸入輸出程序)、PDA(個人數字助理)、數碼相機中保存資料等。單片容量16 MB,數據線寬度為16 b,2片并作1個32 MB的數據寬度為32b的。BANK。U-Boot本身支持CFI接口規(guī)范的閃存,涉及到的文件主要包括drivers/cfi-FLASH.c,comrhand/cmd_FLASH.c。

#define CFG_FLASH_CFI

#defineCFG_FLASH_CFl_DRIVER 1

(2)網卡驅動。這里使用的目標板上采用的網卡是LAN91C96,U-Boot自帶的驅動程序drivers/lan91c96.c恰好支持這個網卡,因此只需在include/Configs/xsbase255.h中添加相應的配置即可:

#define CONFIG_DRIVER_IAN91C96

#define CONFIG_LAN91C96_BASE 0x0C000300

CONFIG_LAN91C96_BASE定義的值,應當由網卡的片選地址和I/O基址決定。如果U-Boot固有的驅動程序沒有對目標板的支持,就需要自行在board/xsbase255目錄下添加驅動程序,然后將其添加到本目錄的Makefile中進行編譯和鏈接。Makefile文件 Makefile 一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作,因為 makefile就像一個Shell腳本一樣,其中也可以執(zhí)行操作系統(tǒng)的命令。

4 U-Boot的編譯和下載調試

在U-Boot根目錄里輸入命令:

make xsbase255_config

該命令通過。/mkconfig腳本生成include/config.mk的配置文件,然后運行make命令,完成編譯。如果在編譯過程中出現錯誤,可根據錯誤的提示逐一排查。完成了錯誤的修改,在重新編譯前,先運行make distclean命令,對先前編譯生成的文件進行徹底的清除。

成功編譯后,會生成3種不同的映像格式,分別是:u-boot:。bin(二進制格式),u-boot(ELF格式)和u-boot.srec(S—Record格式),根據加載器的不同,選擇合適的格式燒寫到FLASH中進行運行調試。在此選擇u-boot.bin,直接按照二進制格式下載。

最有效的調試方法是下載映像到FLASH,使用硬件仿真器進行跟蹤調試。但是由于硬件仿真器價格高等客觀因素,采用軟件跟蹤的方法,利用目標板上的LED燈做出判斷。一旦可以打印串口信息,就可以利用串口,將調試信息輸出到屏幕上。

5 結 語

U-Boot是一個功能強大的:Bootloader開發(fā)軟件,對多種開發(fā)板的支持使得它可以方便地移植到目標板上。首先詳細分析U-Boot啟動流程,然后詳細介紹U-Boot在PXA255目標板上移植的全過程。目前U-Boot已經在目標板上穩(wěn)定的運行,為Linux內核的移植打下了堅實的基礎。



admin

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

為增進大家對嵌入式的認識,本文將對嵌入式開發(fā)以及學習嵌入式需要注意的事項予以介紹。

關鍵字: 嵌入式 指數 嵌入式開發(fā)

中國上海,2025年4月7日 — 全球領先的嵌入式系統(tǒng)開發(fā)軟件解決方案供應商IAR正式發(fā)布全新云就緒平臺,為嵌入式開發(fā)團隊提供企業(yè)級的可擴展性、安全性和自動化能力。該平臺于在德國紐倫堡舉辦的embedded world...

關鍵字: 自動化 嵌入式開發(fā) RISC-V

在嵌入式系統(tǒng)開發(fā)領域,VS Code(Visual Studio Code)作為一款輕量級但功能強大的代碼編輯器,正逐漸成為開發(fā)者的首選工具。本文將詳細介紹如何在VS Code上搭建嵌入式開發(fā)環(huán)境,并分享一些調試技巧。

關鍵字: VS Code 嵌入式開發(fā)

隨著汽車電子化、智能化程度的不斷提高,車載以太網(Automotive Ethernet)作為新一代車載網絡通信技術,正逐漸成為汽車內部通信的主干網絡。它以其高帶寬、低延遲和強抗干擾能力,為汽車提供了更加高效、可靠的數據...

關鍵字: 車載以太網 嵌入式開發(fā)

隨著物聯(lián)網技術的飛速發(fā)展,嵌入式系統(tǒng)對實時性、低功耗和可擴展性的要求越來越高。Zephyr RTOS(實時操作系統(tǒng))作為一款專為資源受限設備設計的開源RTOS,憑借其輕量級、模塊化和高可擴展性,在嵌入式開發(fā)領域得到了廣泛...

關鍵字: 嵌入式開發(fā) Zephyr RTOS 物聯(lián)網

嵌入式開發(fā),作為電子工程和計算機科學交叉領域的重要分支,對于構建穩(wěn)定、高效的軟件系統(tǒng)提出了獨特挑戰(zhàn)。本文將深入探討嵌入式開發(fā)的可靠方法論,結合實例與代碼,為開發(fā)者提供一套系統(tǒng)化的指導原則。

關鍵字: 嵌入式開發(fā) 計算機科學

嵌入式開發(fā),作為電子工程和計算機科學的交匯點,對軟件系統(tǒng)的穩(wěn)定性和效率提出了極高的要求。本文將結合具體案例,深入探討嵌入式開發(fā)中的可靠方法論,為開發(fā)者提供一套系統(tǒng)化的指導原則。

關鍵字: 嵌入式開發(fā) 智能家居

在科技日新月異的今天,嵌入式開發(fā)作為連接硬件與軟件的橋梁,在物聯(lián)網、智能設備、工業(yè)自動化等領域扮演著至關重要的角色。對于許多技術愛好者而言,自學嵌入式開發(fā)既是一個充滿魅力的挑戰(zhàn),也是一條通往創(chuàng)新實踐的必由之路。然而,這條...

關鍵字: 嵌入式開發(fā) 物聯(lián)網

在科技日新月異的今天,嵌入式開發(fā)與Java開發(fā)作為軟件開發(fā)領域的兩大重要分支,各自展現出了獨特的發(fā)展軌跡和市場前景。近年來,關于嵌入式開發(fā)是否會像Java開發(fā)一樣“卷”的討論日益增多,這背后既反映了市場對技術趨勢的敏銳洞...

關鍵字: 嵌入式開發(fā) Java開發(fā)

現在在嵌入式開發(fā)MCU中,八塊MCU仍占據三分之一以上的份額,在工業(yè)控制,安全,物聯(lián)網,消費電子等諸多領域,八塊MCU依然隨處可見。

關鍵字: 嵌入式開發(fā) MCU
關閉