馬云 游夏


摘要 以IMS32UC6678為代表的鬲性能DSP芯片,不僅具有快速的數(shù)據(jù)處理能力,而且提供了豐富的片上接口資源。DSP應(yīng)用的開發(fā)也從單跑應(yīng)用程序過渡到操作系統(tǒng)時代,多核操作系統(tǒng)的引導(dǎo)過程要比單個應(yīng)用的引導(dǎo)更加復(fù)雜、更具有挑戰(zhàn)性,是DSP的關(guān)鍵技術(shù)之一。本文針對國產(chǎn)DSP操作系統(tǒng)提出了一種引導(dǎo)方法,并在星載、車載和艦載等DSP設(shè)備中得到了成功的驗證。
【關(guān)鍵詞】TMS320C6678 引導(dǎo)程序 DSP 操作系統(tǒng)
1 引言
TMS320C6678是德州儀器(TI)公司全新架構(gòu)的TMS320C66x數(shù)字信號處理器。該芯片基于KeyStone多內(nèi)核sOc架構(gòu)實現(xiàn),內(nèi)部集成了最多8個C66x核,單核的最高工作頻率1.25 GHz,單核即可實現(xiàn)40 GMAC的定點處理或20 GFLOP的浮點處理能力。在雷達(dá)信號處理、水聲設(shè)備、電子對抗、圖形圖像處理、無線和移動通信等領(lǐng)域取得了廣泛的應(yīng)用。
在DSP的實際應(yīng)用中,系統(tǒng)的啟動過程要脫離仿真器件,實現(xiàn)自動加載。特別是對DSP操作系統(tǒng)來說,引導(dǎo)過程不僅要完成對鏡像文件的讀取、解析、復(fù)制到內(nèi)存,還要考慮到操作系統(tǒng)的內(nèi)存劃分和映射機(jī)制、芯片內(nèi)不同核之間的同步等因素,因此非常有必要研究DSP操作系統(tǒng)的引導(dǎo)方法。
2 DSP啟動方式
通常TMS320C6678是通過RBL (ROMBoot Loader)啟動的,RBL是固化在DSP芯片內(nèi)一段程序,永久地存儲在DSP的ROM中,起始地址是Ox02BOOOOO,大小共計128Kbytes,用戶不能對其修改。在芯片上電復(fù)位后,RBL負(fù)責(zé)將操作系統(tǒng)鏡像或用戶應(yīng)用程序鏡像從外部主機(jī)或內(nèi)部的非易失性存儲器( EEPROM、FLASH)傳送到內(nèi)部的高速內(nèi)存(Cache、MSM或DDR)中,并跳轉(zhuǎn)到入口地址運(yùn)行程序。
為了適應(yīng)不同應(yīng)用的需要,TMS320C6678提供了多種啟動方式,可以通過網(wǎng)卡、PCIe、SRIO、HyperLink接口從主機(jī)下載鏡像,也可以通過EMIF、SPI、120接口從外部存儲器下載鏡像,完成啟動過程。這里的主機(jī)可以是通用的PC機(jī),也可以是具有上述接口(網(wǎng)卡、PCIe、SRIO等)的嵌入式系統(tǒng),特別是多節(jié)點DSP應(yīng)用中,使用一個DSP節(jié)點作為主機(jī)啟動其它DSP節(jié)點是一種非常高效的引導(dǎo)方式。
TMS320C6678芯片有13個外部引腳BOOTMODE[12:0]用于引導(dǎo)方式的設(shè)置。上電后,內(nèi)核O執(zhí)行RBL代碼,并采樣這13個引腳的狀態(tài),決定采用哪種引導(dǎo)方式。管腳配置共分三類,分別是BOOTMODE[2:0]用于選擇引導(dǎo)外設(shè)接口,BOOTMODE[9:3]用于設(shè)置外設(shè)接口的初始化參數(shù)。BOOTMODE[12:10]用于PLL的初始化配置。
3 傳統(tǒng)啟動方式的缺陷
雖然可以通過RBL直接加載應(yīng)用,但是在實際應(yīng)用過程中存在眾多的限制性因素使其無法滿足要求,主要體現(xiàn)在:
3.1 文件格式的限制
RBL是固化在DSP內(nèi)部的一段程序,非常精簡,但是無法直接對ELF格式的文件進(jìn)行解析。為了實現(xiàn)鏡像的加載,必須通過TI提供的一系列的工具將ELF文件轉(zhuǎn)換成特定的格式,而且不同接口轉(zhuǎn)換后的格式也不盡相同,例如通過網(wǎng)絡(luò)、SPI、I2C、EMIF等加載必須通過不同的方法完成轉(zhuǎn)換,通用性極差。
在啟動過程中還需配置引導(dǎo)表( BootTable)、啟動參數(shù)表(Boot Parameter Table)和啟動配置表(Boot Config Table)等眾多參數(shù),對不熟悉硬件的DSP開發(fā)人員來說難以使用。
3.2 硬件配置的限制
對于實際應(yīng)用中的DSP板卡來說,外設(shè)接口(如SRIO、網(wǎng)卡、PCIe等)通常是通過交換芯片與外部連接,交換芯片在使用前是需要配置的。在RBL中不提供對交換芯片的配置功能,也就意味著帶有交換芯片的板卡根本無法通過這些外設(shè)接口加載。
帶有操作系統(tǒng)的鏡像,特別支持網(wǎng)絡(luò)、動態(tài)加卸載、符號表和文件系統(tǒng)等功能的鏡像文件通常較大,鏡像代碼段和操作系統(tǒng)的運(yùn)行空間需要使用DDR存儲器,特別是當(dāng)啟動多核時,Cache和共享內(nèi)存不具備加載和運(yùn)行功能復(fù)雜的操作系統(tǒng)的條件。而DSP芯片啟動過程中不會初始化DDR,也就意味著無法完成鏡像的加載。
3.3 操作系統(tǒng)的限制
操作系統(tǒng)不同于簡單的應(yīng)用,操作系統(tǒng)中存在虛擬地址和多核間的同步問題,傳統(tǒng)的加載方式無法識別操作系統(tǒng)內(nèi)部的虛擬地址和物理地址,在解析和鏡像搬移的過程中會將數(shù)據(jù)搬移到虛擬地址,這樣操作系統(tǒng)根本無法運(yùn)行,RBL啟動僅限于單核,也不考慮多核間的同步問題。
4 國產(chǎn)DSP操作系統(tǒng)
本文的引導(dǎo)是針對于帶有操作系統(tǒng)的鏡像,操作系統(tǒng)選用國產(chǎn)的銳華DSP實時操作系統(tǒng),該操作系統(tǒng)提供了面向主流DSP芯片的高性能國產(chǎn)基礎(chǔ)軟件解決方案,其內(nèi)核完全自主設(shè)計,并針對TI公司TMS320C6678芯片進(jìn)行了系統(tǒng)優(yōu)化。
銳華DSP實時操作系統(tǒng)使用AMP多核并行處理架構(gòu),操作系統(tǒng)部署在每個DSP核上,每個核都有自己的存儲空間和任務(wù)隊列、上下文操作空間、堆棧等,核間提供了多核屏障、自旋鎖等多核同步和資源保護(hù)機(jī)制。銳華DSP實時操作系統(tǒng)具有強(qiáng)實時、高可靠特征,基于微內(nèi)核及組件技術(shù),能根據(jù)實際應(yīng)用需要對操作系統(tǒng)內(nèi)核進(jìn)行配置、裁剪、擴(kuò)展與定制。同時支持模塊的動態(tài)加卸載,易于系統(tǒng)重構(gòu)及應(yīng)用升級,解決了多核DSP難于使用的問題,改變了原有的DSP處理器編程模式,提高了用戶的軟件開發(fā)效率。
銳華DSP實時操作系統(tǒng)的所有核使用同一份映像代碼,每個核根據(jù)核號執(zhí)行不同的代碼分支。操作系統(tǒng)將DDR內(nèi)存分為2塊大的區(qū)域,高端為多核共享區(qū),低端為每個核的私有區(qū)。其中,引導(dǎo)、系統(tǒng)代碼、共享數(shù)據(jù)以及用戶自定義內(nèi)存均位于共享區(qū),每個核的堆和棧位于私有區(qū)。
在私有區(qū)中,每個核使用虛擬地址,也就是說每個核的物理地址不同,但邏輯地址是相同的,因此在操作系統(tǒng)引導(dǎo)方案設(shè)計過程中必須考慮這一因素。
多核加載功能是在操作系統(tǒng)中實現(xiàn)的,引導(dǎo)程序首先加載核O,對于另外7個核來說,主要是掛載IPC中斷,然后進(jìn)入等待狀態(tài)。當(dāng)核0啟動后,通過系統(tǒng)參數(shù)讀取哪些核需要被引導(dǎo),然后向需要被引導(dǎo)的核發(fā)送IPC中斷,其它核收到中斷后,即跳到入口地址,并完成多核的加載過程。
5 引導(dǎo)流程
針對傳統(tǒng)啟動方式的缺陷和實時操作系統(tǒng)的特點,本文設(shè)計了一種新的二次引導(dǎo)的加載程序(RBOOT)。與其它的二次引導(dǎo)不同,RBOOT重點考慮了操作系統(tǒng)參數(shù)、內(nèi)存構(gòu)架、板卡外設(shè)配置等。RBOOT可以作為通用的DSP芯片引導(dǎo)程序,無需為專門的DSP板卡或特殊的硬件設(shè)備定制,具有非常好的通用性。
RBOOT可以固化在外部存儲器(EEPROM. NOR Flash. NAND Flash),通過RBL引導(dǎo)。RBOOT支持主機(jī)啟動和存儲器啟動,包括但不限于RBL的全部啟動方式。如果有必要RBOOT甚至可以通過串口、GPIO等非常規(guī)啟動接口引導(dǎo)操作系統(tǒng)。
在RBOOT加載后進(jìn)入讀秒過程,并待串口的輸入。如果串口上有輸入,則進(jìn)入SHELL界面等待用戶的命令,如果無輸入,則使用默認(rèn)的引導(dǎo)方式加載。DSP操作系統(tǒng)鏡像加載流程如圖1所示。
在SHELL界面用戶可以完成以下功能:
(1)配置操作系統(tǒng),包括操作系統(tǒng)的物理地址空間、虛擬地址空間,需要引導(dǎo)的核的個數(shù)等,引導(dǎo)程序可根據(jù)這些參數(shù)正確的加載操作系統(tǒng);
(2)配置硬件,可配置的硬件包括網(wǎng)卡、SRIO、PCIe的參考頻率、發(fā)送和傳輸通道的參數(shù)、工作模式、波特率、板卡上的交換芯片、PHY芯片、DDR等。在加載過程中,根據(jù)這些參數(shù)啟動外設(shè),從而將鏡像文件讀入到芯片內(nèi)部;
(3)配置環(huán)境參數(shù),包括主機(jī)和目標(biāo)機(jī)的IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)信息、SRIO端口號、PCIe端口號、鏡像文件名稱等,如果從存儲器啟動,還可設(shè)置操作系統(tǒng)鏡像文件在存儲器上的偏移等;
(4)配置加載方式,目前可支持的加載方式有網(wǎng)卡、SRIO、PCIe、SPI、EMIF等,用戶可根據(jù)當(dāng)前的硬件特點選擇任何一種方式加載;
(5)加載操作系統(tǒng),讀取用戶配置的信息,根據(jù)當(dāng)前的啟動方式加載操作系統(tǒng),如果用戶未設(shè)置,會使用默認(rèn)的方式(EMIF接口)加載,因為在系統(tǒng)正式運(yùn)行后,以EMIF方式加載為主。
在板卡外設(shè)啟動后,RBOOT首先會讀取ELF文件的文件頭,從文件頭中解析出程序頭( Program Header)、段頭(Section Header)和操作系統(tǒng)入口地址( Entry point address)的信息。根據(jù)這些信息將ELF文件中的數(shù)據(jù)復(fù)制到內(nèi)存地址并進(jìn)行校驗。
在復(fù)制數(shù)據(jù)段到內(nèi)存的過程中,需考慮操作系統(tǒng)的物理地址和虛擬地址的轉(zhuǎn)換,如果讀到的是虛擬地址空間,需要計算出物理地址,并將數(shù)據(jù)復(fù)制到真實的物理地址中,這是和無操作系統(tǒng)鏡像加載最顯著的區(qū)別。
當(dāng)所有的數(shù)據(jù)復(fù)制完成并成功通過校驗后,跳入到操作系統(tǒng)鏡像的入口地址,并運(yùn)行操作系統(tǒng)。
6 實驗結(jié)果
RBOOT實現(xiàn)了自動加載操作系統(tǒng)鏡像程序,支持多種加載方式。實驗結(jié)果表明該引導(dǎo)程序能夠滿足加載方式多樣化的需求,可以從網(wǎng)絡(luò)( TFTP)、SRIO、PCIe、SPI、EMIF等加載操作系統(tǒng)鏡像,且加載過程中用戶無需更改鏡像文件的格式。
除了多種功能外,還對加載時間進(jìn)行了測試,測試使用相同的鏡像文件,大小為1.2Mbytes,程序的代碼段放在DDR上,8核同時加載。實驗結(jié)果表明,加載時間優(yōu)于傳統(tǒng)的JTAG加載以及RBL的網(wǎng)絡(luò)等加載方式,具體的實驗數(shù)據(jù)參見表1。
某些特定領(lǐng)域?qū)Χ喙?jié)點DSP的加載時間有特殊要求,如多個節(jié)點(64或128個)同時加載,必須在很短的時間內(nèi)通過網(wǎng)絡(luò)將操作系統(tǒng)完全加載成功,并且達(dá)到可用狀態(tài)。實驗結(jié)果表明,RBOOT可以用并行化的方式從TFTP服務(wù)器加載程序,完全滿足多節(jié)點同時加載的性能指標(biāo)。
7 結(jié)束語
RBOOT作為一款可配置硬件參數(shù)和操作系統(tǒng)參數(shù)DSP的引導(dǎo)程序,非常適合于國產(chǎn)DSP操作系統(tǒng)的引導(dǎo)。和傳統(tǒng)的引導(dǎo)方式相比,不僅性能上有了顯著提高,而且提供了靈活的啟動方式,對于提高開發(fā)效率,縮短產(chǎn)品的研制周期有非常重要的意義。
參考文獻(xiàn)
[1] TMS320C6678 Multicore Fixed andFloating-Point Digital SignalProcessor
(SPRS691E). TI
Inc. http://www.ti.com.2 014.
[2]Key Stone Architecture DSP BootloaderUser Guide (SPRUGY5C). TI Inc.http://www. ti. com. 2013.
[3]牛金海.TMS320C66x KeyStone架構(gòu)多核DSP入門與實例精解[M],上海交通大學(xué)出版社,2014.