嵌入式系統HAL原理與BSP的實(shí)現方法
2.2 硬件相關(guān)的設備驅動(dòng)程序
BSP另一個(gè)主要功能是硬件相關(guān)的設備驅動(dòng)。與初始化過(guò)程相反,硬件相關(guān)的設備驅動(dòng)程序的初始化和使用通常是一個(gè)從高層到底層的過(guò)程。
盡管BSP中包含硬件相關(guān)的設備驅動(dòng)程序,但是這些設備驅動(dòng)程序通常不直接由BSP使用,而是在系統初始化過(guò)程中由BSP把它們與操作系統中通用的設備 驅動(dòng)程序關(guān)聯(lián)起來(lái),并在隨后的應用中由通用的設備驅動(dòng)程序調用,實(shí)現對硬件設備的操作。設計與硬件相關(guān)的驅動(dòng)程序是BSP設計中另一個(gè)關(guān)鍵環(huán)節。圖4顯示 了調用設備驅動(dòng)程序時(shí)系統各個(gè)層次之間的關(guān)系。
3 設計實(shí)現BSP的方法
3.1 設計實(shí)現BSP的一般方法
因為BSP同時(shí)具有硬件相關(guān)性和操作系統相關(guān)性,是一個(gè)介于硬件與軟件之間的中間層次。因此BSP的開(kāi)發(fā)不僅需要具備一定的硬件知識,例如CPU的控 制、中斷控制器的設置、內存控制器的設置及有關(guān)的總線(xiàn)規范等;同時(shí)還要求掌握操作系統所定義的BSP接口。另外,在BSP的初始化部分通常會(huì )包含一些匯編 代碼,因此還要求對所使用的CPU匯編指令有所了解,例如X86的匯編和PowerPC的匯編指令等;對于某些復雜的BSP還要了解所使用的開(kāi)發(fā)工具,例 如GNU、Diab Data等。
總之,開(kāi)發(fā)BSP要求具備比較全面的軟、硬件知識和必要的編程經(jīng)驗。由于設計實(shí)現的復雜性,在設計特定BSP時(shí)很少從零開(kāi)始,而是采用以下兩種快捷方法。
方法一:以經(jīng)典BSP為參考
在設計BSP時(shí),首先選擇與應用硬件環(huán)境最為相似的參考設計,例如Motorola的ADS系列評估板等。針對這些評估板,不同的操作系統都會(huì )提供完整 的BSP,這些BSP是學(xué)習和開(kāi)發(fā)自己BSP的最佳參考。針對具體應用的特定環(huán)境對參考設計的BSP進(jìn)行必要的修改和增加,就可以完成簡(jiǎn)單的BSP設計。
下面以設計pSOS操作系統的BSP初始化過(guò)程為例。pSOS系統初始化的層次非常清晰,與初始化過(guò)程相對應的是以下三個(gè)文件:
1)init.s :對應于片級初始化;完成CPU的初始化操作,設置CPU的工作狀態(tài);
2)board.c :對應于板級初始化;繼續CPU初始化,并設置CPU以外的硬件設備;
3)sysinit.c :對應于系統級初始化;完成操作系統的初始化,并啟動(dòng)應用程序。
以參考BSP為切入點(diǎn),針對初始化過(guò)程的具體環(huán)節,在對應的文件中進(jìn)行某些參數的修改及功能的增加就可以實(shí)現BSP的系統初始化功能。
因為BSP具有操作系統相關(guān)性,因此,不同的操作系統會(huì )使用不同的文件完成類(lèi)似的初始化操作。
BSP中硬件相關(guān)的設備驅動(dòng)程序隨操作系統的不同而具有比較大的差異,設計過(guò)程中應參照操作系統相應的接口規范。
方法二:使用操作系統提供的BSP模板
除了提供某些評估板的BSP以外,很多操作系統還提供相應的BSP模板(一組需要編寫(xiě)的文件),根據模板的提示也可以逐步完成特定BSP的設計。
相比較而言,第一種方法最為簡(jiǎn)單快捷。因此,在實(shí)際的設計過(guò)程中,通常以第一種方法為主,同時(shí)結合使用第二種方法。
在設計實(shí)現BSP兩部分功能時(shí)應采用以下兩種不同方法:
(1)“自底向上”地實(shí)現BSP中的初始化操作:從片級初始化開(kāi)始到系統級初始化;
(2)“自頂向下”地設計硬件相關(guān)的驅動(dòng)程序:從API開(kāi)始,到操作系統內部的通用設備驅動(dòng)程序,再到BSP內部的硬件相關(guān)的設備驅動(dòng)程序,最后到底層具體的硬件設備。
3.2 BSP設計方法的不足與改進(jìn)
從以上介紹的兩種設計方法可以看出:目前BSP的設計與實(shí)現主要是針對某些特定的文件進(jìn)行修改。這種方法比較原始,它不僅要求設計人員了解BSP的各個(gè) 組成部分及所對應的文件和相關(guān)參數的具體含義,還要求具備比較全面的軟硬件知識。直接修改相關(guān)文件容易造成代碼的不一致性,增加軟件設計上的隱形錯誤,從 而增加系統調試和代碼維護的難度。隨著(zhù)底層硬件功能的日益復雜,開(kāi)發(fā)BSP所涉及的內容也越來(lái)越多。這種原始方法的不足之處也越來(lái)越突出。進(jìn)行BSP設計 方法和工具的創(chuàng )新成為一個(gè)日益突出的問(wèn)題。
解決這個(gè)問(wèn)題的一個(gè)可行辦法是:設計實(shí)現一種具有圖形界面的BSP開(kāi)發(fā)設計向導,由該向導指 導設計者逐步完成BSP的設計和開(kāi)發(fā),并最終由向導生成相應的BSP文件,而不再由設計人員直接對源文件進(jìn)行修改。這樣不僅可以大大縮短BSP的開(kāi)發(fā)周 期,減少代碼不一致性,而且系統排錯、調試以及維護都很簡(jiǎn)單。因此,這種方法是目前嵌入式領(lǐng)域中BSP設計的一個(gè)趨勢和研究方向。但是,由于嵌入式系統硬 件環(huán)境的多樣性,設計向導的實(shí)現仍需解決若干關(guān)鍵問(wèn)題。為此,作者仍將在這一方面作進(jìn)一步研究。
文中提出的方法在華環(huán)公司的寬帶網(wǎng)絡(luò )工程中得到實(shí)踐和應用,并取得了非常良好的應用成果。
評論