桑赫,林巖,張烽
(北京航空航天大學 自動化科學與電氣工程學院,北京 100191)
?
嵌入式系統(tǒng)硬件平臺的啟動方式研究
桑赫,林巖,張烽
(北京航空航天大學 自動化科學與電氣工程學院,北京 100191)
摘要:本文研究嵌入式Linux操作系統(tǒng)的啟動過程,分析從設備上電到系統(tǒng)完成啟動的每個環(huán)節(jié)的作用與實現(xiàn)方式。使用以TMS320DM365為核心的嵌入式設備為硬件平臺,研究主要啟動方式的實現(xiàn)過程,確定啟動方式的適用環(huán)境及優(yōu)缺點。基于便攜嵌入式設備,通過改進的MMC/SD啟動方式,實現(xiàn)設備的啟動與運行不依賴NAND FLASH。
關(guān)鍵詞:嵌入式系統(tǒng);啟動;Linux;TMS320DM365;Micro SD卡
引言
隨著嵌入式技術(shù)的不斷發(fā)展,嵌入式系統(tǒng)在很多領域中得到了更加廣泛的應用。嵌入式系統(tǒng)中的應用程序一般都運行在嵌入式操作系統(tǒng)之上,目前主要應用的嵌入式操作系統(tǒng)為開源的Linux系統(tǒng)[1]。嵌入式Linux系統(tǒng)的啟動過程與一般計算機Linux系統(tǒng)啟動過程不同,為應對不同的工作與開發(fā)環(huán)境,嵌入式系統(tǒng)提供了多種啟動方式,通過研究啟動方式的特點以及嵌入式Linux的啟動過程可以對啟動過程進行優(yōu)化,以滿足特定的需求。
TMS320DM365是目前應用十分廣泛的一種嵌入式芯片,該芯片支持多種啟動方式[2]。本文以其為硬件平臺著重研究啟動過程以及MMC/SD啟動方式的改進與優(yōu)化方法。
1嵌入式系統(tǒng)啟動過程
1.1嵌入式Linux系統(tǒng)的啟動過程
嵌入式Linux系統(tǒng)的啟動過程主要分為3個階段,首先進行芯片內(nèi)引導(RBL),使系統(tǒng)尋找到下一階段的程序入口,接下來啟動第二階段引導(UBL與Uboot),進一步對嵌入式設備進行初始化,最后引導Linux內(nèi)核啟動,掛載文件系統(tǒng),完成Linux系統(tǒng)啟動[3]。其中芯片內(nèi)引導及第二階段引導共同組成了Bootloader。具體的啟動步驟如下:
① 嵌入式設備上電,芯片內(nèi)部引導程序自動運行,初始化CPU,檢測設備狀態(tài)及啟動配置引腳狀態(tài),確定啟動方式;
② 將啟動方式指定設備中的第二階段引導程序拷貝到內(nèi)存,并跳轉(zhuǎn)到相應入口地址,執(zhí)行第二階段引導;
③ UBL進一步初始化相關(guān)設備,將Uboot程序復制到內(nèi)存中,運行Uboot,將存儲設備中的Linux內(nèi)核加載到內(nèi)存中,并使用設置的啟動參數(shù)執(zhí)行內(nèi)核;
④ Linux內(nèi)核初始化存儲、顯示、網(wǎng)絡等硬件設備;
⑤ 掛載文件系統(tǒng),啟動init進程,完成Linux系統(tǒng)啟動。
嵌入式Linux系統(tǒng)的啟動過程如圖1所示。
圖1 嵌入式Linux系統(tǒng)的啟動過程
1.2引導程序Bootloader的作用
嵌入式設備具有與PC機類似的硬件配置,PC機中使用BIOS作為啟動引導程序,嵌入式設備則使用Bootloader作為引導程序,完成設備的初始化以及操作系統(tǒng)內(nèi)核的啟動[4]。
Bootloader是用來初始化硬件設備以及建立內(nèi)存空間映射圖的一段程序,因此其實現(xiàn)要依賴硬件。對于目前應用廣泛的ARM體系結(jié)構(gòu)來說,一般使用Uboot形式的Bootloader均可以滿足需求,但仍需根據(jù)其他不同的硬件設備對源程序進行修改。為了能夠提供更多復雜功能、更好的可移植性以及更高的可靠性,Bootloader通常被設計為多階段啟動方式。以TI公司生產(chǎn)的ARM核心嵌入式設備為例,其Bootloader的開始階段固化于芯片內(nèi)部,稱為RBL(ROM Bootloader)階段,該階段的程序會初始化一部分內(nèi)存空間,關(guān)閉所有中斷,并通過啟動引腳狀態(tài)確定系統(tǒng)的啟動方式,將第二階段的啟動程序從指定設備復制到內(nèi)存中,進行系統(tǒng)下一步啟動。第二階段稱為UBL(User Bootloader)階段,該階段會進一步初始化系統(tǒng),設置堆棧。由于TMS320DM365芯片支持的UBL最大為30 KB,因此要實現(xiàn)更多功能及Linux內(nèi)核的配置與加載,需要將第三階段的啟動程序復制到內(nèi)存中并執(zhí)行。第三階段稱為Uboot階段,該階段初始化系統(tǒng)的網(wǎng)口、串口等設備,為嵌入式系統(tǒng)內(nèi)核分配內(nèi)存空間,并將Linux系統(tǒng)內(nèi)核加載到內(nèi)存空間中,使用配置參數(shù)啟動系統(tǒng)。該Bootloader的啟動過程如圖2所示。
圖2 Bootloader啟動過程
2啟動方式
2.1啟動方式概述
由于嵌入式設備需要在不同的環(huán)境下工作,因此其相對于PC機來說具有更多的啟動方式。使用何種啟動方式一般由芯片的啟動配置引腳決定,CPU在啟動后會讀取該引腳的信息以確定啟動方式。一般來說,嵌入式設備使用NAND Flash啟動作為默認啟動方式,即把各階段Bootloader、Linux系統(tǒng)內(nèi)核以及文件系統(tǒng)存儲在NAND Flash中,嵌入式設備啟動時,將NAND Flash中的文件加載到內(nèi)存中。
不同的嵌入式設備所支持的啟動各不相同,典型的啟動方式有NAND Flash啟動、MMC/SD啟動、EMIF啟動等方式。本文使用TMS320DM365(以下簡稱DM365)為CPU的嵌入式設備平臺,研究其啟動方式的實現(xiàn)過程。
DM365處理器可以根據(jù)啟動引腳BTSEL[2∶0]的配置來決定使用異步EMIF啟動還是ARM的ROM啟動[5]。
當BTSEL[2∶0] = 001時,采用異步EMIF啟動方式,此時需要使用OneNAND設備,芯片啟動會在執(zhí)行完OneNAND的啟動頁后進行。
當BTSEL[2∶0] ≠ 001時,使用ARM處理器的RBL(ROM Bootloader)來引導系統(tǒng),此時有如下7種啟動方式:
① BTSEL[2∶0] = 000為ARM NAND啟動;
② BTSEL[2∶0] = 010為ARM MMC/SD啟動;
③ BTSEL[2∶0] = 011為ARM UART啟動;
④ BTSEL[2∶0] = 100為ARM USB啟動;
⑤ BTSEL[2∶0] = 101為ARM SPI啟動;
⑥ BTSEL[2∶0] = 110為ARM EMAC啟動;
⑦ BTSEL[2∶0] = 111為ARM HPI啟動。
當系統(tǒng)從NAND Flash啟動失敗時,會自動嘗試使用MMC/SD方式啟動,如果此時系統(tǒng)啟動沒有成功,則將循環(huán)嘗試使用MMC/SD方式啟動。其他啟動方式如果啟動失敗,會反復嘗試當前啟動方式。
2.2啟動方式研究
嵌入式系統(tǒng)一般選擇從固態(tài)存儲設備上啟動,對于DM365系統(tǒng)來說,NAND Flash和MMC/SD是最常用的兩種啟動方式。
2.2.1NAND啟動方式
當啟動方式設置為NAND Flash啟動方式時,首先從設備中讀取NAND Flash啟動方式存儲設備的ID,從對應RBL中的設備信息表可以得到必要的信息(例如塊大小、頁大小等),隨后RBL會在第0頁搜索UBL的描述符。
圖3 NAND Flash啟動過程
如果沒有找到符合UBL幻數(shù)的有效UBL,將在接下來的23塊中繼續(xù)搜索。在找到有效的UBL后,RBL將對應塊的編號寫入內(nèi)存的特定位置中(0x 7FFC~0x 8000),隨后RBL會根據(jù)UBL提供的信息初始化對應的設備,將UBL拷貝到內(nèi)存中并在入口地址處運行UBL,最后UBL將Uboot加載到內(nèi)存中,并執(zhí)行Uboot進行系統(tǒng)的引導。在上述過程中,如果RBL在24塊中均未能找到有效的UBL,則會嘗試使用MMC/SD方式啟動。該啟動過程如圖3所示。
2.2.2MMC/SD啟動方式
當NAND Flash啟動失敗或BTSEL[2∶0] = 010時,系統(tǒng)采用MMC/SD啟動方式。此時,系統(tǒng)首先從MMC/SD設備的CID和CSD寄存器中讀取塊大小等信息來完成設備初始化。隨后ARM處理器的RBL從Micro SD卡的第0號塊開始,搜索UBL描述符中的幻數(shù),幻數(shù)在塊的起始32位中。與NAND Flash啟動方式類似,如果沒有找到符合UBL幻數(shù)的有效UBL,RBL將在接下來的23塊中搜索。但由于MMC/SD存儲設備與NAND Flash存儲設備的結(jié)構(gòu)不同,要求MMC/SD設備的存儲容量小于4 GB。
當搜索到有效幻數(shù)時,RBL會將UBL從Micro SD卡中拷貝到IRAM中,并將此時的塊編號寫入ARM內(nèi)部存儲中的最后32位(0x 7FFC~0x 8000)。在完成復制后,將從入口地址啟動UBL。UBL啟動后會在Micro SD卡的特定塊中讀取幻數(shù)以及UBL信息,并將信息寫入內(nèi)存中,這些信息中有UBoot的入口地址和載入地址,并將UBoot從Micro SD卡拷貝到內(nèi)存中,隨后系統(tǒng)將從UBoot的入口地址啟動Uboot,引導系統(tǒng)啟動。該啟動過程如圖4所示。
圖4 MMC/SD啟動過程
2.2.3UART、USB與EMAC啟動方式
當BTSEL[2∶0] = 011時,設備將使用UART啟動方式。此時將通過設備上的UART接口向ARM的內(nèi)部存儲中下載一段類似UBL的程序。首先RBL向主機發(fā)送BOOTME信號,主機接收后將返回一個ACK序列,經(jīng)過CRC校驗后,主機向RBL發(fā)送UBL程序,RBL接收完成后,啟動UBL并執(zhí)行Uboot的下載與啟動。
當BTSEL[2∶0] = 100時,設備將使用USB啟動方式。USB啟動方式與UART啟動方式類似,但使用USB啟動方式時,需要RBL先初始化USB設備,并在主機中確定USB設備的收發(fā)端點,同時RBL不支持通知USB設備。
當BTSEL[2∶0] = 110時,設備將使用EMAC啟動方式。EMAC啟動方式使用10/100 Mbps網(wǎng)口進行通信,RBL向主機發(fā)送BOOTP信號,從主機中接收返回的包,并存儲在內(nèi)存中,接收完畢后,運行內(nèi)存中的UBL,隨后從主機中接收Uboot并啟動,引導系統(tǒng)啟動。
2.2.4SPI與HPI啟動方式
當BTSEL[2∶0] = 101時,設備將使用SPI啟動方式。此時RBL會從串口中拷貝UBL到ARM內(nèi)存中,并運行UBL。UBL進行內(nèi)存及接口的初始化,等待主機向內(nèi)存中寫入Uboot,寫入完成后運行Uboot引導系統(tǒng)。
當BTSEL[2∶0] = 111時,設備將使用HPI啟動方式。HPI啟動方式與SPI啟動方式的不同在于,RBL不再主動從串口中拷貝UBL,這一過程交給外部主機操作,當主機完成UBL的拷貝后,會跳轉(zhuǎn)并執(zhí)行UBL進行后續(xù)操作。
3改進的MMC/SD啟動方式
3.1改進原因
目前,基于DM365的嵌入式設備大多使用NAND Flash作為系統(tǒng)啟動和運行的存儲設備,在設備調(diào)試過程中和投入使用之前,都需要通過仿真器向NAND Flash燒寫程序,這個過程相對繁瑣且容易出錯。同時,NAND Flash一般作為固化硬件焊接在嵌入式設備上,因此對于頻繁使用存取功能的嵌入式設備來說,NAND Flash一旦損壞將使設備整體癱瘓。相比之下,MMC/SD設備具有容量大、燒寫簡易、更換方便的特點,恰好可以代替NAND Flash作為系統(tǒng)啟動和運行的存儲設備。但DM365支持的MMC/SD啟動方式中,存儲容量要小于4 GB,所以需要對該啟動方式進行改進,使其支持大容量MMC/SD存儲設備。
3.2改進方法
基本的MMC/SD啟動方式不能支持大容量存儲設備的原因在于,MMC/SD存儲設備在建立分區(qū)時,會在前若干扇區(qū)生成分區(qū)表,容量越大,分區(qū)表占用的空間就越大,而RBL只在0~23號塊中搜索有效的UBL幻數(shù),因此,對于大容量MMC/SD設備來說,改進的關(guān)鍵在于將UBL的幻數(shù)及入口地址存儲在RBL的尋址范圍內(nèi)。
寫入位置如圖5所示。因此設計程序在生成MMC/SD啟動設備時,會讀取UBL的幻數(shù)和入口地址,并將其寫入該空白區(qū)域,使用此種改進方法即可使DM365支持大容量MMC/SD設備作為啟動媒介。
圖5 UBL幻數(shù)及入口地址寫入位置
結(jié)語
參考文獻
[1] 申華,劉龍,張云翠.嵌入式Linux系統(tǒng)軟硬件開發(fā)與應用[M].北京:北京航空航天大學出版社,2013.
[2] 高玉龍,白旭,吳瑋.達芬奇技術(shù)開發(fā)基礎原理與實例[M].北京:電子工業(yè)出版社,2012.
[3] 韓超.嵌入式Linux系統(tǒng)開發(fā)全程解析[M].北京:電子工業(yè)出版社,2014.
[4] DougAbbott.Linux for embedded and real-time applications[M].Oxford:Newnes,2013.
[5] Texas Instruments.TMS320DM36x DMSoC ARM Subsystem Reference Guide,2009.
[6] 劉凱,劉博.存儲技術(shù)基礎[M].西安:西安電子科技大學出版社,2011.
桑赫(碩士研究生)、張烽(博士),研究方向為控制理論與控制工程;林巖(教授),研究方向為自適應控制、魯棒控制理論及應用。
Start-up Mode of Hardware Platform in Embedded System
Sang He,Lin Yan,Zhang Feng
(School of Automation and Electrical Engineering,Beijing University of Aeronautics and Astronautics,Beijing 100191,China)
Abstract:In the paper,the start-up process of embedded Linux operating system,the effect and implementation of each part from powering on the device to completing start-up are introduced.Based on the embedded device hardware platform which uses TMS320DM365 as the core,in order to determine the suitable environment and the advantages and disadvantages of each start-up mode,the implementation process of major start-up mode is researched.Through the improved MMC/SD start-up mode,the portable embedded devices can start-up and run without NAND Flash.
Key words:embedded systems; start-up;Linux;TMS320DM365;Micro SD card
收稿日期:(責任編輯:薛士然2015-06-23)
中圖分類號:TM383.6
文獻標識碼:A