摘? 要: 板級支持包(BSP)是嵌入式系統(tǒng)" title="嵌入式系統(tǒng)">嵌入式系統(tǒng)中常用的硬件抽象形式,是介于操作系統(tǒng)和硬件之間的軟件層次,。介紹BSP的功能和特點,并結合工作實踐提出了設計BSP的一般方法;最后針對當前嵌入式系統(tǒng)中BSP的設計方法所面臨的問題提出了可行的解決辦法,。
關鍵詞: 嵌入式系統(tǒng)? 嵌入式實時操作系統(tǒng)(RTOS)? 硬件抽象層(HAL)? 板級支持包(BSP)
?
隨著計算機軟硬件技術的快速發(fā)展,出現(xiàn)了越來越多的便攜設備和智能設備。這些設備中通常包含控制用的CPU和相應的操作系統(tǒng);這類特殊的計算機系統(tǒng)叫做嵌入式實時系統(tǒng),。嵌入式實時系統(tǒng)以其簡潔高效等特點在計算機,、通信等領域中廣泛使用。
由于嵌入式實時系統(tǒng)應用環(huán)境的特殊性,因此在設計實現(xiàn)過程中存在著許多特殊問題,。其中,操作系統(tǒng)及其他系統(tǒng)軟件模塊與硬件之間的接口形式是嵌入式實時系統(tǒng)的主要特征和系統(tǒng)設計過程中的必需環(huán)節(jié),也是影響嵌入式系統(tǒng)應用前景的關鍵問題,。經(jīng)過近些年的發(fā)展,隨著通用嵌入式操作系統(tǒng)技術的日趨成熟和應用的不斷擴大,一種統(tǒng)一的接口形式得到廣泛的認可和應用,這就是通常所說的板級支持包,即BSP。
1 嵌入式系統(tǒng)硬件抽象層的原理
1.1 硬件抽象層的引入
嵌入式實時系統(tǒng)作為一類特殊的計算機系統(tǒng)自底向上包含三個部分,如圖1所示,。
?
?
(1)硬件環(huán)境:是整個嵌入式實時操作系統(tǒng)和實時應用程序" title="應用程序">應用程序運行的硬件平臺;不同的應用通常有不同的硬件環(huán)境;硬件平臺的多樣性是嵌入式系統(tǒng)的一個主要特點,。
(2)嵌入式實時操作系統(tǒng)——RTOS:完成嵌入式實時應用的任務調(diào)度和控制等核心功能,具有內(nèi)核較精簡、可配置,、與高層應用緊密關聯(lián)等特點,。嵌入式操作系統(tǒng)具有相對不變性。
(3)嵌入式實時應用程序:運行于操作系統(tǒng)之上,利用操作系統(tǒng)提供的實時機制完成特定功能的嵌入式" title="的嵌入式">的嵌入式應用,。不同的系統(tǒng)需要設計不同的嵌入式實時應用程序,。
由于嵌入式系統(tǒng)應用的硬件環(huán)境差異較大,因此,如何簡潔有效地使嵌入式系統(tǒng)能夠應用于各種不同的應用環(huán)境是嵌入式系統(tǒng)發(fā)展中所必須解決的關鍵問題。
經(jīng)過不斷的發(fā)展,原先嵌入式系統(tǒng)的三層結構逐步演化成為一種四層結構,。這個新增加的中間層次位于操作系統(tǒng)和硬件之間,包含了系統(tǒng)中與硬件相關的大部分功能,。通過特定的上層接口與操作系統(tǒng)進行交互,向操作系統(tǒng)提供底層的硬件信息;并根據(jù)操作系統(tǒng)的要求完成對硬件的直接操作。由于引入了一個中間層次,屏蔽了底層硬件的多樣性,操作系統(tǒng)不再直接面對具體的硬件環(huán)境,。而是面向由這個中間層次所代表的,、邏輯上的硬件環(huán)境。因此,把這個中間層次叫做硬件抽象層HAL(Hardware Abstraction Layer),。在目前的嵌入式領域中通常也把HAL叫做板級支持包 BSP(Board Support Package),。圖2顯示了引入HAL以后的嵌入式系統(tǒng)結構。BSP的引入大大推動了嵌入式實時操作系統(tǒng)的通用化,從而為嵌入式系統(tǒng)的廣泛應用提供了可能,。
?
?
1.2 BSP的特點與功能
HAL/BSP的提出使通用的嵌入式操作系統(tǒng)及高層的嵌入式應用能夠有效地運行于特定的,、應用相關的硬件環(huán)境之上,使操作系統(tǒng)和應用程序能夠控制和操作具體的硬件設備,完成特定的功能,。因此,在絕大多數(shù)的嵌入式系統(tǒng)中,BSP是一個必不可少的層次。
由于在系統(tǒng)中的特殊位置,因此BSP具有以下主要特點:
(1)硬件相關性
因為嵌入式實時系統(tǒng)的硬件環(huán)境具有應用相關性,所以,作為高層軟件與硬件之間的接口,BSP必須為操作系統(tǒng)提供操作和控制具體硬件的方法,。
(2)操作系統(tǒng)相關性
不同的操作系統(tǒng)具有各自的軟件層次結構,因此,不同的操作系統(tǒng)具有特定的硬件接口形式,。
在實現(xiàn)上,BSP是一個介于操作系統(tǒng)和底層硬件之間的軟件層次,包括了系統(tǒng)中大部分與硬件相關的軟件模塊。在功能上包含兩部分:系統(tǒng)初始化及與硬件相關的設備驅(qū)動,。
2 BSP的設計與實現(xiàn)
為實現(xiàn)上述兩部分功能,設計一個完整的BSP需要完成兩部分工作:
(1)設計初始化過程,完成嵌入式系統(tǒng)的初始化;
(2)設計硬件相關的設備驅(qū)動,完成操作系統(tǒng)及應用程序?qū)唧w硬件的操作,。
2.1 嵌入式系統(tǒng)初始化以及BSP的功能
嵌入式系統(tǒng)的初始化過程是一個同時包括硬件初始化和軟件(主要是操作系統(tǒng)及系統(tǒng)軟件模塊)初始化的過程;而操作系統(tǒng)啟動以前的初始化操作是BSP的主要功能之一。由于嵌入式系統(tǒng)不僅具有硬件環(huán)境的多樣性,同時具有軟件的可配置性,因此,不同的嵌入式系統(tǒng)初始化所涉及的內(nèi)容各不相同,復雜程度也不盡相同,。但是初始化過程總是可以抽象為三個主要環(huán)節(jié),按照自底向上,、從硬件到軟件的次序依次為:片級初始化、板級初始化和系統(tǒng)級" title="系統(tǒng)級">系統(tǒng)級初始化,。
(1)片級初始化:主要完成CPU的初始化,包括設置CPU的核心寄存器和控制寄存器,CPU核心工作模式以及CPU的局部總線模式等,。片級初始化把CPU從上電時的缺省狀態(tài)逐步設置成為系統(tǒng)所要求的工作狀態(tài)。這是一個純硬件的初始化過程,。
(2)板級初始化:完成CPU以外的其他硬件設備的初始化,。除此之外,還要設置某些軟件的數(shù)據(jù)結構和參數(shù),為隨后的系統(tǒng)級初始化和應用程序的運行建立硬件和軟件環(huán)境。這是一個同時包含軟硬件兩部分在內(nèi)的初始化過程,。
(3)系統(tǒng)級初始化:這是一個以軟件初始化為主的過程,主要進行操作系統(tǒng)初始化,。BSP將控制轉(zhuǎn)交給操作系統(tǒng),由操作系統(tǒng)進行余下的初始化操作。包括加載和初始化與硬件無關的設備驅(qū)動程序" title="設備驅(qū)動程序">設備驅(qū)動程序,建立系統(tǒng)內(nèi)存區(qū),加載并初始化其他系統(tǒng)軟件模塊,比如網(wǎng)絡系統(tǒng),、文件系統(tǒng)等;最后,操作系統(tǒng)創(chuàng)建應用程序環(huán)境并將控制轉(zhuǎn)交給應用程序的入口,。
經(jīng)過以上三個層次的操作,嵌入式系統(tǒng)運行所需要的硬件和軟件環(huán)境已經(jīng)進行了正確設置,從這里開始,高層的實時應用程序可以運行了。
需要指出:系統(tǒng)級初始化不是BSP的工作,。但是,系統(tǒng)級初始化成功與否的關鍵在于BSP的前兩個初始化過程中所進行的軟件和硬件的正確設置,而且系統(tǒng)級初始化也是由BSP發(fā)起的,。因此,設計BSP中初始化功能的重點主要集中在前兩個環(huán)節(jié)。圖3顯示了嵌入式系統(tǒng)的初始化過程,。
?
?
2.2 硬件相關的設備驅(qū)動程序
BSP另一個主要功能是硬件相關的設備驅(qū)動,。與初始化過程相反,硬件相關的設備驅(qū)動程序的初始化和使用通常是一個從高層到底層的過程。
盡管BSP中包含硬件相關的設備驅(qū)動程序,但是這些設備驅(qū)動程序通常不直接由BSP使用,而是在系統(tǒng)初始化過程中由BSP把它們與操作系統(tǒng)中通用的設備驅(qū)動程序關聯(lián)起來,并在隨后的應用中由通用的設備驅(qū)動程序調(diào)用,實現(xiàn)對硬件設備的操作,。設計與硬件相關的驅(qū)動程序是BSP設計中另一個關鍵環(huán)節(jié),。圖4顯示了調(diào)用設備驅(qū)動程序時系統(tǒng)各個層次之間的關系。
?
?
3 設計實現(xiàn)BSP的方法
3.1 設計實現(xiàn)BSP的一般方法
因為BSP同時具有硬件相關性和操作系統(tǒng)相關性,是一個介于硬件與軟件之間的中間層次,。因此BSP的開發(fā)不僅需要具備一定的硬件知識,例如CPU的控制,、中斷控制器的設置、內(nèi)存控制器的設置及有關的總線規(guī)范等;同時還要求掌握操作系統(tǒng)所定義的BSP接口,。另外,在BSP的初始化部分通常會包含一些匯編代碼,因此還要求對所使用的CPU匯編指令有所了解,例如X86的匯編和PowerPC的匯編指令等;對于某些復雜的BSP還要了解所使用的開發(fā)工具,例如GNU,、Diab Data等。
總之,開發(fā)BSP要求具備比較全面的軟,、硬件知識和必要的編程經(jīng)驗,。由于設計實現(xiàn)的復雜性,在設計特定BSP時很少從零開始,而是采用以下兩種快捷方法。
方法一:以經(jīng)典BSP為參考
在設計BSP時,首先選擇與應用硬件環(huán)境最為相似的參考設計,例如Motorola的ADS系列評估板等,。針對這些評估板,不同的操作系統(tǒng)都會提供完整的BSP,這些BSP是學習和開發(fā)自己BSP的最佳參考,。針對具體應用的特定環(huán)境對參考設計的BSP進行必要的修改和增加,就可以完成簡單的BSP設計。
下面以設計pSOS操作系統(tǒng)的BSP初始化過程為例,。pSOS系統(tǒng)初始化的層次非常清晰,與初始化過程相對應的是以下三個文件:
1)init.s :對應于片級初始化;完成CPU的初始化操作,設置CPU的工作狀態(tài);
2)board.c :對應于板級初始化;繼續(xù)CPU初始化,并設置CPU以外的硬件設備;
3)sysinit.c :對應于系統(tǒng)級初始化;完成操作系統(tǒng)的初始化,并啟動應用程序,。
以參考BSP為切入點,針對初始化過程的具體環(huán)節(jié),在對應的文件中進行某些參數(shù)的修改及功能的增加就可以實現(xiàn)BSP的系統(tǒng)初始化功能。
因為BSP具有操作系統(tǒng)相關性,因此,不同的操作系統(tǒng)會使用不同的文件完成類似的初始化操作,。
BSP中硬件相關的設備驅(qū)動程序隨操作系統(tǒng)的不同而具有比較大的差異,設計過程中應參照操作系統(tǒng)相應的接口規(guī)范,。
方法二:使用操作系統(tǒng)提供的BSP模板
除了提供某些評估板的BSP以外,很多操作系統(tǒng)還提供相應的BSP模板(一組需要編寫的文件),根據(jù)模板的提示也可以逐步完成特定BSP的設計。
相比較而言,第一種方法最為簡單快捷,。因此,在實際的設計過程中,通常以第一種方法為主,同時結合使用第二種方法,。
在設計實現(xiàn)BSP兩部分功能時應采用以下兩種不同方法:
(1)“自底向上”地實現(xiàn)BSP中的初始化操作:從片級初始化開始到系統(tǒng)級初始化;
(2)“自頂向下”地設計硬件相關的驅(qū)動程序:從API開始,到操作系統(tǒng)內(nèi)部的通用設備驅(qū)動程序,再到BSP內(nèi)部的硬件相關的設備驅(qū)動程序,最后到底層具體的硬件設備。
3.2 BSP設計方法的不足與改進
從以上介紹的兩種設計方法可以看出:目前BSP的設計與實現(xiàn)主要是針對某些特定的文件進行修改,。這種方法比較原始,它不僅要求設計人員了解BSP的各個組成部分及所對應的文件和相關參數(shù)的具體含義,還要求具備比較全面的軟硬件知識,。直接修改相關文件容易造成代碼的不一致性,增加軟件設計上的隱形錯誤,從而增加系統(tǒng)調(diào)試和代碼維護的難度。隨著底層硬件功能的日益復雜,開發(fā)BSP所涉及的內(nèi)容也越來越多,。這種原始方法的不足之處也越來越突出,。進行BSP設計方法和工具的創(chuàng)新成為一個日益突出的問題。
解決這個問題的一個可行辦法是:設計實現(xiàn)一種具有圖形界面的BSP開發(fā)設計向?qū)?由該向?qū)е笇гO計者逐步完成BSP的設計和開發(fā),并最終由向?qū)上鄳腂SP文件,而不再由設計人員直接對源文件進行修改,。這樣不僅可以大大縮短BSP的開發(fā)周期,減少代碼不一致性,而且系統(tǒng)排錯,、調(diào)試以及維護都很簡單。因此,這種方法是目前嵌入式領域中BSP設計的一個趨勢和研究方向,。但是,由于嵌入式系統(tǒng)硬件環(huán)境的多樣性,設計向?qū)У膶崿F(xiàn)仍需解決若干關鍵問題,。為此,作者仍將在這一方面作進一步研究。
文中提出的方法在華環(huán)公司的寬帶網(wǎng)絡工程中得到實踐和應用,并取得了非常良好的應用成果,。
?
參考文獻
1 “Understanding and Developing Board-Support Packages”Chapter 1 of 《pSOSystem Advanced Topics》,pSOSystem Documents. Wind River systems.