|
嵌入式stm32軟件培訓(xùn)視頻_嵌入式系統(tǒng)引導(dǎo)技術(shù)研究,
摘要:以PowerPC8xx系列處理器為例,通過對此類處理器的引導(dǎo)模式、引導(dǎo)代碼的編寫和調(diào)試,以及如何引導(dǎo)操作系統(tǒng)執(zhí)行等問題的研究,探索嵌入式系 統(tǒng)引導(dǎo)過程的一種解決方案。 關(guān)鍵詞:MPC860 嵌入式操作系統(tǒng) 存儲映射 引導(dǎo) 嵌入式系統(tǒng)應(yīng)用開發(fā)不同于PC機,其開發(fā)過程同時涉及軟硬件,需要將硬件平臺的設(shè)計、操作系統(tǒng)以及上層應(yīng)用開發(fā)綜合考慮;而PC機應(yīng)用開發(fā)建立在已經(jīng)定制 好的硬件和操作系統(tǒng)平臺上,開發(fā)者只需調(diào)用系統(tǒng)提供的接口和服務(wù)完成相應(yīng)的功能。由于應(yīng)用和成本約束,嵌入式系統(tǒng)的硬件平臺需根據(jù)應(yīng)用量身定制,通常所用 的MPU、存儲器、外圍設(shè)備等有多種選擇余地,而且軟件調(diào)試技術(shù)特殊,使平臺的引導(dǎo)設(shè)計變得十分復(fù)雜。因此,對于嵌入式系統(tǒng)開發(fā)者而言,有必要深入分析系 統(tǒng)引導(dǎo)過程,將軟硬件開發(fā)有效地綜合,即針對不同的硬件平臺和軟件運行模式,正確地進行底層上電初始化,進而引導(dǎo)操作系統(tǒng)執(zhí)行。這個問題的核心在于對系統(tǒng) 的引導(dǎo)模式的研究。 嵌入式系統(tǒng)的啟動代碼一般由兩部分構(gòu)成:引導(dǎo)代碼和操作系統(tǒng)執(zhí)行環(huán)境的初始化代碼。其中引導(dǎo)代碼一般也由兩部分構(gòu)成:第一部分是板級、片級初始化代碼,主 要功能是通過設(shè)置寄存器初始化硬件的工作方式,如設(shè)置時鐘、中斷控制寄存器等,完成內(nèi)存映射、初始化MMU等;第二部分是裝載程序,其功能是將操作系統(tǒng)和 應(yīng)用程序的映像從只讀存儲器裝載或者拷貝到系統(tǒng)的RAM中,并跳轉(zhuǎn)到相應(yīng)的代碼處繼續(xù)執(zhí)行。操作系統(tǒng)執(zhí)行環(huán)境的初始化代碼主要由硬件抽象層HAL代碼、設(shè) 備驅(qū)動程序初始化代碼和操作系統(tǒng)執(zhí)行體初始代碼三部分構(gòu)成。 本文以摩托羅拉MPC860處理器和具有自主知識產(chǎn)權(quán)的操作系統(tǒng)CRTOSII為例,研究嵌入式系統(tǒng)引導(dǎo)程序的設(shè)計和實現(xiàn)技術(shù)。嵌入式軟件的開發(fā)涉及調(diào)試 模式和固化模式兩種運行狀態(tài)。調(diào)試模式主要解決如何在目標(biāo)板上調(diào)試正確性未經(jīng)驗證的程序的問題;而固化模式主要解決如何引導(dǎo)已調(diào)試成功的程序的問題。相應(yīng) 地,引導(dǎo)代碼的設(shè)計應(yīng)針對兩種模式分別進行。 1 調(diào)試模式的系統(tǒng)引導(dǎo) 1.1 調(diào)試模式引導(dǎo)代碼的作用 1 調(diào)試模式的系統(tǒng)引導(dǎo) 1.1 調(diào)試模式引導(dǎo)代碼的作用 一個完整的嵌入式軟件的解決方案大致包括四方面:①硬件平臺配置初始化和系統(tǒng)引導(dǎo)代碼;②操作系統(tǒng)軟件執(zhí)行環(huán)境的初始化代碼;③操作系統(tǒng);④應(yīng)用程序。 在上述四方面中,引導(dǎo)代碼是本研究中力求解決的問題。事實上,板級初始化、操作系統(tǒng)硬件抽象層、設(shè)備驅(qū)動程序三者整合到一起,就構(gòu)成了嵌入式系統(tǒng)中 BSP(板級支持包)的主體。BSP的代碼與具體的目標(biāo)板硬件設(shè)計相關(guān),同時也與應(yīng)用程序的設(shè)計要求相關(guān),針對應(yīng)用程序提出的不同要求,例如不同設(shè)備驅(qū)動 程序、不同的中斷源個數(shù)、不同的中斷優(yōu)先級安排、是否啟用MMU機制等,BSP部分應(yīng)作出相應(yīng)的安排。上述第四部分的應(yīng)用程序是建立在前三部分正確運行的 基礎(chǔ)上,并需反復(fù)調(diào)試。 由上述分析可知,BSP和應(yīng)用程序代碼的正確性通過一次的編寫不能得到保證,需要經(jīng)歷“調(diào)試——修改——調(diào)試”反復(fù)的過程,因此需要建立一個可靠的調(diào)試環(huán) 境。該環(huán)境建立的基礎(chǔ)正是調(diào)模式下的引導(dǎo)代碼。 1.2 引導(dǎo)代碼的調(diào)試方法 本研究實驗采用一種稱作BDM(Background Debug Mode)的OCD(On Chip Debuging)調(diào)試技術(shù)。BMD是由Motorola公司提供的一種硬件調(diào)試方法,類似于JTAG調(diào)試。它利用處理器提供的調(diào)試端口調(diào)試。 MPC860采用一種特殊的BDM——EPBDM,其運作相當(dāng)于用處理器內(nèi)嵌的調(diào)試模塊接管中斷及異常處理,用戶通過設(shè)置調(diào)試許可寄存器(debug enable register)指定哪些中斷或異常發(fā)生后處理器直接進入調(diào)試狀態(tài),而不是操作系統(tǒng)的處理程序。進入調(diào)試狀態(tài)后,內(nèi)嵌調(diào)試模塊向外部調(diào)試通信接口發(fā)出信 號,通知一直在通信接口監(jiān)聽的主機調(diào)試器,然后調(diào)試器便可通過調(diào)試模塊使處理器執(zhí)行系統(tǒng)指令(相當(dāng)于特權(quán)態(tài))。由于專用的片級調(diào)試接口裝置 (BDI2000)的支持,不需要目標(biāo)端配備相應(yīng)的調(diào)試代理(Monitor)軟件。 1.3 調(diào)試模式引導(dǎo)代碼實現(xiàn) 調(diào)試模式引導(dǎo)代碼的核心在于使用BDM協(xié)議解析微指令,通過調(diào)試接口向MPC860發(fā)送信號,初始化調(diào)試環(huán)境。由于MPC860采用RISC結(jié)構(gòu),所以初 始化部分主要是設(shè)置處理器內(nèi)部寄存器,這個過程包括三方面內(nèi)容: (1)對處理器相關(guān)寄存器進行初始化:主要是關(guān)于處理器狀態(tài)的寄存器(MSR、SRR1、SIUMCR等),中斷、時鐘相關(guān)模塊(SYPCR、SCCR、 PLPRCR、TBSCR等)。 (2)對BDM調(diào)試端口的初始化:包括調(diào)試使能寄存器DER、支持指令斷點的寄存器ICTRL等。 (3)對片級、板級內(nèi)存映射的初始化:包括內(nèi)部內(nèi)存映射寄存器IMMR,內(nèi)存控制相關(guān)寄存器OR0~0R7、BR0~BR7等。它們主要功能是地址映射、 片選信號選擇、內(nèi)存控制器選擇(UMPA、UMPB、GPCM)。如果選擇UPM,由于UPM控制采用微指令方式,而這些微指令根據(jù)內(nèi)存的不同 (SRAM、SDRAM、DRAM等),需要設(shè)計人員自行編寫代碼寫入MPC860內(nèi)部存儲區(qū)相應(yīng)位置。對于需要實時刷新的存儲體(如SDRAM),還需 設(shè)置刷新控制微指令。 上述初始化代碼得以執(zhí)行,一方面依賴于目標(biāo)機MPC860提供的調(diào)試接口支持,另一方面也需要宿主機GDB的支持。對于宿主機系統(tǒng),可能選擇Linux, 在其下配置GBD;也可以選擇Windows2000,使用可視化的調(diào)試工具LambdaTools GDB(Coretek公司產(chǎn)品,不支持硬件斷點),或者使用BDI2000(支持硬件斷點的仿真器)。不管使用哪種調(diào)試工具,都可以使用該調(diào)試器能夠識 別的腳本文伯存放初始化指令。這些腳本在功能上是等效的,指令的描述一般都采用如下格式: 操作碼 寄存器 數(shù)值 如在嵌入式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 …… 腳本描述的指令執(zhí)行后,MPC860按照預(yù)先的設(shè)想進入一個可以正常工作的狀態(tài),可以用裝載器將程序下載到SDRAM中調(diào)試執(zhí)行。這個程序主要包含中斷 表、操作系統(tǒng)和應(yīng)用程序映象兩部分,其格式可以為bin、elf、coff等。圖1給出了下載完畢后的內(nèi)存映象。 當(dāng)程序下載完成后,PC指針指向Image代碼段(text段)的首條指令,可以利用調(diào)試器提供的命令開始調(diào)試。 2 固化模式的系統(tǒng)引導(dǎo) 2.1 概述 經(jīng)過調(diào)試后,OS和上層應(yīng)用程序構(gòu)成的Image的正確性得到了保證,但是這個Image不能自主運行。因為調(diào)試模式下,是通過BDM接口初始化處理器, 并且通過BDM接口將程序下載到RAM中去運行。實際應(yīng)用環(huán)境中,Image必須被存儲在非易失性存儲器中,如Flash、EPROM等,本文選擇 Flash。系統(tǒng)啟動時,處理器執(zhí)行一段引導(dǎo)程序替代調(diào)試模式下的調(diào)試腳本和裝載程序的功能。啟動代碼主要考慮以下幾個問題: (1)系統(tǒng)上電和復(fù)位時程序如何執(zhí)行,需要初始化哪些寄存器,重點仍然是內(nèi)存映射相關(guān)部分; (2)啟動代碼為幾部分,每部分代碼應(yīng)該全部還是部分放到Flash或者RAM中執(zhí)行; (3)在時間效率和空間效率的折衷。 [!--empirenews.page--] 2.2 上電初始化 在兩種引導(dǎo)模式下,雨花區(qū)嵌入式養(yǎng)老院, 嵌入式歌曲程序, 嵌入式j(luò)is, 嵌入式琴式工作臺, 南京財大嵌入式培養(yǎng), 嵌入式多媒體報道, 鑫鵬嵌入式錄像機, ark嵌入式工控機, 嵌入式比java難, 嵌入式控制器芯片, AI嵌入式開發(fā), 嵌入式項目源代碼, 嵌入式vga, 嵌入式發(fā)展模式, 嵌入式正弦波, 學(xué)嵌入式系統(tǒng)有用嗎, 嵌入式片外存儲, 驅(qū)動和嵌入式的區(qū)別, 嵌入式的boa, 有關(guān)嵌入式圖表, 嵌入式軟件互聯(lián)網(wǎng), 學(xué)嵌入式和互聯(lián)網(wǎng), 上電初始化總是必要步驟。它涉及各種核心寄存器初始化、地址映射等問題的處理。 2.2.1 地址映射 MPC860的復(fù)位是通過一種異常中斷來處理的(可理解為CPU自己產(chǎn)生的中斷),向量號為0x100。異常向量表的基地址加上復(fù)位向量號即為復(fù)位向量, 也就是CPU開始執(zhí)行指令的地方。異常向量表在內(nèi)存空間的可能位置有兩個:0x0000000和0xFFF00000。所以PowerPC的復(fù)位向量為 0x100或0xFFF00100。假設(shè)復(fù)位向量為0xFFF00100,系統(tǒng)有128K字節(jié)的Flash,并準(zhǔn)備把它映射到CPU內(nèi)存空間 0xFE000000開始的地址。MPC860內(nèi)部的CS0片選信號是默認(rèn)的系統(tǒng)啟動片選信號,已被連接到Flash的片選線上。上電時,內(nèi)存控制器會忽 略所有參與征選邏輯的地址線的高17位,CS0總是有效。這樣,F(xiàn)lash總會被選中,CPU從Flash偏移0x100的地方取指令,此時CPU的 4GB內(nèi)存空間的每個128KB的塊都被映射到Flash。 2.2.2 寄存器初始化 固化方式下的大致相同,但是不再采用腳本文件編寫,而是直接將一段MPC860匯編程序存放在一個start.s文件中。與調(diào)試模式初始化程序一樣,主要 完成以下處理: (1)初始化CPU核心寄存器; (2)設(shè)置機器狀態(tài)寄存器; (3)禁止ceche; (4)初始化IMMR; (5)初始化系統(tǒng)接口單元(SIU); (6)初始化時鐘和中斷控制寄存器; (7)初始化通信處理機(CPM); (8)初始化內(nèi)存控制器(UPM); (9)初始化C語言堆棧。 2.2.3 地址空間重映射 上電時,由于只有一個片選信號有效,它選通了Flash,而RAM和其它存儲設(shè)備地址無效,需要經(jīng)過地址空間重映射才能訪問。MPC860的地址空間重映 射是通過設(shè)置0R0~OR7、BR0~BR7這十六個寄存器完成的。由于上電時4GB的地址空間均被Flash占用,所以0xFFF00100這個地址仍 在Flash的偏移0x100處。在寄存器初始化過程中,需要把SDRAM、MPC860內(nèi)部寄存器空間以及外設(shè)等也映射進來。在進行這些操作前,需要把 Flash的位置固定下來,例如映射到0xFE000000,這個操作是通過設(shè)置OR0和BR0寄存器實現(xiàn)的。但在寫OR0時,CPU仍然在 0xFFF00000的那一塊取指令,而Flash即將被映射到0xFE000000塊,所以程序必定出現(xiàn)“跑飛”的現(xiàn)象,必須對程序計數(shù)器(PC)進行 調(diào)整,然而PC指針對程序員是不可見的,必須用跳轉(zhuǎn)指令修改它。在Flash地址映射完成后,通過設(shè)置OR1~OR7、BR1~BR7可以完成對所有存儲 器空間的映射,各種存儲設(shè)備可映射在CPU地址空間中的任意位置,但相互之間不能沖突。 2.3 引導(dǎo)代碼的構(gòu)成和運行 系統(tǒng)啟動所涉及的代碼由寄存器初始化匯編文件start.s、一個Load程序以及操作系統(tǒng)與應(yīng)用程序的Image三部分構(gòu)成,引導(dǎo)代碼則只包含 start.s和Load程序。Load程序的作用是將操作系統(tǒng)與應(yīng)用程序的構(gòu)成的Image從Flash拷貝到SDRAM中,并跳轉(zhuǎn)到Image的首條 指令。 調(diào)試完成后的Image有兩種運行模式: Flash-resident image:Load程序僅僅 把Image中的數(shù)據(jù)段(data+bss)復(fù)制到RAM中,代碼段(text)在Flash中直接運行。 Flash-based image:Load程序把Image完全搬到RAM中執(zhí)行,包括image中的代碼段(text)和數(shù)據(jù)段(data+bss)。 圖2和圖3分別描述了兩種Image的存貯映象,以及從Flash到SDRAM的裝載過程。 2.4 時間效率和空間效率上的折衷 在嵌入式系統(tǒng)的應(yīng)用過程中,針對不同的應(yīng)用環(huán)境,對時間效率和空間效率有不同的要求,基于MPC860的啟動代碼對此有比較充分的解決方案。 2.4.1 時間限制 時間限制主要包括兩種情況:系統(tǒng)要求快速啟動和系統(tǒng)啟動后要求程序高速執(zhí)行。 對于要求快速啟動的系統(tǒng),應(yīng)該使在Flash中執(zhí)行的初始化程序盡量簡短,諸如循環(huán)語句之類的語法應(yīng)該盡量減少,盡快將程序裝載到RAM中執(zhí)行,這樣做的 原因在于Flash的訪存時間與RAM的訪存時間存在數(shù)量級上的差距。但是必須根據(jù)代碼量以及存儲器的特片進行權(quán)衡。因為,雖然RAM中捃速度快,但是將 Flash中的代碼復(fù)制到RAM中的操作會帶來一定的開銷。由于可見,啟動時間由Flash中引導(dǎo)代碼的運行時間、代碼從Flash拷貝到RAM的時間以 及RAM中后續(xù)啟動代碼的運行時間三部分組成。啟動時間的最小值是這三者和的最小值。 對于啟動后要求程序高速執(zhí)行的系統(tǒng),主要受處理器、存儲器特性以及I/O速度等的影響。在軟件方面,應(yīng)該采用了上述Flash-based image方式,使得代碼段在RAM中運行,提高運行速度。 2.4.2 空間限制 空間限制主要包括兩種情況:Flash等非易失性存儲空間有限和RAM等易失性空間有限兩種系統(tǒng)。 對于采用高性能非易失性存儲器的系統(tǒng),出于成本因素,F(xiàn)lash等存儲設(shè)備不能太大,然而它又是系統(tǒng)存放啟動代碼和操作系統(tǒng)Image的地方。在存放 Image時,可以先使用gzip等壓縮工具進行壓縮,在將Image加載到RAM時采用逆向的解壓縮算法解壓。同時,出于實時性考慮,壓縮算法不能過于 復(fù)雜,否則壓縮解壓過程消耗大量時間將與啟動時間限制發(fā)生嚴(yán)重沖突。采用壓縮策略并不一定會增加系統(tǒng)啟動時間,因為壓縮解壓過程雖然消息了一定的時間,但 是由于Image體積減小,由Flash復(fù)制到RAM中的時間相應(yīng)減少,有可能反而減少了時間消耗。 對于采用高性能RAM的系統(tǒng),同樣出于成本因素,RAM空間有一定限制,此時一般采用前文描述的Flashresident image方式:Load程序把Image中的數(shù)據(jù)段復(fù)制到RAM中,代碼段在Flash中運行。折衷同樣存在,因為code段在低速的Flash中運 行,在節(jié)省空間的同時,卻犧牲了時間。 本文介紹了基于嵌入式處理器的操作系統(tǒng)引導(dǎo)方法,重點研究嵌入式系統(tǒng)的引導(dǎo)模式以及不同類別的引導(dǎo)方法。以在MPC860C處理器上引導(dǎo)CRTOSII操 作系統(tǒng)為例,闡述了調(diào)試模式和固化模式下引導(dǎo)代碼的構(gòu)成、作用以及執(zhí)行方式,并對不同引導(dǎo)模式下的時空效率的折衷進行了分析。最終,借助BDI2000仿 真器對編寫的引導(dǎo)代碼進行調(diào)試,成功實現(xiàn)了調(diào)試模式和固化模式下操作系統(tǒng)的引導(dǎo)。后續(xù)工作包括:繼續(xù)研究在不同硬件平臺上的操作系統(tǒng)引導(dǎo)方法,例如最流行 的ARM、X86系列;在同一平臺上,可以研究不同操作系統(tǒng)的啟動方法,例如嵌入式Linux、Vxworks、WinCE等。同時,可以引入數(shù)字模型對 時間、空間性能進行量化分析,以便在不同環(huán)境下采取比較合適的引導(dǎo)方案。[!--empirenews.page--] |
|