專利名稱::嵌入式設(shè)備的驅(qū)動方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及嵌入式系統(tǒng)、實模式操作系統(tǒng)和保護模式操作系統(tǒng),尤其涉及在實模式和保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法。
背景技術(shù):
:嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),并且軟硬件可裁剪的專用系統(tǒng),其對功能、可靠性、成本、體積、功耗有嚴(yán)格要求。它一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶的應(yīng)用程序等四個部分組成,用于實現(xiàn)對其他設(shè)備的監(jiān)控或管理等功能。嵌入式系統(tǒng)中的外圍硬件設(shè)備即嵌入式設(shè)備,既可以是集成在微處理器上的某個通信端口,如PowerPC(增強型嵌入式處理器)的FCC(快速通信控制器)、SCC(串行通信控制器)、SMC(串行多通道通信控制器),或DSP(數(shù)字信號處理器)的MCBSP(多通道緩沖串口);也可以是由微處理器控制的外圍芯片,如ATM(異步傳輸模式)交換芯片,CAN(局域網(wǎng)控制器)總線控制器、VoiceCodeC(語音編解碼)芯片等。對嵌入式設(shè)備的驅(qū)動主要由驅(qū)動模塊進行,驅(qū)動模塊主要完成兩個功能其一是在應(yīng)用程序和嵌入式設(shè)備之間進行控制信息的傳遞,其二是在應(yīng)用程序和嵌入式設(shè)備之間進行數(shù)據(jù)的傳遞,使得應(yīng)用程序可以使用嵌入式設(shè)備的各項功能。驅(qū)動模塊向應(yīng)用程序提供接口函數(shù),這些接口函數(shù)通常對應(yīng)于嵌入式設(shè)備具有的功能,應(yīng)用程序通過調(diào)用接口函數(shù)將使用某項功能所需的控制信息和/或數(shù)據(jù)傳遞給驅(qū)動模塊;驅(qū)動模塊將這些控制信息和/或數(shù)據(jù)通過操作系統(tǒng)傳遞給嵌入式設(shè)備。對應(yīng)于不同類型的操作系統(tǒng),驅(qū)動嵌入式設(shè)備的方法也有所區(qū)別。操作系統(tǒng)屬于系統(tǒng)軟件的范疇,它以有效合理的方式管理計算機的軟硬件資源,組織計算機的工作流程,控制程序的執(zhí)行并向用戶提供各種服務(wù)。操作系統(tǒng)又可以進一步劃分為通用操作系統(tǒng)(GOS)和實時操作系統(tǒng)(RTOS)。通用操作系統(tǒng)運行在保護模式下,如Windows、Linux等,其用戶界面友好,開發(fā)工具豐富,特點是最大限度利用系統(tǒng)資源和公平對待所有的系統(tǒng)請求。實時操作系統(tǒng)運行在實模式下,如VxWorks、OSE等,一般工作在PowerPC、DSP等嵌入式微處理器上,快速多任務(wù)切換、搶占式任務(wù)調(diào)度是其基本特點,常常用作嵌入式系統(tǒng)的操作系統(tǒng)。在實模式操作系統(tǒng)中,用戶可以采用自定義的接口通過驅(qū)動模塊與設(shè)備進行交互。因此在現(xiàn)有技術(shù)中,對實模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法為驅(qū)動模塊通過操作系統(tǒng)與嵌入式設(shè)備進行控制信息和數(shù)據(jù)的交互,同時向應(yīng)用程序提供自定義的接口函數(shù),應(yīng)用程序通過調(diào)用這些接口函數(shù)實現(xiàn)控制信息和數(shù)據(jù)的傳遞。實模式下計算機系統(tǒng)的層次結(jié)構(gòu)如圖1所示,其中驅(qū)動模塊工作在VxWorks、OSE操作系統(tǒng)與應(yīng)用程序之間,與應(yīng)用程序之間通過自定義的接口進行交互,同時直接使用操作系統(tǒng)的API(ApplicationProgramInterface,應(yīng)用程序接口)函數(shù)與操作系統(tǒng)進行交互。這樣的驅(qū)動方法使用戶具有非常大的自由度,應(yīng)用程序與驅(qū)動模塊之間的接口都由用戶自主定制。由于不同的驅(qū)動開發(fā)人員往往提供不同的與嵌入式設(shè)備的接口,導(dǎo)致在VxWorks上開發(fā)的驅(qū)動模塊和使用該驅(qū)動模塊的應(yīng)用程序在OSE上無法使用。而且,即使是相同的實模式操作系統(tǒng)上,一個用戶開發(fā)的應(yīng)用程序通常也無法和其他用戶開發(fā)的驅(qū)動模塊一起使用。在保護模式操作系統(tǒng)中,應(yīng)用程序工作在用戶態(tài),在用戶態(tài)CPU(中央處理器)禁止對硬件的直接訪問和對內(nèi)存的未授權(quán)訪問,對嵌入式設(shè)備的直接訪問需要在內(nèi)核態(tài)進行?,F(xiàn)有技術(shù)中,對保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法為將嵌入式設(shè)備虛擬成操作系統(tǒng)可以識別的字符設(shè)備、塊設(shè)備或是網(wǎng)絡(luò)設(shè)備在操作系統(tǒng)里登記注冊,驅(qū)動模塊工作在內(nèi)核態(tài)以實現(xiàn)與嵌入式設(shè)備的控制信號和數(shù)據(jù)傳遞;驅(qū)動模塊與應(yīng)用程序之間必須采用操作系統(tǒng)在用戶態(tài)和內(nèi)核態(tài)之間的接口,因此驅(qū)動模塊遵循操作系統(tǒng)為虛擬設(shè)備制定的接口為應(yīng)用程序提供接口函數(shù),并將這些接口函數(shù)與虛擬設(shè)備一同在操作系統(tǒng)里登記注冊;由應(yīng)用程序通過系統(tǒng)調(diào)用陷入內(nèi)核態(tài)來調(diào)用上述接口函數(shù),來進行與驅(qū)動模塊之間控制信息和數(shù)據(jù)的傳遞。圖2所示為保護模式下計算機系統(tǒng)的層次結(jié)構(gòu),驅(qū)動模塊工作在Windows或Linux的內(nèi)核態(tài),應(yīng)用程序工作在用戶態(tài),必須通過Windows或Linux系統(tǒng)調(diào)用陷入內(nèi)核態(tài)來訪問驅(qū)動模塊提供的接口函數(shù),從而使用嵌入式設(shè)備。由于不同保護模式操作系統(tǒng)的內(nèi)核態(tài)具有非常大的差異,為嵌入式設(shè)備在一種保護模式操作系統(tǒng)中開發(fā)的驅(qū)動模塊無法在另一種保護模式操作系統(tǒng)中使用。雖然不同的保護模式操作系統(tǒng)提供用戶態(tài)接口函數(shù)差別不大,但是保護模式操作系統(tǒng)為內(nèi)核態(tài)驅(qū)動模塊提供的字符設(shè)備接口函數(shù)、塊設(shè)備接口函數(shù)、網(wǎng)絡(luò)設(shè)備接口函數(shù)這三類函數(shù)卻很不同,因而只有當(dāng)嵌入式設(shè)備在不同的保護模式操作系統(tǒng)虛擬成同樣類型的設(shè)備時,涉及嵌入式設(shè)備的應(yīng)用程序才具有一定程度的可移植性。而且,在保護模式操作系統(tǒng)下,應(yīng)用程序通過系統(tǒng)調(diào)用陷入內(nèi)核態(tài)來訪問驅(qū)動模塊,會引起用戶態(tài)和內(nèi)核態(tài)的頻繁切換,影響實時性。
發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是現(xiàn)有技術(shù)中,在實模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動模塊和涉及嵌入式設(shè)備的應(yīng)用程序不能移植;在保護模式系統(tǒng)中驅(qū)動模塊不能移植,涉及嵌入式設(shè)備的應(yīng)用程序移植性和實時性差。本發(fā)明所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法包括以下步驟A)將不同操作系統(tǒng)的應(yīng)用程序接口API封裝為統(tǒng)一的操作系統(tǒng)抽象接口函數(shù);B)將嵌入式設(shè)備登記為操作系統(tǒng)支持的虛擬設(shè)備,建立所述虛擬設(shè)備的內(nèi)核態(tài)內(nèi)存空間與驅(qū)動模塊的用戶態(tài)內(nèi)存空間之間的映射;C)所述驅(qū)動模塊調(diào)用所述操作系統(tǒng)抽象接口函數(shù),通過內(nèi)存映射啟動所述嵌入式設(shè)備;D)應(yīng)用程序調(diào)用驅(qū)動模塊和操作系統(tǒng)的接口函數(shù),通過內(nèi)存映射與嵌入式設(shè)備進行控制信息和/或數(shù)據(jù)的交互;E)所述驅(qū)動模塊調(diào)用所述操作系統(tǒng)抽象接口函數(shù),通過內(nèi)存映射關(guān)閉所述嵌入式設(shè)備。優(yōu)選地,所述步驟B)與步驟C)之間包括BC)向操作系統(tǒng)登記所述虛擬設(shè)備的異步通知函數(shù),用來在嵌入式設(shè)備產(chǎn)生中斷時向所述驅(qū)動模塊發(fā)送所述中斷的實時信號。優(yōu)選地,所述步驟A)與步驟B)之間包括AB)所述驅(qū)動模塊為應(yīng)用程序提供統(tǒng)一的驅(qū)動抽象接口函數(shù);步驟D)所述驅(qū)動模塊的接口函數(shù)為所述驅(qū)動抽象接口函數(shù);所述操作系統(tǒng)的接口函數(shù)為所述操作系統(tǒng)抽象接口函數(shù)。優(yōu)選地,所述驅(qū)動抽象接口函數(shù)包括打開設(shè)備函數(shù)和關(guān)閉設(shè)備函數(shù),其中打開設(shè)備函數(shù)用來啟動對嵌入式設(shè)備的訪問;關(guān)閉設(shè)備函數(shù)用來結(jié)束對嵌入式設(shè)備的訪問;所述步驟BC)與步驟C)之間包括應(yīng)用程序調(diào)用打開設(shè)備函數(shù)通知驅(qū)動模塊對嵌入式設(shè)備進行訪問,并向驅(qū)動模塊指定嵌入式設(shè)備的工作狀態(tài);所述步驟D)與步驟E)之間包括應(yīng)用程序調(diào)用所述關(guān)閉設(shè)備函數(shù)通知所述驅(qū)動模塊結(jié)束對所述嵌入式設(shè)備的訪問。優(yōu)選地,所述驅(qū)動抽象接口函數(shù)還包括輸入輸出控制函數(shù),用來進行與嵌入式設(shè)備的控制信息的交互;所述步驟D)包括應(yīng)用程序向嵌入式設(shè)備發(fā)送控制信息的過程,具體為應(yīng)用程序調(diào)用所述輸入輸出控制函數(shù)將控制信息發(fā)送至驅(qū)動模塊;驅(qū)動模塊通過內(nèi)存映射將控制信息寫入嵌入式設(shè)備的寄存器。所述步驟D)包括應(yīng)用程序從嵌入式設(shè)備讀取控制信息的過程,具體為應(yīng)用程序調(diào)用所述輸入輸出控制函數(shù)通知驅(qū)動模塊讀取嵌入式設(shè)備的控制信息;驅(qū)動模塊通過內(nèi)存映射讀入嵌入式設(shè)備寄存器中的控制信息,并向應(yīng)用程序返回該控制信息。優(yōu)選地,所述操作系統(tǒng)抽象接口函數(shù)包括任務(wù)管理類函數(shù),用來創(chuàng)建、刪除從嵌入式設(shè)備接收實時信號的任務(wù);步驟C)具體為驅(qū)動模塊調(diào)用所述任務(wù)管理類函數(shù)創(chuàng)建從嵌入式設(shè)備接收實時信號的任務(wù),并根據(jù)應(yīng)用程序的指定通過內(nèi)存映射設(shè)置嵌入式設(shè)備的工作狀態(tài);步驟E)具體為驅(qū)動模塊調(diào)用所述任務(wù)管理類函數(shù)刪除從嵌入式設(shè)備接收實時信號的任務(wù),停止嵌入式設(shè)備,并解除所述內(nèi)存映射。優(yōu)選地,所述操作系統(tǒng)抽象接口函數(shù)還包括內(nèi)存管理類函數(shù),用來創(chuàng)建、刪除內(nèi)存池,從內(nèi)存池中分配內(nèi)存,將內(nèi)存歸還給內(nèi)存池;所述驅(qū)動抽象接口函數(shù)還包括發(fā)送數(shù)據(jù)函數(shù),用來向嵌入式設(shè)備發(fā)送數(shù)據(jù);所述步驟D)包括應(yīng)用程序向嵌入式設(shè)備發(fā)送數(shù)據(jù)的過程,具體為應(yīng)用程序?qū)?shù)據(jù)拷貝到調(diào)用所述內(nèi)存管理類函數(shù)分配的發(fā)送緩沖區(qū)中;應(yīng)用程序調(diào)用所述發(fā)送數(shù)據(jù)函數(shù)將所述發(fā)送緩沖區(qū)的指針傳遞給驅(qū)動模塊;驅(qū)動模塊將發(fā)送緩沖區(qū)中的數(shù)據(jù)通過內(nèi)存映射拷貝到嵌入式設(shè)備的緩存中。優(yōu)選地,所述操作系統(tǒng)抽象接口函數(shù)還包括實時信號管理類函數(shù)和消息管理類函數(shù),其中實時信號管理類函數(shù)用來創(chuàng)建、刪除、等待和釋放實時信號;消息管理類函數(shù)用來創(chuàng)建、刪除消息隊列,將消息發(fā)送到消息隊列,從消息隊列中接收消息;所述驅(qū)動抽象接口函數(shù)還包括接收數(shù)據(jù)函數(shù),用來從嵌入式設(shè)備接收數(shù)據(jù);所述步驟D)包括應(yīng)用程序從所述嵌入式設(shè)備接收數(shù)據(jù)的過程,具體為D1)驅(qū)動模塊調(diào)用實時信號管理類函數(shù)創(chuàng)建并等待實時信號;D2)操作系統(tǒng)根據(jù)嵌入式設(shè)備的中斷調(diào)用所述異步通知函數(shù)產(chǎn)生實時信號發(fā)送至驅(qū)動模塊;D3)驅(qū)動模塊通過調(diào)用所述消息管理類函數(shù)通過內(nèi)存映射將嵌入式設(shè)備中的數(shù)據(jù)傳送至應(yīng)用程序。優(yōu)選地,操作系統(tǒng)根據(jù)產(chǎn)生中斷的嵌入式設(shè)備調(diào)用異步通知函數(shù)產(chǎn)生對應(yīng)于所述嵌入式設(shè)備的實時信號,并將所述實時信號發(fā)送至所述嵌入式設(shè)備的驅(qū)動模塊。優(yōu)選地,所述步驟D3)具體為驅(qū)動模塊調(diào)用所述消息管理類函數(shù)發(fā)送消息通知應(yīng)用程序接收數(shù)據(jù);應(yīng)用程序調(diào)用所述內(nèi)存管理類函數(shù)分配接收緩沖區(qū),調(diào)用所述接收數(shù)據(jù)函數(shù)將接收緩沖區(qū)的指針傳遞給驅(qū)動模塊;驅(qū)動模塊通過內(nèi)存映射將嵌入式設(shè)備緩存中的數(shù)據(jù)拷貝到應(yīng)用程序指定的接收緩沖區(qū)。優(yōu)選地,所述步驟D3)具體為驅(qū)動模塊調(diào)用內(nèi)存管理類函數(shù)分配接收緩沖區(qū),并通過內(nèi)存映射從嵌入式設(shè)備的緩存中將數(shù)據(jù)拷貝到接收緩沖區(qū)中;驅(qū)動模塊調(diào)用消息管理類函數(shù)將接收緩沖區(qū)中的數(shù)據(jù)作為消息的凈荷送往應(yīng)用程序的消息隊列。優(yōu)選地,所述驅(qū)動抽象接口函數(shù)還包括復(fù)位設(shè)備函數(shù),用來重新啟動對嵌入式設(shè)備的訪問;所述步驟D)包括應(yīng)用程序復(fù)位嵌入式設(shè)備的過程,具體為應(yīng)用程序調(diào)用所述復(fù)位設(shè)備函數(shù)通知驅(qū)動模塊復(fù)位對嵌入式設(shè)備的訪問;驅(qū)動模塊清空嵌入式設(shè)備的緩存和未處理的實時信號。優(yōu)選地,所述操作系統(tǒng)抽象接口函數(shù)還包括互斥鎖管理類函數(shù),用來創(chuàng)建、刪除、等待和釋放互斥鎖;所述驅(qū)動方法還包括驅(qū)動模塊在使用嵌入式設(shè)備的資源前,調(diào)用所述互斥鎖管理類函數(shù)獲得互斥鎖對要使用的臨界資源加鎖;驅(qū)動模塊使用完嵌入式設(shè)備的資源后,調(diào)用所述互斥鎖管理類函數(shù)釋放互斥鎖。本發(fā)明還提供了一種實模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,包括以下步驟a)將不同操作系統(tǒng)的應(yīng)用程序接口API封裝為統(tǒng)一的操作系統(tǒng)抽象接口函數(shù);b)驅(qū)動模塊調(diào)用所述操作系統(tǒng)抽象接口函數(shù)啟動嵌入式設(shè)備;c)應(yīng)用程序通過調(diào)用驅(qū)動模塊和操作系統(tǒng)的接口,與嵌入式設(shè)備進行控制信息和/或數(shù)據(jù)的交互;d)驅(qū)動模塊調(diào)用所述操作系統(tǒng)抽象接口函數(shù)停止嵌入式設(shè)備。優(yōu)選地,所述步驟a)與步驟b)之間包括ab)所述驅(qū)動模塊為應(yīng)用程序提供統(tǒng)一的驅(qū)動抽象接口函數(shù);步驟c)所述驅(qū)動模塊的接口函數(shù)為所述驅(qū)動抽象接口函數(shù);所述操作系統(tǒng)的接口函數(shù)為所述操作系統(tǒng)抽象接口函數(shù)。本發(fā)明通過在操作系統(tǒng)抽象層中將原本提供給應(yīng)用程序使用的操作系統(tǒng)抽象接口函數(shù)也提供給驅(qū)動模塊使用,即驅(qū)動模塊工作在操作系統(tǒng)操作層之上,使得驅(qū)動模塊能夠不經(jīng)改動在不同的實模式操作系統(tǒng)上移植;而只需對在內(nèi)核態(tài)登記的函數(shù)進行少量改動即可在保護模式操作系統(tǒng)上移植,并且能夠有效減少用戶態(tài)和內(nèi)核態(tài)的切換次數(shù),提高計算機系統(tǒng)的運行效率;同時,通過令驅(qū)動模塊向應(yīng)用程序提供統(tǒng)一的驅(qū)動抽象接口函數(shù),使得應(yīng)用程序不經(jīng)改動即可在各種不同的操作系統(tǒng)上移植。圖1所示為現(xiàn)有技術(shù)中實模式操作系統(tǒng)的嵌入式設(shè)備驅(qū)動結(jié)構(gòu)圖;圖2所示為現(xiàn)有技術(shù)中保護模式操作系統(tǒng)的嵌入式設(shè)備的驅(qū)動結(jié)構(gòu)圖;圖3所示為現(xiàn)有的操作系統(tǒng)抽象層的應(yīng)用示意圖;圖4所示為實模式操作系統(tǒng)中本發(fā)明所述方法的流程圖;圖5所示為本發(fā)明所述實模式操作系統(tǒng)的嵌入式設(shè)備驅(qū)動結(jié)構(gòu)圖;圖6所示為保護模式操作系統(tǒng)中本發(fā)明所述方法的流程圖;圖7所示為本發(fā)明所述保護模式操作系統(tǒng)的嵌入式設(shè)備驅(qū)動結(jié)構(gòu)圖。具體實施例方式在圖1和圖2中,應(yīng)用程序與操作系統(tǒng)之間都包括操作系統(tǒng)抽象層。操作系統(tǒng)抽象層為應(yīng)用程序提供統(tǒng)一的API函數(shù),以屏蔽各種不同的操作系統(tǒng)提供的API函數(shù)之間的差異性,使得應(yīng)用程序可以不經(jīng)改動而適用于不同的操作系統(tǒng)。操作系統(tǒng)抽象層將多種操作系統(tǒng)提供的任務(wù)管理類、消息隊列管理類、調(diào)試信息輸出類等API函數(shù)進行分析研究,提取出完成類似功能的函數(shù)所具有的共性,根據(jù)其共性制定出統(tǒng)一的封裝方案。例如,在VxWorks操作系統(tǒng)中,使用如下API函數(shù)來創(chuàng)建任務(wù)inttaskSpawn(charname,/*任務(wù)名*/intpriority,/*任務(wù)優(yōu)先級(0-255),0優(yōu)先級最高*/intoptions,/*任務(wù)選項,如是否支持浮點、是否允許設(shè)置斷點等*/intstackSize,/*堆棧大小*/FUNCPTRentryPt,/*任務(wù)入口函數(shù)*/Intarg1...arg10,/*任務(wù)入口函數(shù)的10個輸入?yún)?shù)*/)在OSE操作系統(tǒng)中使用如下API函數(shù)來創(chuàng)建任務(wù)PROCESScreate_process(PROCESS_TYPEproc_type,/*任務(wù)類型優(yōu)先級、中斷任務(wù)*/Char*name,/*任務(wù)名*/OSENTRYPOINTentrypoint,/*任務(wù)入口函數(shù)*/OSADDRESSstack_size,/*堆棧大小*/OSPRIORITYpority,/*任務(wù)優(yōu)先級(0-31),0優(yōu)先級最高*/OSTIMEtimeslice,/*保留參數(shù),不使用*/PROCESSblock,/*保留參數(shù),不使用*/structOS_redir_entry,*route_table,/*保留參數(shù),不使用*/OSVECTORvector,/*中斷向量,創(chuàng)建中斷任務(wù)時使用*/OSUSERuser,/*保留參數(shù),不使用*/)美國IEEE(InstituteofElectrical&ElectronicEngineers,電氣與電子工程師協(xié)會)協(xié)會制定的POSIX(PortableOperatingSystemInterfaceforcomputerEnvironments,便攜式計算機環(huán)境操作系統(tǒng)接口)標(biāo)準(zhǔn)是操作系統(tǒng)抽象層的一種,通過下述創(chuàng)建線程的方法來實現(xiàn)對上述兩種操作系統(tǒng)創(chuàng)建任務(wù)的封裝pthread_attr_init初始化線程屬性;pthread_attr_setschedpolicy設(shè)置線程調(diào)度策略(FIF0、RR);pthread_attr_setschedparam設(shè)置線程調(diào)度參數(shù)(優(yōu)先級(1-99),99優(yōu)先級最高);pthread_create創(chuàng)建線程。但遺憾的是,部分遵循POSIX標(biāo)準(zhǔn)的API函數(shù)使用起來過于復(fù)雜,并未得到用戶的廣泛認(rèn)可。而套接字socket、文件管理系統(tǒng)FMS、ANSI(美國國家標(biāo)準(zhǔn)化組織)C的一些標(biāo)準(zhǔn)庫,則已經(jīng)形成標(biāo)準(zhǔn)通用于各種操作系統(tǒng),可直接使用。目前,許多公司都是自行開發(fā)操作系統(tǒng)抽象層來對其應(yīng)用程序支持的操作系統(tǒng)進行封裝,請參閱圖3,應(yīng)用程序通過調(diào)用操作系統(tǒng)抽象層提供的統(tǒng)一的封裝接口,進行與操作系統(tǒng)之間的信息和數(shù)據(jù)傳輸,這樣應(yīng)用程序可以通用于多種不同的操作系統(tǒng)。為了實現(xiàn)驅(qū)動模塊在不同操作系統(tǒng)間的移植性,本發(fā)明的思路是使驅(qū)動模塊工作在操作系統(tǒng)抽象層之上。在實模式操作系統(tǒng)中,本發(fā)明所述嵌入式設(shè)備驅(qū)動方法的流程如圖4所示。在步驟S110,將不同操作系統(tǒng)的API封裝為統(tǒng)一的操作系統(tǒng)抽象接口函數(shù)。即提取出不同操作系統(tǒng)的API所具有的共性,并根據(jù)其共性制定出操作系統(tǒng)統(tǒng)一的封裝接口操作系統(tǒng)抽象接口函數(shù)??梢?,本發(fā)明中操作系統(tǒng)抽象接口函數(shù)是前述操作系統(tǒng)抽象層的組成部分。驅(qū)動模塊使用的這些操作系統(tǒng)抽象接口函數(shù)包括任務(wù)管理類函數(shù)用來創(chuàng)建、刪除任務(wù)。具體而言,驅(qū)動模塊使用該類接口創(chuàng)建、刪除嵌入式設(shè)備的中斷處理任務(wù);內(nèi)存管理類函數(shù)用來創(chuàng)建、刪除內(nèi)存池,從內(nèi)存池中分配內(nèi)存,將內(nèi)存歸還給內(nèi)存池。具體而言,驅(qū)動模塊使用該類接口操作與嵌入式設(shè)備進行數(shù)據(jù)交互的緩存,實現(xiàn)靜態(tài)內(nèi)存動態(tài)使用的目的;信號量管理類函數(shù)用來創(chuàng)建、刪除、等待和釋放信號量。具體而言,當(dāng)嵌入式設(shè)備產(chǎn)生中斷后,使用該類接口以信號量的形式通知驅(qū)動模塊該嵌入式設(shè)備產(chǎn)生了中斷。驅(qū)動模塊將進行中斷處理,例如如果是接收中斷,則通知應(yīng)用程序接收數(shù)據(jù);如果是告警中斷,則通知應(yīng)用程序設(shè)備故障;消息管理類函數(shù)用來創(chuàng)建、刪除消息隊列,將消息發(fā)送到消息隊列,從消息隊列中接收消息。應(yīng)用程序通過接收來自操作系統(tǒng)的消息來對設(shè)備的要求進行響應(yīng),驅(qū)動模塊需要通知應(yīng)用程序進行與嵌入式設(shè)備有關(guān)的操作時,則需要通過操作系統(tǒng)向其發(fā)送相應(yīng)的消息;互斥鎖管理類函數(shù)用來創(chuàng)建、刪除、等待和釋放互斥鎖,進行對嵌入式設(shè)備的互斥操作。在支持多任務(wù)的操作系統(tǒng)中,當(dāng)一個任務(wù)使用某一個資源時,其他任務(wù)如果同時對該資源進行操作,往往會導(dǎo)致不可預(yù)見的后果。解決這一問題的方法是采用互斥鎖,當(dāng)一個任務(wù)需要排他性的使用某個資源時,則在該資源上加鎖,直至使用完畢后解鎖,以保證在其使用期間不被其他任務(wù)干擾。當(dāng)一個任務(wù)要使用的資源被其他任務(wù)加鎖時,只能等到該資源被解鎖后才能使用。在步驟S120,令驅(qū)動模塊為應(yīng)用程序提供統(tǒng)一的驅(qū)動抽象接口函數(shù)。驅(qū)動抽象接口函數(shù)可以根據(jù)具體的嵌入式設(shè)備的使用方法來確定。綜合應(yīng)用程序?qū)η度胧皆O(shè)備通常的使用方法,驅(qū)動抽象接口函數(shù)一般會包括下述函數(shù)打開設(shè)備函數(shù)用來啟動對嵌入式設(shè)備的訪問;關(guān)閉設(shè)備函數(shù)用來結(jié)束對嵌入式設(shè)備的訪問;復(fù)位設(shè)備函數(shù)用來重新啟動對嵌入式設(shè)備的訪問;發(fā)送數(shù)據(jù)函數(shù)用來向嵌入式設(shè)備發(fā)送數(shù)據(jù);接收數(shù)據(jù)函數(shù)用來從嵌入式設(shè)備接收數(shù)據(jù);輸入輸出控制函數(shù)用來進行與嵌入式設(shè)備的控制信息交互。在步驟S130,應(yīng)用程序調(diào)用打開設(shè)備函數(shù)通知驅(qū)動模塊對嵌入式設(shè)備進行訪問,并向驅(qū)動模塊傳遞嵌入式設(shè)備的工作參數(shù)。打開設(shè)備函數(shù)同時向驅(qū)動模塊指定應(yīng)用程序所要求的嵌入式設(shè)備的工作狀態(tài)。在步驟S140,驅(qū)動模塊啟動嵌入式設(shè)備。驅(qū)動模塊調(diào)用任務(wù)管理類函數(shù)創(chuàng)建嵌入式設(shè)備的中斷處理任務(wù)。同時,驅(qū)動模塊根據(jù)應(yīng)用程序指定嵌入式設(shè)備的工作狀態(tài)對嵌入式設(shè)備進行相應(yīng)的配置。在步驟S150,應(yīng)用程序調(diào)用操作系統(tǒng)抽象層提供的操作系統(tǒng)抽象接口函數(shù)和驅(qū)動抽象接口函數(shù),與嵌入式設(shè)備進行控制信息和/或數(shù)據(jù)的交互。事實上,應(yīng)用程序向嵌入式設(shè)備發(fā)送控制指令,而從嵌入式設(shè)備讀取的是其狀態(tài)信息,在本發(fā)明中,為描述簡便起見,將嵌入式設(shè)備的狀態(tài)信息也稱之為控制信息。本步驟實際上是應(yīng)用程序使用嵌入式設(shè)備的具體過程,在這一過程中應(yīng)用程序可能進行發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、發(fā)送控制信息、讀取控制信息、復(fù)位嵌入式設(shè)備等中的一項或數(shù)項工作,以下分別介紹每項工作的具體執(zhí)行步驟。應(yīng)用程序向嵌入式設(shè)備發(fā)送數(shù)據(jù)的過程為應(yīng)用程序調(diào)用操作系統(tǒng)抽象層提供的內(nèi)存管理類函數(shù)從其占用的內(nèi)存池中分配發(fā)送緩沖區(qū);應(yīng)用程序?qū)?shù)據(jù)拷貝到發(fā)送緩沖區(qū);應(yīng)用程序調(diào)用發(fā)送數(shù)據(jù)函數(shù)將發(fā)送緩沖區(qū)的指針傳遞給驅(qū)動模塊;驅(qū)動模塊將發(fā)送緩沖區(qū)中的數(shù)據(jù)拷貝到嵌入式設(shè)備的緩存中,由嵌入式設(shè)備根據(jù)應(yīng)用程序的控制信息對數(shù)據(jù)進行處理;待數(shù)據(jù)拷貝完畢后,驅(qū)動模塊調(diào)用內(nèi)存管理類函數(shù)將發(fā)送緩沖區(qū)歸還到應(yīng)用程序的內(nèi)存池中。應(yīng)用程序從嵌入式設(shè)備讀取數(shù)據(jù)的過程為驅(qū)動模塊調(diào)用信號量管理類函數(shù)創(chuàng)建并等待信號量;嵌入式設(shè)備產(chǎn)生中斷,操作系統(tǒng)調(diào)用登記的中斷服務(wù)程序入口,清空中斷,產(chǎn)生信號量發(fā)送至驅(qū)動模塊的中斷處理任務(wù);中斷處理任務(wù)獲得了信號量后,由驅(qū)動模塊將嵌入式設(shè)備中的數(shù)據(jù)傳送至應(yīng)用程序。驅(qū)動模塊有兩種方式實現(xiàn)這一過程第一種是以消息的形式通知應(yīng)用程序取走數(shù)據(jù);第二種是直接將從嵌入式設(shè)備接收的數(shù)據(jù)作為消息的凈荷送往應(yīng)用程序的消息隊列。采用上述第一種方式的具體流程如下驅(qū)動模塊調(diào)用消息管理類函數(shù)通過操作系統(tǒng)發(fā)送消息通知應(yīng)用程序接收數(shù)據(jù);應(yīng)用程序收到通知消息后,先調(diào)用內(nèi)存管理類函數(shù)從所占內(nèi)存池中分配接收緩沖區(qū),再調(diào)用接收數(shù)據(jù)函數(shù)將接收緩沖區(qū)的指針傳遞給驅(qū)動模塊;驅(qū)動模塊從嵌入式設(shè)備的緩存中將數(shù)據(jù)拷貝到應(yīng)用程序指定的接收緩沖區(qū)中;應(yīng)用程序?qū)邮諗?shù)據(jù)處理完畢后調(diào)用內(nèi)存管理類函數(shù)將接收緩沖區(qū)歸還到其內(nèi)存池中。采用上述第二種方式的具體流程如下驅(qū)動模塊調(diào)用內(nèi)存管理類函數(shù)從所占內(nèi)存池中分配接收緩沖區(qū);驅(qū)動模塊從嵌入式設(shè)備的緩存中將數(shù)據(jù)拷貝到接收緩沖區(qū)中;驅(qū)動模塊調(diào)用消息管理類函數(shù)將接收緩沖區(qū)中的數(shù)據(jù)作為消息的凈荷送往應(yīng)用程序的消息隊列;應(yīng)用程序?qū)邮諗?shù)據(jù)處理完畢后調(diào)用內(nèi)存管理類函數(shù)將接收緩沖區(qū)歸還到驅(qū)動模塊的內(nèi)存池中。是采用第一種方式,還是第二種方式取決于應(yīng)用需求。兩者的區(qū)別是采用第一種方式,應(yīng)用程序分配接收緩沖區(qū),驅(qū)動模塊提供數(shù)據(jù)接收函數(shù);采用第二種方式,驅(qū)動模塊分配接收緩沖區(qū),并且不需要提供數(shù)據(jù)接收函數(shù)。應(yīng)用程序向嵌入式設(shè)備發(fā)送控制信息的過程為應(yīng)用程序調(diào)用輸入輸出控制函數(shù)將控制信息發(fā)送至驅(qū)動模塊;驅(qū)動模塊將控制信息寫入嵌入式設(shè)備的控制寄存器。應(yīng)用程序從嵌入式設(shè)備讀取控制信息的過程為應(yīng)用程序調(diào)用輸入輸出控制函數(shù)通知驅(qū)動模塊讀取嵌入式設(shè)備的控制信息;驅(qū)動模塊讀入對應(yīng)嵌入式設(shè)備的控制信息,并向應(yīng)用程序返回該控制信息。在應(yīng)用程序?qū)η度胧皆O(shè)備的使用過程中,如果嵌入式設(shè)備發(fā)生異常,或者應(yīng)用程序需要打斷嵌入式設(shè)備正在進行的工作時,則需要復(fù)位嵌入式設(shè)備。具體過程為應(yīng)用程序調(diào)用復(fù)位設(shè)備函數(shù)通知驅(qū)動模塊復(fù)位對嵌入式設(shè)備的訪問;驅(qū)動模塊清空嵌入式設(shè)備的緩存。應(yīng)用程序可以根據(jù)實際需要,進行多次與嵌入式設(shè)備之間的控制信息和/或數(shù)據(jù)的交互。換言之,上述各個過程可以交叉重復(fù)進行。在步驟S160,當(dāng)應(yīng)用程序不再使用嵌入式設(shè)備時,調(diào)用關(guān)閉設(shè)備函數(shù)通知驅(qū)動模塊結(jié)束對嵌入式設(shè)備的訪問。在步驟S170,驅(qū)動模塊停止嵌入式設(shè)備。驅(qū)動模塊調(diào)用任務(wù)管理類函數(shù)刪除嵌入式設(shè)備的中斷處理任務(wù)。對于支持并行多任務(wù)的操作系統(tǒng),在驅(qū)動模塊使用可能與其他任務(wù)發(fā)生并行訪問沖突的資源前,執(zhí)行如下步驟驅(qū)動模塊在使用嵌入式設(shè)備的資源前,調(diào)用互斥鎖管理類函數(shù)獲得互斥鎖對要使用的臨界資源加鎖;在這一過程中,如果驅(qū)動模塊要使用的資源已經(jīng)加鎖,則等待該資源被釋放后才能獲得互斥鎖;在驅(qū)動模塊使用完嵌入式設(shè)備的資源后,調(diào)用互斥鎖管理類函數(shù)釋放互斥鎖。當(dāng)應(yīng)用程序進行多次與嵌入式設(shè)備的控制信息和/或數(shù)據(jù)交互時,每次都應(yīng)當(dāng)對可能發(fā)生并行訪問沖突的資源加鎖,并在使用完畢后解鎖。實模式下驅(qū)動模塊對嵌入式設(shè)備的緩存、寄存器的讀寫操作,可以調(diào)用通過現(xiàn)有技術(shù)中已有通用于不同操作系統(tǒng)的標(biāo)準(zhǔn)庫函數(shù)實現(xiàn)。對實模式操作系統(tǒng),采用本發(fā)明所述的驅(qū)動方法后,實模式操作系統(tǒng)的嵌入式設(shè)備驅(qū)動結(jié)構(gòu)如圖5所示,驅(qū)動模塊工作在操作系統(tǒng)抽象層與應(yīng)用程序之間,與VxWorks、OSE操作系統(tǒng)通過統(tǒng)一的操作系統(tǒng)抽象接口函數(shù)進行交互,與應(yīng)用程序之間通過驅(qū)動抽象接口函數(shù)進行交互。這樣,驅(qū)動模塊和應(yīng)用程序不經(jīng)改動即可適用于多個實模式操作系統(tǒng)。在保護模式操作系統(tǒng)中,與嵌入式設(shè)備的直接交互必須在內(nèi)核態(tài)進行。而不同的操作系統(tǒng)的內(nèi)核態(tài)差異非常大,實現(xiàn)內(nèi)核態(tài)操作系統(tǒng)接口的封裝不具備可行性,也就是說,工作在內(nèi)核態(tài)的模塊很難實現(xiàn)可移植性。因此,本發(fā)明中,將驅(qū)動模塊在操作系統(tǒng)抽象層上實現(xiàn),同時,建立操作系統(tǒng)內(nèi)核態(tài)內(nèi)存空間與用戶態(tài)內(nèi)存空間的映射關(guān)系,將嵌入式設(shè)備的控制寄存器、狀態(tài)寄存器、緩存等都映射到驅(qū)動模塊可訪問的用戶態(tài)內(nèi)存空間,使得驅(qū)動模塊可以通過對上述用戶態(tài)內(nèi)存空間的讀寫完成與嵌入式設(shè)備的控制信息和/或數(shù)據(jù)交互。對于需要進行中斷處理的嵌入式設(shè)備,還需要解決內(nèi)核態(tài)的中斷信息如何傳送到用戶態(tài)驅(qū)動模塊的問題。本發(fā)明采用異步通知函數(shù)來實現(xiàn),當(dāng)嵌入式設(shè)備產(chǎn)生中斷后,工作在內(nèi)核態(tài)的異步通知函數(shù)清空中斷,生成實時信號傳遞到用戶態(tài)的驅(qū)動模塊。除了涉及內(nèi)存映射和實時信號的部分以外,本發(fā)明所述方法在實模式操作系統(tǒng)中與在保護模式操作系統(tǒng)中基本上相同。圖6所示為在保護模式操作系統(tǒng)中,本發(fā)明所述嵌入式設(shè)備驅(qū)動方法的流程。在步驟S210,將不同操作系統(tǒng)的API封裝為統(tǒng)一的操作系統(tǒng)抽象接口函數(shù)。即提取出不同操作系統(tǒng)的API所具有的共性,并根據(jù)其共性制定出操作系統(tǒng)統(tǒng)一的封裝接口操作系統(tǒng)抽象接口函數(shù)。同樣,這些操作系統(tǒng)抽象接口函數(shù)是前述操作系統(tǒng)抽象層的組成部分。驅(qū)動模塊使用的這些操作系統(tǒng)抽象接口函數(shù)包括任務(wù)管理類函數(shù)用來創(chuàng)建、刪除從嵌入式設(shè)備接收實時信號的任務(wù);內(nèi)存管理類函數(shù)用來創(chuàng)建、刪除內(nèi)存池,從內(nèi)存池中分配內(nèi)存,將內(nèi)存歸還給內(nèi)存池。具體而言,驅(qū)動模塊使用該類函數(shù)與嵌入式設(shè)備進行數(shù)據(jù)交互的緩存,實現(xiàn)靜態(tài)內(nèi)存動態(tài)使用的目的;實時信號管理類函數(shù)用來創(chuàng)建、刪除、等待和釋放實時信號。具體而言,當(dāng)嵌入式設(shè)備產(chǎn)生中斷后,使用該類接口以實時信號的形式通知用戶態(tài)的驅(qū)動模塊該嵌入式設(shè)備產(chǎn)生了中斷。驅(qū)動模塊將進行中斷處理,例如如果是接收中斷,則通知應(yīng)用程序接收數(shù)據(jù);如果是告警中斷,則通知應(yīng)用程序設(shè)備故障;消息管理類函數(shù)用來創(chuàng)建、刪除消息隊列,將消息發(fā)送到消息隊列,從消息隊列中接收消息。具體而言,驅(qū)動模塊獲知嵌入式設(shè)備產(chǎn)生中斷,需要通知應(yīng)用程序,則使用該類函數(shù)以消息的形式通知應(yīng)用程序,同時還可以使用該類函數(shù)將嵌入式設(shè)備的數(shù)據(jù)傳送至應(yīng)用程序。;互斥鎖管理類函數(shù)用來創(chuàng)建、刪除、鎖定和打開互斥鎖。具體而言,驅(qū)動模塊使用該類函數(shù)實現(xiàn)對嵌入式設(shè)備的臨界資源(如緩存)的互斥操作;上述操作系統(tǒng)抽象接口的各類函數(shù)中,只有實時信號管理類函數(shù)與實模式操作系統(tǒng)中不同,并且其用戶只有驅(qū)動模塊,應(yīng)用程序不使用該類接口。在步驟S220,令驅(qū)動模塊為應(yīng)用程序提供統(tǒng)一的驅(qū)動抽象接口函數(shù)。一般會包括下述函數(shù)打開設(shè)備函數(shù)用來啟動對嵌入式設(shè)備的訪問;關(guān)閉設(shè)備函數(shù)用來結(jié)束對嵌入式設(shè)備的訪問;復(fù)位設(shè)備函數(shù)用來重新啟動對嵌入式設(shè)備的訪問;發(fā)送數(shù)據(jù)函數(shù)用來向嵌入式設(shè)備發(fā)送數(shù)據(jù);接收數(shù)據(jù)函數(shù)用來從嵌入式設(shè)備接收數(shù)據(jù);輸入輸出控制函數(shù)用來進行與嵌入式設(shè)備的控制信息的交互。與實模式操作系統(tǒng)中相同,驅(qū)動抽象接口函數(shù)可以根據(jù)具體的嵌入式設(shè)備的使用方法來確定,例如,以嵌入式ATM(AsynchronousTransferMode,異步傳輸模式)設(shè)備為例,驅(qū)動模塊向應(yīng)用程序提供如下驅(qū)動抽象接口函數(shù)鏈路創(chuàng)建函數(shù)(即打開設(shè)備函數(shù))s32open(u32u32ModuleId,conststruOpen*pStruOpen,u32*pu32ConnId),其中第一個參數(shù)為驅(qū)動模塊在操作系統(tǒng)中的ID(代號),第二個參數(shù)為物理鏈路創(chuàng)建使用的數(shù)據(jù)結(jié)構(gòu)指針,第三個參數(shù)為驅(qū)動返回的鏈路編號;鏈路關(guān)閉函數(shù)(即關(guān)閉設(shè)備函數(shù))s32close(u32u32ModuleId,u32u32ConnId),其中第一個參數(shù)為驅(qū)動的模塊ID,第二個參數(shù)為鏈路編號;鏈路復(fù)位函數(shù)(即復(fù)位設(shè)備函數(shù))s32reset(u32u32ModuleId,u32u32ConnId),其中第一個參數(shù)為驅(qū)動的模塊ID,第二個參數(shù)為鏈路編號;發(fā)送數(shù)據(jù)函數(shù)s32write(u32u32ModuleId,u32u32ConnId,u16u16Len,constu32*pu32Buf),其中第一個參數(shù)為驅(qū)動的模塊ID,第二個參數(shù)為鏈路編號,第三個參數(shù)為數(shù)據(jù)長度,第四個參數(shù)為指向發(fā)送數(shù)據(jù)的指針;接收數(shù)據(jù)函數(shù)s32read(u32u32ModuleId,u32u32ConnId,u16u16Len,u32*pu32Buf),其中第一個參數(shù)為驅(qū)動的模塊ID,第二個參數(shù)為鏈路編號,第三個參數(shù)為數(shù)據(jù)長度,第四個參數(shù)為指向接收數(shù)據(jù)的指針;輸入輸出控制函數(shù)s32ioctl(u32u32ModuleId,u32Cmd,u32Arg),其中第一個參數(shù)為驅(qū)動的模塊ID,第二個參數(shù)為I/O指令,第三個參數(shù)為I/O參數(shù)。輸入輸出函數(shù)提供了一種執(zhí)行嵌入式設(shè)備的命令的方法,有人把它戲稱為“垃圾桶”函數(shù),即除了鏈路創(chuàng)建、鏈路關(guān)閉、鏈路復(fù)位、數(shù)據(jù)發(fā)送、數(shù)據(jù)接收外的其它功能都可歸為輸入輸出操作。其第三個參數(shù)u32Arg可以是一個變量,也可以是一個數(shù)據(jù)結(jié)構(gòu)的地址,可以根據(jù)需要進行設(shè)計,如查詢數(shù)據(jù)發(fā)送統(tǒng)計信息、查詢數(shù)據(jù)接收統(tǒng)計信息、查詢芯片相關(guān)配置信息、安裝告警回調(diào)函數(shù)、安裝接收回調(diào)函數(shù)等等操作,都可以通過輸入輸出函數(shù)實現(xiàn)。在步驟S230,將嵌入式設(shè)備登記為操作系統(tǒng)支持的虛擬設(shè)備,建立虛擬設(shè)備的內(nèi)核態(tài)內(nèi)存空間與驅(qū)動模塊的用戶態(tài)內(nèi)存空間之間的映射。每個嵌入式設(shè)備的控制寄存器、狀態(tài)寄存器、緩存所占的地址空間均屬于內(nèi)核態(tài)地址空間的一部分,如前所述,在建立了內(nèi)核態(tài)與用戶態(tài)之間的內(nèi)存映射后,工作在用戶態(tài)的驅(qū)動模塊即可通過此內(nèi)存映射對嵌入式設(shè)備進行操作。建立內(nèi)存映射關(guān)系通過調(diào)用在內(nèi)核態(tài)操作系統(tǒng)中登記的內(nèi)存映射函數(shù)實現(xiàn)。在操作系統(tǒng)啟動時,需要進行對嵌入式設(shè)備的初始化工作,如設(shè)備檢測、向操作系統(tǒng)申請嵌入式設(shè)備占用的資源等;嵌入式設(shè)備可能占用的資源包括中斷、內(nèi)存等;對需要進行資源同步的嵌入式設(shè)備,例如具有接收數(shù)據(jù)功能的通信類設(shè)備,在滿足設(shè)定的條件時嵌入式設(shè)備會產(chǎn)生接收中斷,因此驅(qū)動模塊要為該嵌入式設(shè)備登記中斷號和中斷服務(wù)程序入口,這些均與現(xiàn)有技術(shù)相同,此處不再贅述。本步驟可以在操作系統(tǒng)啟動時執(zhí)行,也可以在操作系統(tǒng)啟動后第一次使用嵌入式設(shè)備前執(zhí)行。在步驟S240,對需要進行中斷處理的嵌入式設(shè)備,在操作系統(tǒng)為虛擬設(shè)備登記異步通知函數(shù),用來在嵌入式設(shè)備產(chǎn)生中斷時以實時信號的形式通知用戶態(tài)的驅(qū)動模塊該嵌入式設(shè)備產(chǎn)生了中斷及該中斷的類型。嵌入式設(shè)備產(chǎn)生中斷后,操作系統(tǒng)根據(jù)該嵌入式設(shè)備登記的中斷服務(wù)程序入口啟動中斷服務(wù)程序的執(zhí)行,在中斷服務(wù)程序中調(diào)用異步通知函數(shù)。在步驟S250,應(yīng)用程序調(diào)用打開設(shè)備函數(shù)通知驅(qū)動模塊對嵌入式設(shè)備進行訪問,并向驅(qū)動模塊傳遞嵌入式設(shè)備的工作參數(shù)。在步驟S260,驅(qū)動模塊啟動嵌入式設(shè)備。驅(qū)動模塊調(diào)用任務(wù)管理類函數(shù)創(chuàng)建從嵌入式設(shè)備接收實時信號的任務(wù),同時,驅(qū)動模塊根據(jù)應(yīng)用程序指定嵌入式設(shè)備的工作參數(shù),通過內(nèi)存映射方式對嵌入式設(shè)備進行相應(yīng)的配置。為對嵌入式設(shè)備的臨界資源進行保護,避免多任務(wù)環(huán)境下的并行訪問沖突,還需要調(diào)用互斥鎖管理類函數(shù)創(chuàng)建互斥鎖。在步驟S270,應(yīng)用程序調(diào)用操作系統(tǒng)抽象層提供的操作系統(tǒng)抽象接口函數(shù)和驅(qū)動抽象接口函數(shù),通過內(nèi)存映射與嵌入式設(shè)備進行控制信息和/或數(shù)據(jù)的交互。本步驟實際上是應(yīng)用程序使用嵌入式設(shè)備的具體過程,在這一過程中應(yīng)用程序可以進行發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、發(fā)送控制信息、讀取控制信息、復(fù)位嵌入式設(shè)備等中的一項或數(shù)項工作,以下分別介紹每項工作的具體執(zhí)行步驟。應(yīng)用程序向嵌入式設(shè)備發(fā)送數(shù)據(jù)的過程為應(yīng)用程序調(diào)用操作系統(tǒng)抽象層提供的內(nèi)存管理類函數(shù)從其占用的內(nèi)存池中分配發(fā)送緩沖區(qū);應(yīng)用程序?qū)?shù)據(jù)拷貝到發(fā)送緩沖區(qū);應(yīng)用程序調(diào)用發(fā)送數(shù)據(jù)函數(shù)將發(fā)送緩沖區(qū)的指針傳遞給驅(qū)動模塊;驅(qū)動模塊將發(fā)送緩沖區(qū)中的數(shù)據(jù)拷貝到嵌入式設(shè)備的緩存中,由嵌入式設(shè)備根據(jù)應(yīng)用程序的控制信息對數(shù)據(jù)進行處理;待數(shù)據(jù)拷貝完畢后,驅(qū)動模塊調(diào)用內(nèi)存管理類函數(shù)將發(fā)送緩沖區(qū)歸還到應(yīng)用程序的內(nèi)存池中。需要說明的是,雖然驅(qū)動模塊對嵌入式設(shè)備的發(fā)送緩存進行寫操作是在用戶空間進行的,但由于嵌入式設(shè)備初始化時已進行過內(nèi)存映射,所以,該嵌入式設(shè)備映射后在用戶空間的緩存地址,就相當(dāng)于映射前在內(nèi)核空間的緩存地址。因此要發(fā)送的數(shù)據(jù)實際上拷貝到了該嵌入式設(shè)備在內(nèi)核空間的緩存中。應(yīng)用程序從嵌入式設(shè)備讀取數(shù)據(jù)的過程為驅(qū)動模塊調(diào)用實時信號管理類函數(shù)創(chuàng)建并等待實時信號;嵌入式設(shè)備產(chǎn)生中斷,內(nèi)核態(tài)操作系統(tǒng)調(diào)用登記的異步通知函數(shù),清空中斷,產(chǎn)生實時信號發(fā)送至用戶態(tài)的驅(qū)動模塊,實時信號中包括該實時信號的標(biāo)識信息(ID),用來表示產(chǎn)生中斷的嵌入式設(shè)備和中斷類型;驅(qū)動模塊收到實時信號后,將嵌入式設(shè)備中的數(shù)據(jù)傳送至應(yīng)用程序。驅(qū)動模塊有兩種方式實現(xiàn)這一過程第一種是以消息的形式通知應(yīng)用程序取走數(shù)據(jù);第二種是直接將從嵌入式設(shè)備接收的數(shù)據(jù)作為消息的凈荷送往應(yīng)用程序的消息隊列。采用上述第一種方式的具體流程如下驅(qū)動模塊調(diào)用消息管理類函數(shù)發(fā)送消息通知應(yīng)用程序接收數(shù)據(jù);應(yīng)用程序收到通知消息后,先調(diào)用內(nèi)存管理類函數(shù)從所占內(nèi)存池中分配接收緩沖區(qū),再調(diào)用接收數(shù)據(jù)函數(shù)將接收緩沖區(qū)的指針傳遞給驅(qū)動模塊;驅(qū)動模塊從嵌入式設(shè)備的緩存中將數(shù)據(jù)拷貝到應(yīng)用程序指定的接收緩沖區(qū)中;應(yīng)用程序?qū)邮諗?shù)據(jù)處理完畢后調(diào)用內(nèi)存管理類函數(shù)將接收緩沖區(qū)歸還到其內(nèi)存池中。采用上述第二種方式的具體流程如下驅(qū)動模塊調(diào)用內(nèi)存管理類函數(shù)從所占內(nèi)存池中分配接收緩沖區(qū);驅(qū)動模塊從嵌入式設(shè)備的緩存中將數(shù)據(jù)拷貝到接收緩沖區(qū)中;驅(qū)動模塊調(diào)用消息管理類函數(shù)將接收緩沖區(qū)中的數(shù)據(jù)作為消息的凈荷送往應(yīng)用程序的消息隊列;應(yīng)用程序?qū)邮諗?shù)據(jù)處理完畢后調(diào)用內(nèi)存管理類函數(shù)將接收緩沖區(qū)歸還到驅(qū)動模塊的內(nèi)存池中。需要說明的是,在上述兩種方式中,雖然驅(qū)動模塊對嵌入式設(shè)備的緩存進行讀操作是在用戶空間進行的,但由于嵌入式設(shè)備初始化時已進行過內(nèi)存映射,所以,該嵌入式設(shè)備映射后在用戶空間的緩存地址,就相當(dāng)于映射前在內(nèi)核空間的緩存地址。因此驅(qū)動模塊拷貝的數(shù)據(jù)實際上來源于該嵌入式設(shè)備在內(nèi)核空間的緩存。是采用第一種方式,還是第二種方式取決于應(yīng)用需求。兩者的區(qū)別是采用第一種方式,應(yīng)用程序分配接收緩沖區(qū),驅(qū)動模塊提供數(shù)據(jù)接收函數(shù);采用第二種方式,驅(qū)動模塊分配接收緩沖區(qū),并且不需要提供數(shù)據(jù)接收函數(shù)。應(yīng)用程序向嵌入式設(shè)備發(fā)送控制信息的過程為應(yīng)用程序調(diào)用輸入輸出控制函數(shù)將控制信息發(fā)送至驅(qū)動模塊;驅(qū)動模塊通過內(nèi)存映射將控制信息寫入嵌入式設(shè)備的控制寄存器。應(yīng)用程序從嵌入式設(shè)備讀取控制信息的過程為應(yīng)用程序調(diào)用輸入輸出控制函數(shù)通知驅(qū)動模塊讀取嵌入式設(shè)備的控制信息;驅(qū)動模塊通過內(nèi)存映射讀入嵌入式設(shè)備寄存器中的控制信息,并向應(yīng)用程序返回該控制信息。在應(yīng)用程序?qū)η度胧皆O(shè)備的使用過程中,如果嵌入式設(shè)備發(fā)生異常,或者應(yīng)用程序需要打斷嵌入式設(shè)備正在進行的工作時,則需要復(fù)位嵌入式設(shè)備。具體過程為應(yīng)用程序調(diào)用復(fù)位設(shè)備函數(shù)通知驅(qū)動模塊復(fù)位對嵌入式設(shè)備的訪問;驅(qū)動模塊清空嵌入式設(shè)備的緩存和已接收但未處理的實時信號。與實模式操作系統(tǒng)中相同,應(yīng)用程序可以根據(jù)實際需要,交叉重復(fù)地多次進行上述各個過程。在步驟S280,當(dāng)應(yīng)用程序不再使用嵌入式設(shè)備時,調(diào)用關(guān)閉設(shè)備函數(shù)通知驅(qū)動模塊結(jié)束對嵌入式設(shè)備的訪問。在步驟S290,驅(qū)動模塊停止嵌入式設(shè)備。驅(qū)動模塊調(diào)用任務(wù)管理類函數(shù)刪除從嵌入式設(shè)備接收實時信號的任務(wù),同時,解除內(nèi)存映射關(guān)系,還需要調(diào)用互斥鎖管理類函數(shù)刪除互斥鎖,解除對嵌入式設(shè)備臨界資源的保護。對于支持并行多任務(wù)的操作系統(tǒng),在驅(qū)動模塊使用可能與其他任務(wù)發(fā)生并行訪問沖突的資源前,執(zhí)行如下步驟驅(qū)動模塊在使用嵌入式設(shè)備的資源前,調(diào)用互斥鎖管理類函數(shù)獲得互斥鎖對要使用的臨界資源加鎖;在這一過程中,如果驅(qū)動模塊要使用的資源已經(jīng)加鎖,則等待該資源被釋放后才能獲得互斥鎖;在驅(qū)動模塊使用完嵌入式設(shè)備的資源后,調(diào)用互斥鎖管理類函數(shù)釋放互斥鎖。當(dāng)應(yīng)用程序進行多次與嵌入式設(shè)備的控制信息和/或數(shù)據(jù)交互時,每次都應(yīng)當(dāng)對可能發(fā)生并行訪問沖突的資源加鎖,并在使用完畢后解鎖。保護模式下驅(qū)動模塊對用戶態(tài)內(nèi)存的讀寫操作,可以通過調(diào)用現(xiàn)有技術(shù)中已有通用于不同操作系統(tǒng)的標(biāo)準(zhǔn)庫函數(shù)實現(xiàn),因而本文中對這一過程不再贅述。在內(nèi)核態(tài)操作系統(tǒng)中登記的內(nèi)存映射函數(shù)和異步通知函數(shù)可以為超過一個工作在用戶態(tài)的驅(qū)動模塊服務(wù)。進行內(nèi)存映射時,映射足夠的內(nèi)存空間,使得超過一個用戶態(tài)下的驅(qū)動模塊能夠?qū)Ω髯缘那度胧皆O(shè)備進行控制信息和/或數(shù)據(jù)的交互。這些嵌入式設(shè)備發(fā)生中斷后,均調(diào)用同一個異步通知函數(shù),清空中斷,產(chǎn)生對應(yīng)于發(fā)生中斷的嵌入式設(shè)備的實時信號,并發(fā)送此實時信號通知對應(yīng)的驅(qū)動模塊。換言之,操作系統(tǒng)為每個嵌入式設(shè)備產(chǎn)生的實時信號不同于其他嵌入式設(shè)備。這樣,多個嵌入式設(shè)備在內(nèi)核態(tài)中只產(chǎn)生非常小的開銷。應(yīng)用本發(fā)明所述的驅(qū)動方法后,保護模式操作系統(tǒng)的嵌入式設(shè)備驅(qū)動結(jié)構(gòu)如圖7所示,驅(qū)動模塊工作在操作系統(tǒng)抽象層與應(yīng)用程序之間,運行在操作系統(tǒng)的用戶態(tài),與Windows、Linux操作系統(tǒng)通過統(tǒng)一的操作系統(tǒng)抽象接口函數(shù)進行交互,與應(yīng)用程序之間通過驅(qū)動抽象接口函數(shù)進行交互。而在操作系統(tǒng)的內(nèi)核態(tài),將嵌入式設(shè)備虛擬成操作系統(tǒng)可以識別的字符設(shè)備、塊設(shè)備或是網(wǎng)絡(luò)設(shè)備后,只需要向操作系統(tǒng)登記異步通知函數(shù)和內(nèi)存映射函數(shù),即可實現(xiàn)對嵌入式設(shè)備的驅(qū)動??梢?,在保護模式操作系統(tǒng)中,工作在用戶態(tài)的驅(qū)動模塊和應(yīng)用程序能夠不經(jīng)改動在不同的操作系統(tǒng)上移植,而內(nèi)核態(tài)的異步通知函數(shù)和內(nèi)存映射函數(shù)則隨操作系統(tǒng)的不同而需要修改。由于這兩個函數(shù)的功能非常簡單,對其進行的修改只需花費很少的時間和精力。仍以嵌入式ATM設(shè)備為例,在現(xiàn)有技術(shù)中ATM設(shè)備的驅(qū)動模塊代碼通常都超過8000行,功能復(fù)雜的驅(qū)動模塊可以達到將近20000行,這些代碼在更換操作系統(tǒng)時都需要進行修改。采用本發(fā)明后,更換操作系統(tǒng)時只需修改異步通知函數(shù)和內(nèi)存映射函數(shù)的代碼,而這兩個函數(shù)的代碼加起來不超過50行。在本發(fā)明中,在實模式操作系統(tǒng)中和保護模式操作系統(tǒng)中的操作系統(tǒng)抽象接口函數(shù)只有對實時信號的處理不同,因此,在實模式操作系統(tǒng)和保護模式操作系統(tǒng)之間,驅(qū)動模塊的移植也只需進行少量的修改工作。本發(fā)明中操作系統(tǒng)抽象接口函數(shù)與驅(qū)動抽象接口函數(shù)在實模式操作系統(tǒng)和保護模式操作系統(tǒng)中則完全相同,因而應(yīng)用程序不需修改即可通用與各種操作系統(tǒng)上,不論是實模式操作系統(tǒng)還是保護模式操作系統(tǒng)。更為重要的是,采用本發(fā)明能有效減少保護模式操作系統(tǒng)中驅(qū)動嵌入式設(shè)備在用戶態(tài)和內(nèi)核態(tài)的切換次數(shù),在MontavistaLinux下的實驗證明,整個系統(tǒng)的運行效率至少提高一倍,能滿足更高的實時性要求。隨著某些保護模式操作系統(tǒng),經(jīng)過對內(nèi)核調(diào)度方式的改進,成為實模式操作系統(tǒng)后,操作系統(tǒng)抽象層的設(shè)計方案就面臨著進退兩難的困境。如果僅僅封裝用戶態(tài)的API函數(shù),將無法解決驅(qū)動模塊的移植性問題。如果為驅(qū)動模塊單獨封裝內(nèi)核態(tài)的API函數(shù),又無法解決與其他操作系統(tǒng)兼容的問題。而應(yīng)用本發(fā)明后,不影響原有操作系統(tǒng)抽象層的設(shè)計思想,無論操作系統(tǒng)是否區(qū)分用戶態(tài)和內(nèi)核態(tài),均能兼容,并且操作系統(tǒng)抽象層的修改量較小。同時,應(yīng)用本發(fā)明后,驅(qū)動開發(fā)人員和應(yīng)用軟件開發(fā)人員可以使用統(tǒng)一的調(diào)試工具,節(jié)約培訓(xùn)、購買開發(fā)工具等成本。以上所述的本發(fā)明實施方式,并不構(gòu)成對本發(fā)明保護范圍的限定。任何在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的權(quán)利要求保護范圍之內(nèi)。權(quán)利要求1.一種保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于,包括以下步驟A)將不同操作系統(tǒng)的應(yīng)用程序接口API封裝為統(tǒng)一的操作系統(tǒng)抽象接口函數(shù);B)將嵌入式設(shè)備登記為操作系統(tǒng)支持的虛擬設(shè)備,建立所述虛擬設(shè)備的內(nèi)核態(tài)內(nèi)存空間與驅(qū)動模塊的用戶態(tài)內(nèi)存空間之間的映射;C)所述驅(qū)動模塊調(diào)用所述操作系統(tǒng)抽象接口函數(shù),通過內(nèi)存映射啟動所述嵌入式設(shè)備;D)應(yīng)用程序調(diào)用驅(qū)動模塊和操作系統(tǒng)的接口函數(shù),通過內(nèi)存映射與嵌入式設(shè)備進行控制信息和/或數(shù)據(jù)的交互;E)所述驅(qū)動模塊調(diào)用所述操作系統(tǒng)抽象接口函數(shù),通過內(nèi)存映射關(guān)閉所述嵌入式設(shè)備。2.按照權(quán)利要求1所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于所述步驟B)與步驟C)之間包括BC)向操作系統(tǒng)登記所述虛擬設(shè)備的異步通知函數(shù),用來在嵌入式設(shè)備產(chǎn)生中斷時向所述驅(qū)動模塊發(fā)送所述中斷的實時信號。3.按照權(quán)利要求2所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于,所述步驟A)與步驟B)之間包括AB)所述驅(qū)動模塊為應(yīng)用程序提供統(tǒng)一的驅(qū)動抽象接口函數(shù);步驟D)所述驅(qū)動模塊的接口函數(shù)為所述驅(qū)動抽象接口函數(shù);所述操作系統(tǒng)的接口函數(shù)為所述操作系統(tǒng)抽象接口函數(shù)。4.按照權(quán)利要求3所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于所述驅(qū)動抽象接口函數(shù)包括打開設(shè)備函數(shù)和關(guān)閉設(shè)備函數(shù),其中打開設(shè)備函數(shù)用來啟動對嵌入式設(shè)備的訪問;關(guān)閉設(shè)備函數(shù)用來結(jié)束對嵌入式設(shè)備的訪問;所述步驟BC)與步驟C)之間包括應(yīng)用程序調(diào)用打開設(shè)備函數(shù)通知驅(qū)動模塊對嵌入式設(shè)備進行訪問,并向驅(qū)動模塊指定嵌入式設(shè)備的工作狀態(tài);所述步驟D)與步驟E)之間包括應(yīng)用程序調(diào)用所述關(guān)閉設(shè)備函數(shù)通知所述驅(qū)動模塊結(jié)束對所述嵌入式設(shè)備的訪問。5.按照權(quán)利要求4所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于所述驅(qū)動抽象接口函數(shù)還包括輸入輸出控制函數(shù),用來進行與嵌入式設(shè)備的控制信息的交互;所述步驟D)包括應(yīng)用程序向嵌入式設(shè)備發(fā)送控制信息的過程,具體為應(yīng)用程序調(diào)用所述輸入輸出控制函數(shù)將控制信息發(fā)送至驅(qū)動模塊;驅(qū)動模塊通過內(nèi)存映射將控制信息寫入嵌入式設(shè)備的寄存器。所述步驟D)包括應(yīng)用程序從嵌入式設(shè)備讀取控制信息的過程,具體為應(yīng)用程序調(diào)用所述輸入輸出控制函數(shù)通知驅(qū)動模塊讀取嵌入式設(shè)備的控制信息;驅(qū)動模塊通過內(nèi)存映射讀入嵌入式設(shè)備寄存器中的控制信息,并向應(yīng)用程序返回該控制信息。6.按照權(quán)利要求5所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于所述操作系統(tǒng)抽象接口函數(shù)包括任務(wù)管理類函數(shù),用來創(chuàng)建、刪除從嵌入式設(shè)備接收實時信號的任務(wù);步驟C)具體為驅(qū)動模塊調(diào)用所述任務(wù)管理類函數(shù)創(chuàng)建從嵌入式設(shè)備接收實時信號的任務(wù),并根據(jù)應(yīng)用程序的指定通過內(nèi)存映射設(shè)置嵌入式設(shè)備的工作狀態(tài);步驟E)具體為驅(qū)動模塊調(diào)用所述任務(wù)管理類函數(shù)刪除從嵌入式設(shè)備接收實時信號的任務(wù),停止嵌入式設(shè)備,并解除所述內(nèi)存映射。7.按照權(quán)利要求6所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于所述操作系統(tǒng)抽象接口函數(shù)還包括內(nèi)存管理類函數(shù),用來創(chuàng)建、刪除內(nèi)存池,從內(nèi)存池中分配內(nèi)存,將內(nèi)存歸還給內(nèi)存池;所述驅(qū)動抽象接口函數(shù)還包括發(fā)送數(shù)據(jù)函數(shù),用來向嵌入式設(shè)備發(fā)送數(shù)據(jù);所述步驟D)包括應(yīng)用程序向嵌入式設(shè)備發(fā)送數(shù)據(jù)的過程,具體為應(yīng)用程序?qū)?shù)據(jù)拷貝到調(diào)用所述內(nèi)存管理類函數(shù)分配的發(fā)送緩沖區(qū)中;應(yīng)用程序調(diào)用所述發(fā)送數(shù)據(jù)函數(shù)將所述發(fā)送緩沖區(qū)的指針傳遞給驅(qū)動模塊;驅(qū)動模塊將發(fā)送緩沖區(qū)中的數(shù)據(jù)通過內(nèi)存映射拷貝到嵌入式設(shè)備的緩存中。8.按照權(quán)利要求7所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于所述操作系統(tǒng)抽象接口函數(shù)還包括實時信號管理類函數(shù)和消息管理類函數(shù),其中實時信號管理類函數(shù)用來創(chuàng)建、刪除、等待和釋放實時信號;消息管理類函數(shù)用來創(chuàng)建、刪除消息隊列,將消息發(fā)送到消息隊列,從消息隊列中接收消息;所述驅(qū)動抽象接口函數(shù)還包括接收數(shù)據(jù)函數(shù),用來從嵌入式設(shè)備接收數(shù)據(jù);所述步驟D)包括應(yīng)用程序從所述嵌入式設(shè)備接收數(shù)據(jù)的過程,具體為D1)驅(qū)動模塊調(diào)用實時信號管理類函數(shù)創(chuàng)建并等待實時信號;D2)操作系統(tǒng)根據(jù)嵌入式設(shè)備的中斷調(diào)用所述異步通知函數(shù)產(chǎn)生實時信號發(fā)送至驅(qū)動模塊;D3)驅(qū)動模塊通過調(diào)用所述消息管理類函數(shù)通過內(nèi)存映射將嵌入式設(shè)備中的數(shù)據(jù)傳送至應(yīng)用程序。9.按照權(quán)利要求8所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于,步驟D2)具體為操作系統(tǒng)根據(jù)產(chǎn)生中斷的嵌入式設(shè)備調(diào)用異步通知函數(shù)產(chǎn)生對應(yīng)于所述嵌入式設(shè)備的實時信號,并將所述實時信號發(fā)送至所述嵌入式設(shè)備的驅(qū)動模塊。10.按照權(quán)利要求9所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于,所述步驟D3)具體為驅(qū)動模塊調(diào)用所述消息管理類函數(shù)發(fā)送消息通知應(yīng)用程序接收數(shù)據(jù);應(yīng)用程序調(diào)用所述內(nèi)存管理類函數(shù)分配接收緩沖區(qū),調(diào)用所述接收數(shù)據(jù)函數(shù)將接收緩沖區(qū)的指針傳遞給驅(qū)動模塊;驅(qū)動模塊通過內(nèi)存映射將嵌入式設(shè)備緩存中的數(shù)據(jù)拷貝到應(yīng)用程序指定的接收緩沖區(qū)。11.按照權(quán)利要求10所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于,所述步驟D3)具體為驅(qū)動模塊調(diào)用內(nèi)存管理類函數(shù)分配接收緩沖區(qū),并通過內(nèi)存映射從嵌入式設(shè)備的緩存中將數(shù)據(jù)拷貝到接收緩沖區(qū)中;驅(qū)動模塊調(diào)用消息管理類函數(shù)將接收緩沖區(qū)中的數(shù)據(jù)作為消息的凈荷送往應(yīng)用程序的消息隊列。12.按照權(quán)利要求9至11任意一項所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于所述驅(qū)動抽象接口函數(shù)還包括復(fù)位設(shè)備函數(shù),用來重新啟動對嵌入式設(shè)備的訪問;所述步驟D)包括應(yīng)用程序復(fù)位嵌入式設(shè)備的過程,具體為應(yīng)用程序調(diào)用所述復(fù)位設(shè)備函數(shù)通知驅(qū)動模塊復(fù)位對嵌入式設(shè)備的訪問;驅(qū)動模塊清空嵌入式設(shè)備的緩存和未處理的實時信號。13.按照權(quán)利要求12所述保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于所述操作系統(tǒng)抽象接口函數(shù)還包括互斥鎖管理類函數(shù),用來創(chuàng)建、刪除、等待和釋放互斥鎖;所述驅(qū)動方法還包括驅(qū)動模塊在使用嵌入式設(shè)備的資源前,調(diào)用所述互斥鎖管理類函數(shù)獲得互斥鎖對要使用的臨界資源加鎖;驅(qū)動模塊使用完嵌入式設(shè)備的資源后,調(diào)用所述互斥鎖管理類函數(shù)釋放互斥鎖。14.一種實模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于,包括以下步驟a)將不同操作系統(tǒng)的應(yīng)用程序接口API封裝為統(tǒng)一的操作系統(tǒng)抽象接口函數(shù);b)驅(qū)動模塊調(diào)用所述操作系統(tǒng)抽象接口函數(shù)啟動嵌入式設(shè)備;c)應(yīng)用程序通過調(diào)用驅(qū)動模塊和操作系統(tǒng)的接口,與嵌入式設(shè)備進行控制信息和/或數(shù)據(jù)的交互;d)驅(qū)動模塊調(diào)用所述操作系統(tǒng)抽象接口函數(shù)停止嵌入式設(shè)備。15.按照權(quán)利要求14所述實模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,其特征在于,所述步驟a)與步驟b)之間包括ab)所述驅(qū)動模塊為應(yīng)用程序提供統(tǒng)一的驅(qū)動抽象接口函數(shù);步驟c)所述驅(qū)動模塊的接口函數(shù)為所述驅(qū)動抽象接口函數(shù);所述操作系統(tǒng)的接口函數(shù)為所述操作系統(tǒng)抽象接口函數(shù)。全文摘要本發(fā)明公開了一種保護模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法,包括將不同操作系統(tǒng)的應(yīng)用程序接口API封裝為統(tǒng)一的操作系統(tǒng)抽象接口函數(shù);將嵌入式設(shè)備登記為操作系統(tǒng)支持的虛擬設(shè)備,建立所述虛擬設(shè)備的內(nèi)核態(tài)內(nèi)存空間與驅(qū)動模塊的用戶態(tài)內(nèi)存空間之間的映射;應(yīng)用程序調(diào)用驅(qū)動模塊和操作系統(tǒng)的接口函數(shù),通過內(nèi)存映射與嵌入式設(shè)備進行控制信息和/或數(shù)據(jù)的交互。本發(fā)明還公開了一種實模式操作系統(tǒng)中嵌入式設(shè)備的驅(qū)動方法。應(yīng)用本發(fā)明后,驅(qū)動模塊能夠不經(jīng)改動在不同的實模式操作系統(tǒng)上移植,而只需對在內(nèi)核態(tài)函數(shù)進行少量改動即可在保護模式操作系統(tǒng)上移植,并提高系統(tǒng)的運行效率;應(yīng)用程序不經(jīng)改動即可在各種操作系統(tǒng)上移植。文檔編號G06F9/44GK1866202SQ200510070699公開日2006年11月22日申請日期2005年5月18日優(yōu)先權(quán)日2005年5月18日發(fā)明者陳劍申請人:大唐移動通信設(shè)備有限公司