專利名稱::Pc架構(gòu)嵌入式系統(tǒng)中上電自檢的設(shè)計(jì)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算機(jī)開發(fā)領(lǐng)域,尤其是一種PC架構(gòu)嵌入式系統(tǒng)中上電自檢的設(shè)計(jì)方法。
背景技術(shù):
:嵌入式計(jì)算機(jī)系統(tǒng)隨著其應(yīng)用方式不同,可有不同的體系結(jié)構(gòu)形式。PC架構(gòu)的嵌入式計(jì)算機(jī),因其采用與標(biāo)準(zhǔn)PC相同的硬件結(jié)構(gòu)、軟件操作系統(tǒng)和軟件開發(fā)平臺(tái),開發(fā)方便,應(yīng)用程序設(shè)計(jì)資源豐富,因此在嵌入式系統(tǒng)中占據(jù)越來越大的份額,尤其在工業(yè)控制和軍事領(lǐng)域得到了廣泛的應(yīng)用。不同于沒有操作系統(tǒng)、功能單一的消費(fèi)類電子產(chǎn)品,PC架構(gòu)的嵌入式計(jì)算機(jī)的結(jié)構(gòu)由PC(個(gè)人用計(jì)算機(jī))而來,其功能復(fù)雜,初始化硬件和引導(dǎo)操作系統(tǒng)仍然由BIOS(基本輸入輸出系統(tǒng))來完成。但一個(gè)嵌入式系統(tǒng)的BIOS并不需要像通用PCBIOS那樣具有那么多的靈活性,因?yàn)橥ǔK鼉H需處理某種特定的硬件配置方案。因此,嵌入式BIOS是在傳統(tǒng)BIOS的基礎(chǔ)上,移除了許多嵌入式平臺(tái)非必要的功能,為PC架構(gòu)的嵌入式計(jì)算機(jī)系統(tǒng)所定制的基本輸入輸出系統(tǒng)。在這一類嵌入式計(jì)算機(jī)的開發(fā)過程中,BIOS的配置是一個(gè)非常重要的環(huán)節(jié),決定著整個(gè)嵌入式產(chǎn)品的開發(fā)周期長(zhǎng)短和上市時(shí)間。嵌入式BIOS與傳統(tǒng)BIOS一樣,其工作可以由兩部分來概括POST(PostOnSelfTest上電自檢)流程和軟件中斷服務(wù)例程。軟件中斷服務(wù)例程是為操作系統(tǒng)或應(yīng)用系統(tǒng)提供服務(wù)的程序,這是一類通用的程序,對(duì)于任何PC架構(gòu)的系統(tǒng)來說,它們具有相同的程序、接口和功能。POST流程通常稱為上電自檢,它負(fù)責(zé)上電后對(duì)系統(tǒng)所有硬件和寄存器的檢測(cè)和初始化工作,最后調(diào)用INT19H裝入引導(dǎo)設(shè)備的主引導(dǎo)扇區(qū),然后將控制權(quán)交給主引導(dǎo)程序,引導(dǎo)操作系統(tǒng)。因此,BIOS的配置過程實(shí)際上就是修改POST流程的過程。參見圖1,本發(fā)明提供了詳細(xì)的POST流程以供參考POST入口;Chipset初始化;低64KB內(nèi)存檢測(cè);建立堆棧;CPU參數(shù)設(shè)置;SuperI/O初始化;8254(定時(shí)器)、DMA(直接內(nèi)存訪問控制器)測(cè)試;鍵盤控制器測(cè)試及初始化;定時(shí)器、DMA和8259(中斷控制器)初始化;基本內(nèi)存測(cè)試;中斷向量表初始化;即插即用設(shè)備初始化;VGA(視頻圖形適配器)BIOS初始化;擴(kuò)展內(nèi)存檢測(cè);RTC(實(shí)時(shí)時(shí)鐘)檢測(cè)和標(biāo)準(zhǔn)接口初始化;掃描擴(kuò)展ROM;串、并口檢測(cè)和標(biāo)準(zhǔn)接口初始化;軟盤、硬盤檢測(cè)和標(biāo)準(zhǔn)接口初始化;時(shí)鐘測(cè)試;調(diào)用INT19H引導(dǎo)操作系統(tǒng)。在采用PC架構(gòu)的計(jì)算機(jī)系統(tǒng)中,造成BIOS差異的原因,除了CPU規(guī)格和系統(tǒng)配置不同外,構(gòu)成系統(tǒng)的Chipset(芯片組)和SuperI/O(超級(jí)輸入輸出)是最關(guān)鍵的因素,主板的不同功能是通過設(shè)置Chipset和SuperI/O中的寄存器來實(shí)現(xiàn)的,這類寄存器至少有幾十個(gè)。具體的說,Chipset初始化部分的工作則包括Cache寄存器初始化、Shadow寄存器初始化、內(nèi)存類型檢測(cè)及內(nèi)存寄存器初始化、ISA檢測(cè)及ISA配置寄存器初始化、PCI配置寄存器初始化等;SuperI/O初始化部分的工作包括軟驅(qū)I/O初始化、鍵盤I/O初始化、RTCI/O初始化、串口I/O初始化、并口I/O初始化等等。因此Chipset和SuperI/O部分的POST配置任務(wù)非常繁重。即使是為同一代CPU系列所開發(fā)的BIOS,由于Chipset和SuperI/O沒有統(tǒng)一的國(guó)際標(biāo)準(zhǔn),因此各廠家在設(shè)計(jì)時(shí)即使對(duì)同一功能的寄存器其設(shè)置也各不相同?,F(xiàn)在的BIOSPOST流程均是針對(duì)某一具體的硬件配置設(shè)計(jì)的,如果需要為不同嵌入式系統(tǒng)配置BIOS時(shí),需要大量地修改POST流程中Chipset和SuperI/O有關(guān)的源程序,甚至可能對(duì)整個(gè)程序的結(jié)構(gòu)要進(jìn)行調(diào)整,這樣不僅使得BIOS的開發(fā)與配置工作量相當(dāng)大、耗費(fèi)的時(shí)間非常長(zhǎng),而且容易出錯(cuò)。如何根據(jù)嵌入式系統(tǒng)的特點(diǎn),修改POST流程結(jié)構(gòu),使BIOS的配置更加快速、安全,縮短開發(fā)周期,盡量減少人力,成為目前有待解決的重要課題。
發(fā)明內(nèi)容本發(fā)明的目的是提供一種令嵌入式BIOS易于配置的PC架構(gòu)嵌入式系統(tǒng)中上電自檢的設(shè)計(jì)方法。為達(dá)到上述目的,本發(fā)明設(shè)計(jì)了以下步驟(1)按照Chipset和SuperI/O初始化信息的數(shù)據(jù)類型和操作類型定義數(shù)據(jù)結(jié)構(gòu),按定義將初始化信息格式化為初始化數(shù)據(jù);(2)將初始化數(shù)據(jù)存放在初始化數(shù)據(jù)表格區(qū);(3)初始化數(shù)據(jù)表格區(qū)中的每組數(shù)據(jù)表格起始地址采用動(dòng)態(tài)分配,設(shè)置初始化數(shù)據(jù)向量表順序存放每組數(shù)據(jù)表格的入口地址;(4)按初始化信息的數(shù)據(jù)結(jié)構(gòu)設(shè)置相應(yīng)的初始化子程序。而且,設(shè)置實(shí)現(xiàn)初始化數(shù)據(jù)和初始化子程序之間映射的初始化子程序向量表。而且,所述數(shù)據(jù)結(jié)構(gòu)包括類型編碼、地址、數(shù)據(jù),類型編碼由數(shù)據(jù)類型代碼和操作類型代碼組合形成。而且,初始化數(shù)據(jù)表格區(qū)中的初始化數(shù)據(jù)按POST執(zhí)行順序相應(yīng)存放。本發(fā)明拋棄傳統(tǒng)BIOS的POST流程設(shè)計(jì)方法,將POST流程的檢測(cè)和初始化代碼與初始化數(shù)據(jù)分離,以簡(jiǎn)化配置過程對(duì)核心代碼的維護(hù),有效地提高嵌入式BIOS的配置速度,縮短了BIOS的開發(fā)周期,從而使配置工作更加簡(jiǎn)單高效,有助于降低配置修改風(fēng)險(xiǎn),提高嵌入式系統(tǒng)的系統(tǒng)運(yùn)行安全性。圖1POST流程圖;圖2本發(fā)明實(shí)施例示意圖;圖3本發(fā)明實(shí)施例類型編碼定義原理圖;圖4本發(fā)明實(shí)施例數(shù)據(jù)類型定義原理圖;圖5本發(fā)明實(shí)施例操作類型定義原理圖;圖6本發(fā)明實(shí)施例初始化程序流程圖。具體實(shí)施例方式參見圖2~6,本發(fā)明提供了一種PC架構(gòu)嵌入式系統(tǒng)中POST的結(jié)構(gòu)化設(shè)計(jì)方法,由以下步驟組成(1)按照Chipset和SuperI/O初始化信息的數(shù)據(jù)類型和操作類型定義數(shù)據(jù)結(jié)構(gòu),按定義將初始化信息格式化為初始化數(shù)據(jù);(2)將初始化數(shù)據(jù)存放在初始化數(shù)據(jù)表格區(qū);(3)初始化數(shù)據(jù)表格區(qū)中的每組數(shù)據(jù)表格起始地址采用動(dòng)態(tài)分配,設(shè)置初始化數(shù)據(jù)向量表順序存放每組數(shù)據(jù)表格的入口地址;(4)按初始化信息的數(shù)據(jù)結(jié)構(gòu)設(shè)置相應(yīng)的初始化子程序。POST流程實(shí)際上是由一系列的檢測(cè)工作和一些把特定的數(shù)據(jù)寫入指定硬件寄存器的指令序列來組成的。除了Chipset和SuperI/O的初始化,以及少量有關(guān)CPU的參數(shù)設(shè)置外,其它過程都是對(duì)PC標(biāo)準(zhǔn)部件的操作,在對(duì)不同平臺(tái)的BIOS進(jìn)行配置時(shí),對(duì)標(biāo)準(zhǔn)部件的初始化是不必修改的,配置過程實(shí)際上就是針對(duì)Chipset和SuperI/O初始化部份的重新設(shè)計(jì)。本發(fā)明首先通過對(duì)BIOS核心代碼的分析,將初始化信息進(jìn)行抽象處理,以便系統(tǒng)化標(biāo)準(zhǔn)化的存放處理Chipset和SuperI/O初始化信息,簡(jiǎn)化PC架構(gòu)的嵌入式系統(tǒng)BIOS配置中的程序修改工作。由此,本發(fā)明根據(jù)Chipset和SuperI/O初始化信息的數(shù)據(jù)類型和操作類型設(shè)計(jì)出數(shù)據(jù)結(jié)構(gòu)。具體實(shí)施時(shí)按照數(shù)據(jù)和操作進(jìn)行分類設(shè)計(jì),其中,數(shù)據(jù)可以分為三種類型(8位、16位、32位),操作可以分為六種類型(I/O直接地址全設(shè)置、I/O直接地址按位設(shè)置、通過I/O索引地址全設(shè)置、通過I/O索引地址按位設(shè)置、存儲(chǔ)器直接地址全設(shè)置、存儲(chǔ)器直接地址按位設(shè)置)。然后按數(shù)據(jù)結(jié)構(gòu)將初始化信息格式化成初始化數(shù)據(jù),數(shù)據(jù)類型和操作類型的組合共有18種可能,因此,系統(tǒng)BIOS代碼段要提供18種相應(yīng)的初始化子程序,對(duì)每段初始化數(shù)據(jù)進(jìn)行處理。格式化后將初始化數(shù)據(jù)存放在初始化數(shù)據(jù)表格區(qū),為了節(jié)約存儲(chǔ)空間,初始化數(shù)據(jù)表格區(qū)中的每組數(shù)據(jù)表格起始地址采用動(dòng)態(tài)分配,通過初始化數(shù)據(jù)向量表來得到這組數(shù)據(jù)表格在內(nèi)存中的絕對(duì)地址。最后,在系統(tǒng)開始運(yùn)行時(shí),POST流程代碼操作,由初始化子程序處理通過初始化數(shù)據(jù)向量表映射的初始化數(shù)據(jù)。為了準(zhǔn)確進(jìn)行初始化處理,本發(fā)明設(shè)置實(shí)現(xiàn)初始化數(shù)據(jù)和初始化子程序之間映射的初始化子程序向量表。初始化子程序的序號(hào)必須與類型編碼一致,通過初始化子程序向量表,POST流程調(diào)用初始化子程序?qū)Σ煌僮黝愋秃蛿?shù)據(jù)類型的初始化數(shù)據(jù)進(jìn)行處理。通過初始化數(shù)據(jù)向量表和初始化子程序向量表,實(shí)現(xiàn)了POST流程的程序代碼和數(shù)據(jù)的完全分離,檢測(cè)和初始化代碼在程序代碼區(qū),初始化數(shù)據(jù)在數(shù)據(jù)區(qū),這樣對(duì)于不同的配置,只需修改初始化數(shù)據(jù)向量表和初始化數(shù)據(jù)表格區(qū),不必再對(duì)初始化代碼進(jìn)行修改。具體實(shí)施時(shí)初始化子程序向量表可以預(yù)留一些單元,一方面是為了簡(jiǎn)化向量表的查詢,另一方面也是留待以后擴(kuò)充新的子程序。為了提供能夠完整表達(dá)信息類型的數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)包括類型編碼、地址、數(shù)據(jù),類型編碼由數(shù)據(jù)類型代碼和操作類型代碼組合形成。在具體實(shí)施中,為便于處理,可將數(shù)據(jù)類型和操作類型組合為一個(gè)字節(jié),形成類型編碼,而隨后定義的所有數(shù)據(jù)結(jié)構(gòu)都是由類型編碼加上地址和數(shù)據(jù)組成。本發(fā)明實(shí)施例的類型編碼定義第0~3位為操作類型(0000表示I/O直接地址全設(shè)置、0001表示I/O直接地址按位設(shè)置、0010表示通過I/O索引地址全設(shè)置、0011表示通過I/O索引地址按位設(shè)置、0100表示存儲(chǔ)器直接地址全設(shè)置、0101表示存儲(chǔ)器直接地址按位設(shè)置),第4、5位為數(shù)據(jù)類型(00表示8位、01表示16位、10表示32位)。為了高效條理地進(jìn)行POST流程設(shè)計(jì),初始化數(shù)據(jù)表格區(qū)中的初始化數(shù)據(jù)按POST執(zhí)行順序相應(yīng)存放。每個(gè)不同應(yīng)用的系統(tǒng)雖然其配置不同,采用不同的Chipset和SuperI/O,由于采用的PC架構(gòu)系統(tǒng)的存儲(chǔ)器及標(biāo)準(zhǔn)I/O的定義示相同的,所以POST的執(zhí)行順序是一致的,在設(shè)計(jì)中將執(zhí)行順序固定,按定義將初始化數(shù)據(jù)格式化后,根據(jù)POST的順序存放在初始化數(shù)據(jù)表格區(qū),有助于建立易懂、易用、修改方便、執(zhí)行穩(wěn)定的設(shè)計(jì)標(biāo)準(zhǔn)。由此,初始化數(shù)據(jù)向量表中順序存放的是按POST執(zhí)行順序進(jìn)行初始化的數(shù)據(jù)表格的入口地址,例如本發(fā)明實(shí)施例初始化數(shù)據(jù)向量表中存放的各表格入口地址是固定存放的,如第一次初始化表格入口地址固定存放在0FA00:0H處,第二次初始化表格入口地址固定存放在0FA00:2H處,第N次初始化表格入口地址類推存放在0FA00:2nH處。初始化數(shù)據(jù)向量表位于0FA00H段開始處。按照本發(fā)明的POST流程結(jié)構(gòu)化設(shè)計(jì)方法,本發(fā)明實(shí)施例的嵌入式計(jì)算機(jī)系統(tǒng)BIOS包括有系統(tǒng)BIOS代碼部分、初始化數(shù)據(jù)表格區(qū)(存放SuperI/O_datal_table、Chipset_datal_table、Chipset_datal_table等以表格形式存放的數(shù)據(jù))、初始化數(shù)據(jù)向量表(存放分別指向初始化數(shù)據(jù)表格區(qū)所存數(shù)據(jù)的各項(xiàng)入口地址)等。系統(tǒng)BIOS代碼部分包括軟件中斷服務(wù)例程、POST流程的各項(xiàng)標(biāo)準(zhǔn)部件檢測(cè)和初始化工作,以及對(duì)Chipset和SuperI/O的各項(xiàng)檢測(cè)和調(diào)用初始化程序工作(初始化子程序向量表也在其中)。在BIOS的POST流程代碼進(jìn)行了如圖2的結(jié)構(gòu)化設(shè)計(jì)之后,為不同的平臺(tái)配置嵌入式BIOS時(shí),設(shè)計(jì)人員只需按本發(fā)明定義的數(shù)據(jù)結(jié)構(gòu),將該平臺(tái)的Chipset和SuperI/O數(shù)據(jù)進(jìn)行處理存入初始化數(shù)據(jù)表格區(qū),并修改對(duì)應(yīng)的初始化數(shù)據(jù)向量表。當(dāng)系統(tǒng)上電后,BIOS按POST流程進(jìn)行各部件的檢測(cè)和初始化,當(dāng)進(jìn)行到Chipset和SupurI/O部件時(shí),程序根據(jù)初始化順序,由初始化程序調(diào)用相應(yīng)的初始化子程序?qū)Τ跏蓟瘮?shù)據(jù)進(jìn)行處理,完成對(duì)Chipset和SupurI/O部件的初始化,接著繼續(xù)進(jìn)行各標(biāo)準(zhǔn)部件的檢測(cè)和初始化,直至引導(dǎo)操作系統(tǒng),完成BIOS的前臺(tái)工作。這樣,就實(shí)現(xiàn)了不修改POST代碼,只修改數(shù)據(jù),快速、安全配置BIOS的目的。本發(fā)明提供了初始化程序流程以便實(shí)施如圖6中所示,進(jìn)入初始化程序入口后,開始讀初始化數(shù)據(jù)第一項(xiàng)——類型編碼(AL),判斷是否為OFFH,這是表格結(jié)束標(biāo)志,結(jié)果為是則返回,結(jié)果為否則根據(jù)類型編碼調(diào)用相應(yīng)的初始化子程序,該子程序執(zhí)行完后返回繼續(xù)進(jìn)行下一項(xiàng)初始化。本發(fā)明實(shí)施例的初始化子程序?yàn)樗x的數(shù)據(jù)結(jié)構(gòu)而設(shè)計(jì),然后根據(jù)Chipset硬件的具體初始化要求進(jìn)行處理對(duì)Chipset的寄存器尋址,讀出Chipset的寄存器存儲(chǔ)數(shù)據(jù),屏蔽不需修改的數(shù)據(jù)位,對(duì)需要修改的數(shù)據(jù)位修改操作并由此對(duì)Chipset的寄存器進(jìn)行初始化設(shè)置,然后返回初始化程序。權(quán)利要求1.一種PC架構(gòu)嵌入式系統(tǒng)中上電自檢的設(shè)計(jì)方法,其特征在于包括以下步驟,(1)按照Chipset和SuperI/O初始化信息的數(shù)據(jù)類型和操作類型定義數(shù)據(jù)結(jié)構(gòu),按定義將初始化信息格式化為初始化數(shù)據(jù);(2)將初始化數(shù)據(jù)存放在初始化數(shù)據(jù)表格區(qū);(3)初始化數(shù)據(jù)表格區(qū)中的每組數(shù)據(jù)表格起始地址采用動(dòng)態(tài)分配,設(shè)置初始化數(shù)據(jù)向量表順序存放每組數(shù)據(jù)表格的入口地址;(4)按初始化信息的數(shù)據(jù)結(jié)構(gòu)設(shè)置相應(yīng)的初始化子程序。2.如權(quán)利要求1所述的設(shè)計(jì)方法,其特征在于設(shè)置實(shí)現(xiàn)初始化數(shù)據(jù)和初始化子程序之間映射的初始化子程序向量表。3.如權(quán)利要求1或2所述的設(shè)計(jì)方法,其特征在于所述數(shù)據(jù)結(jié)構(gòu)包括類型編碼、地址、數(shù)據(jù),類型編碼由數(shù)據(jù)類型代碼和操作類型代碼組合形成。4.如權(quán)利要求1或2所述的設(shè)計(jì)方法,其特征在于初始化數(shù)據(jù)表格區(qū)中的初始化數(shù)據(jù)按POST執(zhí)行順序相應(yīng)存放。5.如權(quán)利要求3所述的結(jié)構(gòu)化設(shè)計(jì)方法,其特征在于初始化數(shù)據(jù)表格區(qū)中的初始化數(shù)據(jù)按POST執(zhí)行順序相應(yīng)存放。全文摘要本發(fā)明公開了一種PC架構(gòu)嵌入式系統(tǒng)中上電自檢的設(shè)計(jì)方法,其特征在于由以下步驟組成,(1)按照Chipset和SuperI/O初始化信息的數(shù)據(jù)類型和操作類型定義數(shù)據(jù)結(jié)構(gòu),按定義將初始化信息格式化為初始化數(shù)據(jù);(2)將初始化數(shù)據(jù)存放在初始化數(shù)據(jù)表格區(qū);(3)初始化數(shù)據(jù)表格區(qū)中的每組數(shù)據(jù)表格起始地址采用動(dòng)態(tài)分配,設(shè)置初始化數(shù)據(jù)向量表順序存放每組數(shù)據(jù)表格的入口地址;(4)按初始化信息的數(shù)據(jù)結(jié)構(gòu)設(shè)置相應(yīng)的初始化子程序。采用本發(fā)明將POST流程的檢測(cè)和初始化代碼與初始化數(shù)據(jù)分離后,系統(tǒng)化結(jié)構(gòu)化的設(shè)計(jì)能夠簡(jiǎn)化BIOS配置過程對(duì)核心代碼的修改和維護(hù),提高配置速度,縮短開發(fā)周期,從而使配置工作更加簡(jiǎn)單高效,并且也有利于降低配置修改可能帶來的風(fēng)險(xiǎn)。文檔編號(hào)G06F9/445GK1731354SQ20051001929公開日2006年2月8日申請(qǐng)日期2005年8月16日優(yōu)先權(quán)日2005年8月16日發(fā)明者張雁,馬中,熊庭剛,李海山申請(qǐng)人:中國(guó)船舶重工集團(tuán)公司第七○九研究所