專利名稱:一種嵌入式設(shè)備驅(qū)動程序輔助生成方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明提供了一種嵌入式設(shè)備驅(qū)動程序輔助生成方法及系統(tǒng),具體涉及一種用嵌 入式設(shè)備驅(qū)動程序接口描述語言描述并輔助生成嵌入式設(shè)備驅(qū)動程序的方法及系統(tǒng),屬于 嵌入式系統(tǒng)軟件設(shè)計領(lǐng)域。
背景技術(shù):
隨著半導(dǎo)體技術(shù)和移動通信,移動計算的發(fā)展,各種各樣的嵌入式系統(tǒng)已經(jīng)滲入 生產(chǎn)、生活的各個領(lǐng)域,并且在很多應(yīng)用領(lǐng)域漸漸沖擊著傳統(tǒng)PC的地位。一些學(xué)者開始斷 言,嵌入式系統(tǒng)技術(shù)將成為后PC時代的主宰。這個領(lǐng)域的重要性可見一斑。與傳統(tǒng)PC的發(fā)展不同,嵌入式設(shè)備的發(fā)展不僅存在諸如性能提高這樣的自身的 縱向發(fā)展,更為突出的一點(diǎn)是它的橫向發(fā)展。新體系架構(gòu)的推出,新設(shè)備的層出不窮,各種 多樣化的設(shè)備也是為了適應(yīng)嵌入式系統(tǒng)多樣化的應(yīng)用。與這種特點(diǎn)相對應(yīng),嵌入式設(shè)備缺 乏統(tǒng)一的標(biāo)準(zhǔn)。僅處理器架構(gòu)這一核心部分,就存在多種主流的架構(gòu),如ARM,X86,MIPS等 等。與PC市場中的x86架構(gòu)占絕對優(yōu)勢,嵌入式領(lǐng)域的多架構(gòu)現(xiàn)狀確實給我們開發(fā)嵌入式 系統(tǒng)增加了很大的難度。嵌入式系統(tǒng)分為兩部分嵌入式硬件和嵌入式軟件。嵌入式系統(tǒng)的快速發(fā)展要求 嵌入式軟件的快速開發(fā),以適應(yīng)硬件發(fā)展的快節(jié)奏。而由于嵌入式設(shè)備自身的復(fù)雜,以及平 臺相關(guān)軟件固有的復(fù)雜性,導(dǎo)致了軟件開發(fā)難度的增加。在這種矛盾下,一定程度的軟件開 發(fā)自動化,尤其是硬件相關(guān)軟件(如設(shè)備驅(qū)動程序)開發(fā)的自動化顯得重要而有意義。多樣化的架構(gòu)和多樣化的設(shè)備交織起來,形成了更加多樣化的系統(tǒng)。在這種背景 下,嵌入式系統(tǒng)程序員很希望能夠?qū)⒁延械墓ぷ骷右詮?fù)用。通過設(shè)備建模技術(shù),這種期望是 可行的。比如有兩個采用不同處理器的系統(tǒng),采用了相同的網(wǎng)卡芯片。這種情況下,為該網(wǎng) 卡芯片建立的模型,只需要做少量修改便可應(yīng)用到兩個系統(tǒng)中去。降低了程序員的工作量?,F(xiàn)有的驅(qū)動程序輔助生成方法存在只能針對特定平臺、缺乏可移植性,方法復(fù)雜、 學(xué)習(xí)成本高、不能降低開發(fā)難度等問題。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種新的開發(fā)方法和系統(tǒng),以提高嵌入式設(shè)備驅(qū)動程序開 發(fā)效率,減少開發(fā)過程中的錯誤,降低開發(fā)難度;并提高嵌入式設(shè)備驅(qū)動程序的可移植性。在本方法中,用嵌入式設(shè)備驅(qū)動程序接口描述語言描述設(shè)備訪問接口、硬件平臺 特性和硬件設(shè)備邏輯功能;并保存成XML格式的文件;解析描述文檔并在內(nèi)存中生成內(nèi)部 數(shù)據(jù)結(jié)構(gòu),利用事先編寫的庫文件,結(jié)合平臺和系統(tǒng)特性,生成相應(yīng)的可供開發(fā)人員使用 的,包含了寄存器存取方式及默認(rèn)值、寄存器訪問代碼、和設(shè)備基本功能函數(shù)內(nèi)容的嵌入式 設(shè)備驅(qū)動程序樁代碼。具體來說,本發(fā)明的嵌入式設(shè)備驅(qū)動程序輔助生成方法包括下列步驟,如圖1所 示
A.利用嵌入式設(shè)備驅(qū)動程序接口描述語言對嵌入式設(shè)備信息進(jìn)行描述;所述的信息是指設(shè)備訪問接口(寄存器)及訪問約束,硬件平臺相關(guān)特性,驅(qū)動程 序所需的設(shè)備基本功能,實現(xiàn)步驟如下A1.對設(shè)備訪問接口中的寄存器進(jìn)行描述,包括寄存器的名稱、地址、大小、屬性、 位域(字段)、以及寄存器的訪問約束;具體內(nèi)容如下Al. 1.寄存器名稱寄存器名稱是驅(qū)動開發(fā)人員用于區(qū)別寄存器的標(biāo)識符;A1. 2.地址地址是寄存器相對于設(shè)備基地址的偏移量,是寄存器在設(shè)備內(nèi)部的 地址,驅(qū)動程序通過這個地址訪問寄存器;A1.3.大小寄存器的大小以位(bit)為單位,通常有8位、16位或32位;A1. 4.屬性寄存器的讀寫屬性包括讀寫、只讀和只寫;A1. 5.位域寄存器的不同位域具有不同含義,設(shè)備驅(qū)動程序通常是對位域進(jìn)行 操作;A1.6.寄存器訪問約束包括該寄存器是否為設(shè)備保留,是否可能發(fā)生變化 (volatile),是否有寫入時發(fā)生變化等;A2.對硬件平臺相關(guān)特性進(jìn)行描述,包括數(shù)據(jù)訪問方式、設(shè)備基地址;具體內(nèi)容如 下A2. 1.大端優(yōu)先還是小端優(yōu)先有些體系結(jié)構(gòu)是大端優(yōu)先(big ending)的,如ARM 體系結(jié)構(gòu);有些體系結(jié)構(gòu)是小段優(yōu)先(little ending)的,如X86體系結(jié)構(gòu);不同的端優(yōu)先 性對設(shè)備和驅(qū)動程序都有影響;A2. 2.設(shè)備的基地址通常系統(tǒng)給設(shè)備分配一段或幾段連續(xù)的地址空間,這些地 址空間的起始地址就是設(shè)備的基地址。有些設(shè)備只有一個基地址,有些設(shè)備有多個基地址。 對于有多個基地址的設(shè)備,需要在寄存器中指出使用了哪個基地址;A3.對驅(qū)動程序所需的設(shè)備基本邏輯功能進(jìn)行描述,用于生成驅(qū)動程序中的功能 函數(shù);所述函數(shù)的操作以寄存器操作為主,輔以核心服務(wù)的調(diào)用;B.按照嵌入式設(shè)備驅(qū)動程序接口描述語言的格式存儲步驟A中的描述信息。具體 存儲方式如下B1.設(shè)備的每一個寄存器的描述信息由一對<RGTRX/RGTR>標(biāo)簽標(biāo)識,標(biāo)簽內(nèi)部 還包括以下信息Bl. 1.寄存器名稱<NAME>寄存器名</NAME> ;B1. 2.地址<ADDR>16 進(jìn)制偏移量 </ADDR> ;B1. 3.大小<SIZE>以位為單位的寄存器大小</SIZE> ;B1. 4.屬性<ATTR>寄存器讀寫屬性</ATTR>,其中,寄存器讀寫屬性為讀寫(RW)、 只讀(R0)或只寫(W);B1. 5.位域<REGN>位域名稱,起始位@終止位,默認(rèn)值</REGN>,如果位域名稱為 RSVD則表示該位域是設(shè)備保留位域。默認(rèn)值后面如果跟有一個&,表示該值為固定值;默認(rèn) 值后面如果跟有一個$,表示該值為自動復(fù)位;B1. 6.訪問約束訪問約束在屬性和位域中進(jìn)行描述;
0031]B2.硬件平臺相關(guān)特性的描述信息由一對<INTERFACEX/INTERFACE>標(biāo)簽標(biāo)識, 標(biāo)簽內(nèi)部還包括以下信息
B2. 1.大端優(yōu)先還是小端優(yōu)先<ENDIAN>優(yōu)先性</ENDIAN>,如果是大端優(yōu)先,則 優(yōu)先性為B ;如果小端優(yōu)先,則優(yōu)先性為L ;B2. 2.設(shè)備的基地址<BASEADDR>16進(jìn)制基地址〈/BASEADDR〉,有幾個基地址就有 幾個 <BASEADDRX/BASEADDR> 標(biāo)簽對;B3.每一個驅(qū)動程序所需的設(shè)備基本功能的描述信息由一對〈FUNCTI0NX/ FUNCTION)標(biāo)簽標(biāo)識,標(biāo)簽內(nèi)部還包括以下內(nèi)容B3. 1.功能名<NAME>功能名字</NAME>,該名字將成為設(shè)備驅(qū)動程序中相應(yīng)功能 函數(shù)的名字;B3. 2.參數(shù)<PARA>以字節(jié)為單位的參數(shù)大小參數(shù)類型@參數(shù)名</PARA>,長度 通常為1、2或4,類型有整型(I)、無符號整型(U)、浮點(diǎn)型(F)、指針型(P);B3. 3.返回類型<RETTPYE>以字節(jié)為單位的返回類型大小返回類型</RETTPY> ; 一個特例是<RETTPYE>NULL</RETTPYE>表示沒有返回值;B3. 4.操作每一個操作保存在一個<0PERATI0N>$關(guān)鍵字-命令字,%標(biāo)識符 〈/OPERATION〉標(biāo)簽對中。所述的關(guān)鍵字有 SETREG、GETREG、DELAY、WHILE、IFTHEN 類型;所 述的標(biāo)識符包括REG、VAR、VALUE、CON、SEC ;針對不同的關(guān)鍵字,有不同的可用命令和標(biāo)識 符;C.對嵌入式設(shè)備描述信息進(jìn)行解析并生成保存在內(nèi)存中的內(nèi)部數(shù)據(jù)結(jié)構(gòu)C1.解析設(shè)備寄存器描述信息,建立表示設(shè)備寄存器的樹結(jié)構(gòu);C2.解析硬件平臺相關(guān)特性,設(shè)置硬件平臺配置參數(shù);C3.解析驅(qū)動程序所需的設(shè)備基本功能的描述,建立表示設(shè)備功能的內(nèi)部數(shù)據(jù)結(jié) 構(gòu);D.根據(jù)內(nèi)部數(shù)據(jù)結(jié)構(gòu),生成驅(qū)動程序樁代碼,包括寄存器存取方式及默認(rèn)值、寄存 器訪問代碼、和設(shè)備基本功能函數(shù)。不同的平臺選擇不同的庫文件;所述的庫文件里保存有 預(yù)先編寫的,用于生成驅(qū)動程序的平臺相關(guān)代碼,具體步驟如下D1.根據(jù)硬件平臺配置參數(shù),設(shè)置驅(qū)動程序代碼的寄存器存取方式及默認(rèn)值,主要 包括以下內(nèi)容Dl. 1.特定平臺的基本數(shù)據(jù)類型。例如在32位X86系統(tǒng)中,驅(qū)動程序中使用的32 位無符號整型將對應(yīng)為平臺上的無符號整型,而8位無符號整型將對應(yīng)為平臺上的無符號 字符型;D1. 2.特定平臺的硬件操作實現(xiàn)代碼,例如在X86體系結(jié)構(gòu)中,讀寫設(shè)備寄存器的 指令為in和out指令;而在ARM體系結(jié)構(gòu)中,讀寫寄存器的指令時內(nèi)存訪問指令;D2.生成寄存器訪問代碼D2. 1.對于讀寫屬性為RW的寄存器,生成一個getReg和一個setReg函數(shù);D2. 2.對于讀寫屬性為R0的寄存器,生成一個getReg函數(shù);D2. 3.對于讀寫屬性為W的寄存器,生成一個setReg函數(shù);D3.生成驅(qū)動程序所需的設(shè)備基本功能函數(shù)D3. 1.使用setReg和getReg函數(shù)操作寄存器;D3. 2.根據(jù)庫文件將中間表示中的數(shù)據(jù)類型和操作替換成相應(yīng)平臺上的數(shù)據(jù)類型 和操作;
本發(fā)明針對嵌入式設(shè)備驅(qū)動程序開發(fā),語法簡潔,能夠與設(shè)備文檔相對應(yīng),能夠描 述設(shè)備功能。語言具有平臺無關(guān)性,生成的程序具有良好的可移植性。同時,對設(shè)備的描述 可以由設(shè)備廠商直接編寫,大大減輕了驅(qū)動程序開發(fā)人員的工作量,提高了開發(fā)效率。本實施例實現(xiàn)了一個嵌入式設(shè)備驅(qū)動程序輔助生成系統(tǒng),包括以下幾個模塊1.人機(jī)交互接口模塊用于向開發(fā)人員提供一個友好的界面供開發(fā)人員輸入、修 改對設(shè)備的描述;2.描述模塊將從人機(jī)交互接口中獲取的描述信息,采用B中所述的方式進(jìn)行保 存;3.解析模塊用于解析描述文件,并生成中間表示;4.樁代碼生成模塊讀入中間表示,根據(jù)硬件平臺相關(guān)特性描述選擇庫文件,并 生成驅(qū)動程序樁代碼。各模塊之間的關(guān)系如下1.人機(jī)交互接口獲取用戶輸入并向其他模塊發(fā)出命令;2.描述模塊從人機(jī)交互接口獲取輸入,并生成描述文件;3.解析模塊讀入描述文件并進(jìn)行解析,并生成中間表示;4.樁代碼生成模塊根據(jù)內(nèi)部數(shù)據(jù)結(jié)構(gòu)生成與設(shè)備描述對應(yīng)的驅(qū)動程序樁代碼
圖1 本發(fā)明的方法流程圖;圖2 本發(fā)明的系統(tǒng)結(jié)構(gòu)圖。
具體實施例方式下面結(jié)合附圖,通過s3c44b0開發(fā)板上的UART設(shè)備驅(qū)動程序的開發(fā),對本發(fā)明作 進(jìn)一步闡述。具體步驟如下1.使用人機(jī)交互接口對s3c44b0的UART設(shè)備進(jìn)行描述2.生成描述文件,部分文件內(nèi)容如下所示 最后需要注意的是,公布實施例的目的在于幫助進(jìn)一步理解本發(fā)明,但是本領(lǐng)域 的技術(shù)人員可以理解在不脫離本發(fā)明及所附的權(quán)利要求的精神和范圍內(nèi),各種替換和修 改都是可能的。因此,本發(fā)明不應(yīng)局限于實施例所公開的內(nèi)容,本發(fā)明要求保護(hù)的范圍以權(quán) 利要求書界定的范圍為準(zhǔn)。
權(quán)利要求
一種嵌入式設(shè)備驅(qū)動程序輔助生成方法,其特征在于,包括以下步驟a)利用嵌入式設(shè)備驅(qū)動程序接口描述語言對嵌入式設(shè)備信息進(jìn)行描述,所述的信息是指設(shè)備訪問接口(寄存器)及訪問約束,硬件平臺相關(guān)特性,驅(qū)動程序所需的設(shè)備基本功能;b)按照嵌入式設(shè)備驅(qū)動程序接口描述語言的格式存儲步驟A中的描述信息;c)對嵌入式設(shè)備描述信息進(jìn)行解析并生成保存在內(nèi)存中的內(nèi)部數(shù)據(jù)結(jié)構(gòu);d)利用庫文件,根據(jù)內(nèi)部數(shù)據(jù)結(jié)構(gòu),生成驅(qū)動程序樁代碼,包括寄存器存取方式及默認(rèn)值、寄存器訪問代碼、和設(shè)備基本功能函數(shù);不同的平臺選擇不同的庫文件;所述的庫文件里保存有預(yù)先編寫的,用于生成驅(qū)動程序的平臺相關(guān)代碼。
2.如權(quán)利要求1所述的方法,其特征在于,所述步驟A的實現(xiàn)方法為A1.對設(shè)備訪問接口中的寄存器進(jìn)行描述,包括寄存器的名稱、地址、大小、屬性、位域 (字段)、以及寄存器的訪問約束;A2.對硬件平臺相關(guān)特性進(jìn)行描述,包括數(shù)據(jù)訪問方式、設(shè)備基地址;A3.對驅(qū)動程序所需的設(shè)備基本邏輯功能進(jìn)行描述,用于生成驅(qū)動程序中的功能函數(shù)。
3.如權(quán)利要求2所述的方法,其特征在于,所述步驟B的實現(xiàn)方法為B1.設(shè)備的每一個寄存器的描述信息由一對<RGTRX/RGTR>標(biāo)簽標(biāo)識,包括寄存器名 稱、地址、大小、屬性、位域(字段)、以及寄存器的訪問約束信息;B2.硬件平臺相關(guān)特性的描述信息由一對<INTERFACEX/INTERFACE>標(biāo)簽標(biāo)識,包括 數(shù)據(jù)訪問方式、設(shè)備的基地址信息;B3.每一個驅(qū)動程序所需的設(shè)備基本功能的描述信息由一對<FUNCTI0NX/FUNCTI0N> 標(biāo)簽標(biāo)識,包括功能名、參數(shù)、返回類型、操作信息。
4.如權(quán)利要求3所述的方法,其特征在于,所述步驟C的實現(xiàn)方法為 C1.解析設(shè)備寄存器描述信息,建立表示設(shè)備寄存器的樹結(jié)構(gòu);C2.解析硬件平臺相關(guān)特性,設(shè)置硬件平臺配置參數(shù);C3.解析驅(qū)動程序所需的設(shè)備基本功能的描述,建立表示設(shè)備功能的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
5.如權(quán)利要求4所述的方法,其特征在于,所述步驟D實現(xiàn)方法為D1.根據(jù)硬件平臺配置參數(shù),設(shè)置驅(qū)動程序代碼的寄存器存取方式及默認(rèn)值;D2.生成寄存器訪問代碼;D3.生成驅(qū)動程序所需的設(shè)備基本功能函數(shù)。
6.一種嵌入式設(shè)備驅(qū)動程序輔助生成系統(tǒng),其特征在于,該系統(tǒng)的實現(xiàn)方法如權(quán)利要 求1所述;系統(tǒng)包含如下幾個功能模塊-人機(jī)交互接口模塊用于向開發(fā)人員提供一個友好的界面供開發(fā)人員輸入、修改對 設(shè)備的描述;-描述模塊將從人機(jī)交互接口中獲取的描述信息,采用B中所述的方式進(jìn)行保存; -解析模塊用于解析描述文件,并生成中間表示;-樁代碼生成模塊讀入中間表示,根據(jù)硬件平臺相關(guān)特性描述選擇庫文件,并生成驅(qū) 動程序樁代碼。各模塊之間的關(guān)系如下`1.人機(jī)交互接口獲取用戶輸入并向其他模塊發(fā)出命令;·2.描述模塊從人機(jī)交互接口獲取輸入,并生成描述文件;·3.解析模塊讀入描述文件并進(jìn)行解析,并生成中間表示;·4.樁代碼生成模塊根據(jù)內(nèi)部數(shù)據(jù)結(jié)構(gòu)生成與設(shè)備描述對應(yīng)的驅(qū)動程序樁代碼。
全文摘要
本發(fā)明涉及一種嵌入式設(shè)備驅(qū)動程序輔助生成方法及系統(tǒng),屬于嵌入式系統(tǒng)軟件設(shè)計領(lǐng)域。本方法包括,用嵌入式設(shè)備驅(qū)動程序接口描述語言描述設(shè)備訪問接口、硬件平臺特性和硬件設(shè)備邏輯功能;保存成XML格式的文件;解析描述文檔并在內(nèi)存中生成內(nèi)部數(shù)據(jù)結(jié)構(gòu);利用事先編寫的庫文件,結(jié)合平臺和系統(tǒng)特性,生成相應(yīng)的可供開發(fā)人員使用的,包含了寄存器存取方式及默認(rèn)值、寄存器訪問代碼、和設(shè)備基本功能函數(shù)內(nèi)容的嵌入式設(shè)備驅(qū)動程序樁代碼。提高嵌入式設(shè)備驅(qū)動程序開發(fā)效率,減少開發(fā)過程中的錯誤,降低開發(fā)難度;并提高嵌入式設(shè)備驅(qū)動程序的可移植性。
文檔編號G06F9/45GK101894039SQ20101025191
公開日2010年11月24日 申請日期2010年8月12日 優(yōu)先權(quán)日2010年8月12日
發(fā)明者王剛, 趙霞, 郭耀, 陳向群 申請人:北京大學(xué)