<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式系統引導技術(shù)研究

嵌入式系統引導技術(shù)研究

——
作者: 時(shí)間:2006-07-06 來(lái)源:21ic.com 收藏

摘  要:以PowerPC8xx系列處理器為例,通過(guò)對此類(lèi)處理器的引導模式、引導代碼的編寫(xiě)和調試,以及如何引導操作系統執行等問(wèn)題的研究,探索系統引導過(guò)程的一種解決方案。

關(guān)鍵詞:MPC860 操作系統 存儲映射 引導

  系統應用開(kāi)發(fā)不同于PC機,其開(kāi)發(fā)過(guò)程同時(shí)涉及軟硬件,需要將硬件平臺的設計、操作系統以及上層應用開(kāi)發(fā)綜合考慮;而PC機應用開(kāi)發(fā)建立在已經(jīng)定制好的硬件和操作系統平臺上,開(kāi)發(fā)者只需調用系統提供的接口和服務(wù)完成相應的功能。由于應用和成本約束,的硬件平臺需根據應用量身定制,通常所用的MPU、存儲器、外圍設備等有多種選擇余地,而且軟件調試技術(shù)特殊,使平臺的引導設計變得十分復雜。因此,對于嵌入式系統開(kāi)發(fā)者而言,有必要深入分析系統引導過(guò)程,將軟硬件開(kāi)發(fā)有效地綜合,即針對不同的硬件平臺和軟件運行模式,正確地進(jìn)行底層上電初始化,進(jìn)而引導操作系統執行。這個(gè)問(wèn)題的核心在于對系統的引導模式的研究。

  嵌入式系統的啟動(dòng)代碼一般由兩部分構成:引導代碼和操作系統執行環(huán)境的初始化代碼。其中引導代碼一般也由兩部分構成:第一部分是板級、片級初始化代碼,主要功能是通過(guò)設置寄存器初始化硬件的工作方式,如設置時(shí)鐘、中斷控制寄存器等,完成內存映射、初始化MMU等;第二部分是裝載程序,其功能是將操作系統和應用程序的映像從只讀存儲器裝載或者拷貝到系統的RAM中,并跳轉到相應的代碼處繼續執行。操作系統執行環(huán)境的初始化代碼主要由硬件抽象層HAL代碼、設備驅動(dòng)程序初始化代碼和操作系統執行體初始代碼三部分構成。

  本文以摩托羅拉MPC860處理器和具有自主知識產(chǎn)權的操作系統CRTOSII為例,研究嵌入式系統引導程序的設計和實(shí)現技術(shù)。嵌入式軟件的開(kāi)發(fā)涉及調試模式和固化模式兩種運行狀態(tài)。調試模式主要解決如何在目標板上調試正確性未經(jīng)驗證的程序的問(wèn)題;而固化模式主要解決如何引導已調試成功的程序的問(wèn)題。相應地,引導代碼的設計應針對兩種模式分別進(jìn)行。

1 調試模式的系統引導

1.1 調試模式引導代碼的作用

1 調試模式的系統引導

1.1 調試模式引導代碼的作用

  一個(gè)完整的嵌入式軟件的解決方案大致包括四方面:①硬件平臺配置初始化和系統引導代碼;②操作系統軟件執行環(huán)境的初始化代碼;③操作系統;④應用程序。

  在上述四方面中,引導代碼是本研究中力求解決的問(wèn)題。事實(shí)上,板級初始化、操作系統硬件抽象層、設備驅動(dòng)程序三者整合到一起,就構成了嵌入式系統中BSP(板級支持包)的主體。BSP的代碼與具體的目標板硬件設計相關(guān),同時(shí)也與應用程序的設計要求相關(guān),針對應用程序提出的不同要求,例如不同設備驅動(dòng)程序、不同的中斷源個(gè)數、不同的中斷優(yōu)先級安排、是否啟用MMU機制等,BSP部分應作出相應的安排。上述第四部分的應用程序是建立在前三部分正確運行的基礎上,并需反復調試。

  由上述分析可知,BSP和應用程序代碼的正確性通過(guò)一次的編寫(xiě)不能得到保證,需要經(jīng)歷“調試——修改——調試”反復的過(guò)程,因此需要建立一個(gè)可靠的調試環(huán)境。該環(huán)境建立的基礎正是調模式下的引導代碼。

1.2 引導代碼的調試方法

  本研究實(shí)驗采用一種稱(chēng)作BDM(Background Debug Mode)的OCD(On Chip Debuging)調試技術(shù)。BMD是由Motorola公司提供的一種硬件調試方法,類(lèi)似于JTAG調試。它利用處理器提供的調試端口調試。MPC860采用一種特殊的BDM——EPBDM,其運作相當于用處理器內嵌的調試模塊接管中斷及異常處理,用戶(hù)通過(guò)設置調試許可寄存器(debug enable register)指定哪些中斷或異常發(fā)生后處理器直接進(jìn)入調試狀態(tài),而不是操作系統的處理程序。進(jìn)入調試狀態(tài)后,內嵌調試模塊向外部調試通信接口發(fā)出信號,通知一直在通信接口監聽(tīng)的主機調試器,然后調試器便可通過(guò)調試模塊使處理器執行系統指令(相當于特權態(tài))。由于專(zhuān)用的片級調試接口裝置(BDI2000)的支持,不需要目標端配備相應的調試代理(Monitor)軟件。

1.3 調試模式引導代碼實(shí)現

  調試模式引導代碼的核心在于使用BDM協(xié)議解析微指令,通過(guò)調試接口向MPC860發(fā)送信號,初始化調試環(huán)境。由于MPC860采用RISC結構,所以初始化部分主要是設置處理器內部寄存器,這個(gè)過(guò)程包括三方面內容:

 ?。?)對處理器相關(guān)寄存器進(jìn)行初始化:主要是關(guān)于處理器狀態(tài)的寄存器(MSR、SRR1、SIUMCR等),中斷、時(shí)鐘相關(guān)模塊(SYPCR、SCCR、PLPRCR、TBSCR等)。

 ?。?)對BDM調試端口的初始化:包括調試使能寄存器DER、支持指令斷點(diǎn)的寄存器ICTRL等。

 ?。?)對片級、板級內存映射的初始化:包括內部?jì)却嬗成浼拇嫫鱅MMR,內存控制相關(guān)寄存器OR0~0R7、BR0~BR7等。它們主要功能是地址映射、片選信號選擇、內存控制器選擇(UMPA、UMPB、GPCM)。如果選擇UPM,由于UPM控制采用微指令方式,而這些微指令根據內存的不同(SRAM、SDRAM、DRAM等),需要設計人員自行編寫(xiě)代碼寫(xiě)入MPC860內部存儲區相應位置。對于需要實(shí)時(shí)刷新的存儲體(如SDRAM),還需設置刷新控制微指令。

  上述初始化代碼得以執行,一方面依賴(lài)于目標機MPC860提供的調試接口支持,另一方面也需要宿主機GDB的支持。對于宿主機系統,可能選擇Linux,在其下配置GBD;也可以選擇Windows2000,使用可視化的調試工具LambdaTools GDB(Coretek公司產(chǎn)品,不支持硬件斷點(diǎn)),或者使用BDI2000(支持硬件斷點(diǎn)的仿真器)。不管使用哪種調試工具,都可以使用該調試器能夠識別的腳本文伯存放初始化指令。這些腳本在功能上是等效的,指令的描述一般都采用如下格式:

  操作碼 寄存器 數值

  如在嵌入式Linux下SDRAM初始化的代碼片斷為:

mpcbdm spr MDR=0x1FF77C35

mpcbdm spr MDR=0xEFEABC34

mpcbdm spr MDR=0x1FB57C35

……

而在Windows2000下使用BDI2000代碼為:

WUPM 0x00000005 0x1FF77C35

WUPM 0x00000006 0xEFEABC34

WUPM 0x00000007 0x1FB57C35

……

  腳本描述的指令執行后,MPC860按照預先的設想進(jìn)入一個(gè)可以正常工作的狀態(tài),可以用裝載器將程序下載到SDRAM中調試執行。這個(gè)程序主要包含中斷表、操作系統和應用程序映象兩部分,其格式可以為bin、elf、coff等。圖1給出了下載完畢后的內存映象。

  當程序下載完成后,PC指針指向Image代碼段(text段)的首條指令,可以利用調試器提供的命令開(kāi)始調試。

2 固化模式的系統引導

2.1 概述

  經(jīng)過(guò)調試后,OS和上層應用程序構成的Image的正確性得到了保證,但是這個(gè)Image不能自主運行。因為調試模式下,是通過(guò)BDM接口初始化處理器,并且通過(guò)BDM接口將程序下載到RAM中去運行。實(shí)際應用環(huán)境中,Image必須被存儲在非易失性存儲器中,如Flash、EPROM等,本文選擇Flash。系統啟動(dòng)時(shí),處理器執行一段引導程序替代調試模式下的調試腳本和裝載程序的功能。啟動(dòng)代碼主要考慮以下幾個(gè)問(wèn)題:

 ?。?)系統上電和復位時(shí)程序如何執行,需要初始化哪些寄存器,重點(diǎn)仍然是內存映射相關(guān)部分;

 ?。?)啟動(dòng)代碼為幾部分,每部分代碼應該全部還是部分放到Flash或者RAM中執行;

 ?。?)在時(shí)間效率和空間效率的折衷。

2.2 上電初始化

  在兩種引導模式下,上電初始化總是必要步驟。它涉及各種核心寄存器初始化、地址映射等問(wèn)題的處理。

2.2.1 地址映射

  MPC860的復位是通過(guò)一種異常中斷來(lái)處理的(可理解為CPU自己產(chǎn)生的中斷),向量號為0x100。異常向量表的基地址加上復位向量號即為復位向量,也就是CPU開(kāi)始執行指令的地方。異常向量表在內存空間的可能位置有兩個(gè):0x0000000和0xFFF00000。所以PowerPC的復位向量為0x100或0xFFF00100。假設復位向量為0xFFF00100,系統有128K字節的Flash,并準備把它映射到CPU內存空間0xFE000000開(kāi)始的地址。MPC860內部的CS0片選信號是默認的系統啟動(dòng)片選信號,已被連接到Flash的片選線(xiàn)上。上電時(shí),內存控制器會(huì )忽略所有參與征選邏輯的地址線(xiàn)的高17位,CS0總是有效。這樣,Flash總會(huì )被選中,CPU從Flash偏移0x100的地方取指令,此時(shí)CPU的4GB內存空間的每個(gè)128KB的塊都被映射到Flash。

2.2.2 寄存器初始化

  固化方式下的大致相同,但是不再采用腳本文件編寫(xiě),而是直接將一段MPC860匯編程序存放在一個(gè)start.s文件中。與調試模式初始化程序一樣,主要完成以下處理:

(1)初始化CPU核心寄存器;

(2)設置機器狀態(tài)寄存器;

(3)禁止ceche;

(4)初始化IMMR;

(5)初始化系統接口單元(SIU);

(6)初始化時(shí)鐘和中斷控制寄存器;

(7)初始化通信處理機(CPM);

(8)初始化內存控制器(UPM);

(9)初始化C語(yǔ)言堆棧。

2.2.3 地址空間重映射

  上電時(shí),由于只有一個(gè)片選信號有效,它選通了Flash,而RAM和其它存儲設備地址無(wú)效,需要經(jīng)過(guò)地址空間重映射才能訪(fǎng)問(wèn)。MPC860的地址空間重映射是通過(guò)設置0R0~OR7、BR0~BR7這十六個(gè)寄存器完成的。由于上電時(shí)4GB的地址空間均被Flash占用,所以0xFFF00100這個(gè)地址仍在Flash的偏移0x100處。在寄存器初始化過(guò)程中,需要把SDRAM、MPC860內部寄存器空間以及外設等也映射進(jìn)來(lái)。在進(jìn)行這些操作前,需要把Flash的位置固定下來(lái),例如映射到0xFE000000,這個(gè)操作是通過(guò)設置OR0和BR0寄存器實(shí)現的。但在寫(xiě)OR0時(shí),CPU仍然在0xFFF00000的那一塊取指令,而Flash即將被映射到0xFE000000塊,所以程序必定出現“跑飛”的現象,必須對程序計數器(PC)進(jìn)行調整,然而PC指針對程序員是不可見(jiàn)的,必須用跳轉指令修改它。在Flash地址映射完成后,通過(guò)設置OR1~OR7、BR1~BR7可以完成對所有存儲器空間的映射,各種存儲設備可映射在CPU地址空間中的任意位置,但相互之間不能沖突。

2.3 引導代碼的構成和運行

  系統啟動(dòng)所涉及的代碼由寄存器初始化匯編文件start.s、一個(gè)Load程序以及操作系統與應用程序的Image三部分構成,引導代碼則只包含start.s和Load程序。Load程序的作用是將操作系統與應用程序的構成的Image從Flash拷貝到SDRAM中,并跳轉到Image的首條指令。

  調試完成后的Image有兩種運行模式:

  Flash-resident image:Load程序僅僅 把Image中的數據段(data+bss)復制到RAM中,代碼段(text)在Flash中直接運行。

  Flash-based image:Load程序把Image完全搬到RAM中執行,包括image中的代碼段(text)和數據段(data+bss)。

  圖2和圖3分別描述了兩種Image的存貯映象,以及從Flash到SDRAM的裝載過(guò)程。

2.4 時(shí)間效率和空間效率上的折衷

  在嵌入式系統的應用過(guò)程中,針對不同的應用環(huán)境,對時(shí)間效率和空間效率有不同的要求,基于MPC860的啟動(dòng)代碼對此有比較充分的解決方案。

2.4.1 時(shí)間限制

  時(shí)間限制主要包括兩種情況:系統要求快速啟動(dòng)和系統啟動(dòng)后要求程序高速執行。

  對于要求快速啟動(dòng)的系統,應該使在Flash中執行的初始化程序盡量簡(jiǎn)短,諸如循環(huán)語(yǔ)句之類(lèi)的語(yǔ)法應該盡量減少,盡快將程序裝載到RAM中執行,這樣做的原因在于Flash的訪(fǎng)存時(shí)間與RAM的訪(fǎng)存時(shí)間存在數量級上的差距。但是必須根據代碼量以及存儲器的特片進(jìn)行權衡。因為,雖然RAM中捃速度快,但是將Flash中的代碼復制到RAM中的操作會(huì )帶來(lái)一定的開(kāi)銷(xiāo)。由于可見(jiàn),啟動(dòng)時(shí)間由Flash中引導代碼的運行時(shí)間、代碼從Flash拷貝到RAM的時(shí)間以及RAM中后續啟動(dòng)代碼的運行時(shí)間三部分組成。啟動(dòng)時(shí)間的最小值是這三者和的最小值。

  對于啟動(dòng)后要求程序高速執行的系統,主要受處理器、存儲器特性以及I/O速度等的影響。在軟件方面,應該采用了上述Flash-based image方式,使得代碼段在RAM中運行,提高運行速度。

2.4.2 空間限制

  空間限制主要包括兩種情況:Flash等非易失性存儲空間有限和RAM等易失性空間有限兩種系統。

  對于采用高性能非易失性存儲器的系統,出于成本因素,Flash等存儲設備不能太大,然而它又是系統存放啟動(dòng)代碼和操作系統Image的地方。在存放Image時(shí),可以先使用gzip等壓縮工具進(jìn)行壓縮,在將Image加載到RAM時(shí)采用逆向的解壓縮算法解壓。同時(shí),出于實(shí)時(shí)性考慮,壓縮算法不能過(guò)于復雜,否則壓縮解壓過(guò)程消耗大量時(shí)間將與啟動(dòng)時(shí)間限制發(fā)生嚴重沖突。采用壓縮策略并不一定會(huì )增加系統啟動(dòng)時(shí)間,因為壓縮解壓過(guò)程雖然消息了一定的時(shí)間,但是由于Image體積減小,由Flash復制到RAM中的時(shí)間相應減少,有可能反而減少了時(shí)間消耗。

  對于采用高性能RAM的系統,同樣出于成本因素,RAM空間有一定限制,此時(shí)一般采用前文描述的Flashresident image方式:Load程序把Image中的數據段復制到RAM中,代碼段在Flash中運行。折衷同樣存在,因為code段在低速的Flash中運行,在節省空間的同時(shí),卻犧牲了時(shí)間。

  本文介紹了基于嵌入式處理器的操作系統引導方法,重點(diǎn)研究嵌入式系統的引導模式以及不同類(lèi)別的引導方法。以在MPC860C處理器上引導CRTOSII操作系統為例,闡述了調試模式和固化模式下引導代碼的構成、作用以及執行方式,并對不同引導模式下的時(shí)空效率的折衷進(jìn)行了分析。最終,借助BDI2000仿真器對編寫(xiě)的引導代碼進(jìn)行調試,成功實(shí)現了調試模式和固化模式下操作系統的引導。后續工作包括:繼續研究在不同硬件平臺上的操作系統引導方法,例如最流行的ARM、X86系列;在同一平臺上,可以研究不同操作系統的啟動(dòng)方法,例如嵌入式Linux、Vxworks、WinCE等。同時(shí),可以引入數字模型對時(shí)間、空間性能進(jìn)行量化分析,以便在不同環(huán)境下采取比較合適的引導方案。



關(guān)鍵詞: 單片機 嵌入式系統 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>