BSP是Board Support Package的縮寫。該術語一般用於嵌入式領域,主要指在開發嵌人式應用時系統開發商提供的各類粗動支持庫。在嵌人式領域人們對BSP有各類不一樣的理解: 編程
(1) 操做系統的驅動程序。嵌人式系統提供商的權威— WindRiver公司對BSP的理解偏向因而OS的驅動程序(從其BSP的文檔中能夠看出),由於嵌人式系統中的各類設備的確名目擠多,所以將BSP定位於OS的驅動的確有必定的道理.服務器
(2) 驅動程序。對於認爲BSP就是驅動程序的人來說,他們一般接觸的是嵌人式系統提供商提供的某種應用解決方案的應用系統(total solution)。在這種開發系統中,BSP徹底有理由被認爲是全部驅動程序,由於開發人員沒有必要本身去開發驅動程序,而只是驗證驅動程序在本身的系統中是否正確便可. 網絡
(3) HAL(HardwareA bstractL ayer)。對於開發嵌人式OS的人來說,傾向於將BSP當作是對硬件平臺的抽象層(HAW和處理器的馭動程序更恰當. 函數
實際上各類理解都只是側重於某個方面。因爲每一個嵌人式系統提供商都根據本身的操做系統而提出對BSP的不一樣理解,所以,在涉及到BSP的具體涵義時,人們每每有一種似是而非的感受.實際是各類理解都有其道理,但因爲出發點不一樣,對BSP的理解都有失全面甚至有錯誤的地方,這也是初學者容易混淆的緣由。對於進行硬件和軟件開發的人員,第三種理解比較合適,後面的分析也是創建在這個基礎之上的。這裏經過 BSP(BoardS upport Package)和BIOS(BasicI nputa ndO utputS ystem)的對比,來講明板級支持包的功能。BSP說得簡單一點,就是一段啓動代碼,與計算機主板的BIOS差很少.提供的功能卻有較大的差異。咱們都知道,在通用8051等系列單片機開發的過程當中,要有小段程序設堆棧指針、軟復位和中斷屏蔽等等能夠把這短程序稱爲它的BSP,實時操做系統的BSP相對複雜一點,但一般也是設t堆棧指針,創建中斷向量表,初始化寄存器(控制外圍器件如DRAM和EDO RAM條,控制I/O Q的寄存器、片選信號等),配裏地址空間以及系統啓動方式。BIOS是微機的基本輸人輸出系統,其內容集成在微機主板上的一個ROM芯片上,主要保存着有關微機系統最重要的基本輸入輸出程序,如系統設置信息、開機上電自檢程序和系統啓動自舉程序等。BIOS中斷服務程序實質上是微機系統中軟件與硬件之間的一個可編程接口,主要用於程序軟件功能與微機硬件之間的鏈接。例如,Wind-98 對軟驅、光驅和硬盤等管理及中斷的設置等服務和程序。BIOS系統設置程序,微機部件配置記錄是放在一塊可的CMOS RAM芯片 中的,主要保存着系統的基本悄況、CPU特性和軟硬盤驅動器等部件的信息,能夠對其各項參數進行設It. BIOS系統啓動自舉程序,系統完成POST自檢後,ROM BIOS就首先按照系統CMOS設置中保存的啓動順序搜索軟硬盤驅動器及CD-ROM。網絡服務器等有效地啓動驅動器,讀人操做系統引導記錄而後將系統控制權交給引導記錄,並由引導記錄來完成系統的順序啓動,實時操做系統的BSP就至關於PC的BIOS通常來講,對不一樣的微處理器板以及不一樣的RTOS時,就應該配置不一樣的BSP, BSP能夠是已經作好了的,不須要開發人員去關心寄存器設置的細節。 操作系統
固然根據實際的要求用戶也能夠改寫BSP來加人本身的特定功能o BSP可針對不一樣的硬件作不一樣的調整,相應於PC的BIOS.它完成對硬件的初始化工做,執行完後再將執行權交給RTOS。在BSP中,只須要對與硬件相關的寄存器(主要是DRAM,SD RAM和片選)及與中斷相關的寄存器進行正確配Y便可.BSP程序越簡單越好,能放在主程序中初始化的功能盡A不要放在其中,BSP配I程序只要能保證系統正常啓動便可.大部分RTOS帶有針對不一樣徽處理器的BSP程序,用戶只要稍作修改便可移植到本身的開發應用中設備驅動程序(Drivers)指用於處理、管理硬件控制(controller)的代碼。設備馭動程序是將基礎創建在具體的操做系統之上,而不是某種類型的處理器(CPU)(這很重要)。實際運用中,人們可能選擇不一樣的目標硬件(CPU),如PowerPC,A RM,X 86,而且配f不一樣的操做系統.即便對於同一種類型的目標硬件,不一樣的操做系統也要編寫不一樣的BSP。對於驅動程序,其實是在操做系統的層次上對不一樣的設備控制器所寫的代碼。 指針
實時操做系統的馭動程序與PC的相相似eR TOS一般在BSP定義了一套本身的驅動程序接口,根據這些接口寫相應的驅動程序。固然RTOS與硬件較緊密,靈活性較大,開發人員徹底能夠拋開它提供的接口而本身編寫駱動程序.這同直接在C代碼中調用BIOS提供的底層功能(如BIOS中斷)編寫程序相似。BSP一般能夠認爲是基於硬件平臺的。當開發某個平臺且與硬件相關的程序時,每每不得不從設置某個寄存器的某個位開始編程。在嵌人式領城,這種狀況更爲明顯,幾乎全部的設備控制和各類協議控制都在同一個嵌人式CPU核當中,很是有利於對CPU核和設備進行抽象.若是能對CPU核和設備的各類控制進行抽象,則人們在移植OS或者開發馭動程序時,就沒有必要對CPU進行很是深刻的瞭解,沒必要要了解某個寄存器的某個位是控制什麼的,也沒有必要了解怎樣初始化某個控制寄存器等等。所以,BSP是一種能爲程序開發人員提供對硬件進行描述性操做的開發支律庫。描述性操做是指在控制硬件時只需知道要完成什麼,而不須要知道如何去完成,每一個操做都是一些單一的動做.例如:對於設置一個串口的波特率,只須要知道是哪一個申口,波特率是多少,而不須要知道要寫哪個寄存器以及如何寫等。在利用BSP編寫驅動程序時,編程人員只須要了解該驅動程序的初始化順序以及初始化的內容,而不須要了解初始化的具體細節就能完成驅動程序。能夠大大地提升工做效率。而且對於硬件的具體細節設1l`是在驅動程序中最容易出錯的地方,而利用BSP支撐庫則能夠大大地減小出堵的可能性。在BSP支排庫中,除了包含對硬件的描述性操做部分的代碼外,還包含了對目標板的初始化部分、中斷管理部分以及一些簡單的驅動程序程序單元。這樣的BSP能夠不依賴於任何操做系統和駱動程序,可是能夠做爲操做系統和驅動程序的開發支排庫,能夠很是方便地移植或者開發操做系統與驅動程序。在最好的狀況下,操做系統與駱動程序的移植只須要更換相應平臺下的BSP支排庫便可完成移植。BSP是對目標系統的軟件支持,是一些硬件具體的函數的集合,主要完成下面的功能: 接口
(1) 在系統啓動時,對目標系統進行硬件初始化; 內存
(2) 提供對目標系統設備的接口.如時鐘、Ethernet控制器、串行芯片和SCSI控制器在PSOS 中,對於不一樣的開發系統,其不一樣的特性在板級支持包BSP的bsp.h 文件中做了具體的定義。例如基本特性,包括處理器類型BSP_CPUFAMILY(PoweiTC,68000,X86和1960等),具體的處理器(PPC604和PPC603等),還有浮點支持BSP_FPU,字符模式選擇BSP間的開始地址。其它的如串行通道特性、LAN接口特性ENDIAN等,BSP_RAM_BASE RAM空、共享存儲器通訊以及板級支持包參數設定的缺省值。bsp.h ,bspcfg.h 和bspcfg.c 文件提供了在應用程序編譯時對某些BSP特性進行配置是必要的。BSP進行配置的選項和實現。應用程序對例如,BSP_ LANI代表BSP是否須要LAN驅動,能夠設置爲是或否。這個參數會被多個文件使用,包括是否編譯和創建LAN驅動,讓操做系統支持LAN操做目標系統在復位後,要作的第一項工做就是對硬件設備進行初始化,執行Hwdinit函數。該函數完成在C中沒法進行的初始化任務,Initboard函數在C代碼繼續板級初始化,這一般被稱爲硬件初始化(hardware initialization),相應的sysinit函數完成非硬件初始化任務(software initialization)。在Hwdinit中BSP中對具休的處理器配置步驟以下 開發
(1) 設置MSR,包括校驗、優先級模式、禁止中斷、禁止地址轉換。即extern unsigned long ppcMSRrd(void); 文檔
(2 )給減計數器處置,調用ppcDECwr,把值寫人DE(,即exter nvoid ppcDECwr(unsignedl ongv alue);
(3) 禁止指令和數據Caches,即exter nunsigned long SysDcachelnhibit(void); exter nvoid SysIcacheInhibit(void);
(4) 初 始 化核心寄存器,包括
MachineS tatusR egister( MSR) //機器校驗使能,中斷可恢復
Instruction Support Control Register (ICTRL) / /開 發 端 口捕 獲 使能
Debug Enable Register (D ER O) // 關 閉調 試 中 斷
Interrupt Cause Register( ICR ) / /關 閉中 斷 事 件
Internal Memeory MapRegister (IMMR ) // 設 裏 內部 存 儲 區 地 址
System Interface Unit (SIU ) Module Configuration Register ( SIUMCR )Reset Status Register RSR) //復 位控制
(5)使能減法計數器。
(6)初始化片選寄存器。(對Flash內存)
(7)肯定DRAM的類型,設UPMX初始化表,即extern HdwInitDRAM(void)爲了經過 UPMX訪問外部不一樣結構和速率DRAM,生成相應的初始化表,可使用Motorola提供的MCUinit軟件來生成。
(8)把 Data Section從FlashROM拷貝到RAM。根據硬件配宜,這是可選的,一般不做.最後 , 根 據具體的目標系統設It合理的系統參數,經過棋板創建設備接口,編寫編譯文件和連接文件把BSP和操做系統連接起來。