亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于S3C2440的Windows CE設(shè)備驅(qū)動(dòng)的研究與實(shí)踐

        2008-04-12 00:00:00閆效鶯
        現(xiàn)代電子技術(shù) 2008年6期

        摘 要:隨著信息化、智能化、網(wǎng)絡(luò)化的發(fā)展,嵌入式技術(shù)已經(jīng)成為通信和消費(fèi)類產(chǎn)品的共同發(fā)展方向。簡(jiǎn)要介紹嵌入式操作系統(tǒng)Windows CE,同時(shí)對(duì)Windows CE下兩種基本的驅(qū)動(dòng)開(kāi)發(fā)模型本機(jī)設(shè)備驅(qū)動(dòng)程序和流接口驅(qū)動(dòng)程序進(jìn)行重點(diǎn)說(shuō)明。在了解兩種模型的基礎(chǔ)上,以基于S3C2440處理器的UART0驅(qū)動(dòng)程序開(kāi)發(fā)為例,詳細(xì)介紹嵌入式操作系統(tǒng)Windows CE下流接口設(shè)備驅(qū)動(dòng)開(kāi)發(fā)的具體過(guò)程。

        關(guān)鍵詞:嵌入式操作系統(tǒng);Windows CE;設(shè)備驅(qū)動(dòng)開(kāi)發(fā);UART0

        中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:B

        文章編號(hào):1004-373X(2008)06-153-03

        Research and Practice of Device Driver of Windows CE Based on S3C2440

        SUN Ting,TIAN Ze,YAN Xiaoying

        (School of Computer Science,Xi′an Shiyou University,Xi′an,710065,China)

        Abstract:With the development of information,intelligence and network,embedded technology has became common direction of communication and consumption products.This paper simply introduces embedded operating system Windows CE,at the same time especially explains two basal driver model of native and stream interface device drivers under the Windows CE.With this understanding,it takes the driver development of UART0 which is based on processor of S3C2440 as an example,introduces the development process of stream interface device driver for embedded Windows CE in details.

        Keywords:embedded OS;Windows CE;device driver development;UART0

        1 引 言

        伴隨后PC時(shí)代的到來(lái),人們?cè)絹?lái)越多地接觸到一個(gè)新的概念——嵌入式技術(shù)。嵌入式技術(shù)已被廣泛地應(yīng)用于科學(xué)研究、工程設(shè)計(jì)、軍事技術(shù)以及文藝商業(yè)等方面,成為后PC時(shí)代IT領(lǐng)域發(fā)展的主力軍。這也極大地刺激了嵌入式系統(tǒng)的發(fā)展和產(chǎn)業(yè)化的進(jìn)程。而嵌入式操作系統(tǒng)作為嵌入式系統(tǒng)的核心,是連接嵌入式設(shè)備和應(yīng)用的重要部件。他一方面要支持各種功能及規(guī)格的硬件設(shè)備,另一方面要為各種應(yīng)用程序提供一致的功能調(diào)用接口,同時(shí)還需要在有限的系統(tǒng)資源上盡可能快地完成應(yīng)用的計(jì)算需求。目前,主流的嵌入式操作系統(tǒng)有嵌入式Linux,Palm OS,VxWorks,Windows CE等。

        2 Windows CE簡(jiǎn)介

        Windows CE是一個(gè)開(kāi)放的、可裁剪的、32位實(shí)時(shí)嵌入式窗口操作系統(tǒng)。和其他桌面版窗口操作系統(tǒng)相比,他具有可靠性好、實(shí)時(shí)性高、內(nèi)核體積小及可伸縮性、強(qiáng)大的通信能力等特點(diǎn)。所以其被廣泛用于各種嵌入式智能設(shè)備的開(kāi)發(fā),是當(dāng)今應(yīng)用最多、增長(zhǎng)最快的嵌入式操作系統(tǒng)。

        Windows CE是從整體上為有限資源的平臺(tái)設(shè)計(jì)的多線程、完整優(yōu)先權(quán)、多任務(wù)的操作系統(tǒng)。他采用高度的模塊化設(shè)計(jì),這些模塊之間可能是獨(dú)立的,也可能有一些依賴關(guān)系。在Windows CE中最主要的系統(tǒng)模塊有5個(gè):

        (1)內(nèi)核(NK):Windows CE的內(nèi)核可以非常小,最小的內(nèi)核只有500 kB。這是因?yàn)橄到y(tǒng)的大部分功能都可以在各自的功能模塊中完成。他是整個(gè)Windows CE操作系統(tǒng)的核心,主要完成6類功能,即處理器調(diào)度、內(nèi)存管理、異常處理、系統(tǒng)內(nèi)的通信機(jī)制、為其他部分提供核心調(diào)用例程、為系統(tǒng)范圍內(nèi)的調(diào)試提供支持。

        (2) 設(shè)備管理模塊:提供系統(tǒng)范圍內(nèi)基本的設(shè)備列表管理、即插即用管理、電源管理、I/O資源管理等,并實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)程序得以工作的基本機(jī)制。設(shè)備配置信息存儲(chǔ)在Windows CE的注冊(cè)表中。

        (3) 數(shù)據(jù)存儲(chǔ)模塊:提供基本的數(shù)據(jù)存儲(chǔ)能力,包括對(duì)象存儲(chǔ)和文件系統(tǒng)。目前,對(duì)象存儲(chǔ)的大小限制為256 MB的RAM ,對(duì)象存儲(chǔ)里的單個(gè)文件限制為最大32 MB。對(duì)象存儲(chǔ)在Windows CE中的作用類似于PC機(jī)中的硬盤,他為應(yīng)用程序及相關(guān)數(shù)據(jù)提供持久穩(wěn)固的存儲(chǔ)。在Windows CE中提供了三種文件系統(tǒng),分別為基于ROM文件系統(tǒng)、基于RAM文件系統(tǒng)、以及用于支持外圍存儲(chǔ)設(shè)備的FAT文件系統(tǒng)。另外,嵌入式開(kāi)發(fā)者也可以創(chuàng)建和注冊(cè)屬性文件系統(tǒng)。

        (4) 圖形用戶界面模塊(GWES):他提供以下幾個(gè)主要功能:基本的繪圖引擎、窗口管理、界面的事件機(jī)制等。在Windows CE中GWES是操作系統(tǒng)、應(yīng)用程序以及用戶之間的接口。他支持組成Windows CE圖形用戶界面的窗口、對(duì)話框、控件、菜單和資源,使用戶能夠控制應(yīng)用程序。同時(shí)GWES還負(fù)責(zé)部分驅(qū)動(dòng)程序的加載工作,主要包括顯示、鍵盤、鼠標(biāo)及觸摸屏等的驅(qū)動(dòng)。

        (5) 通信模塊:在整個(gè)Windows CE中,網(wǎng)絡(luò)通信模塊是最為獨(dú)立的一部分,他運(yùn)行時(shí)體現(xiàn)為一系列的動(dòng)態(tài)鏈接庫(kù)。其設(shè)計(jì)目標(biāo)主要體現(xiàn)在4點(diǎn):

        高效能 提供最好的網(wǎng)絡(luò)應(yīng)用平臺(tái);

        包容力 支持廣泛的網(wǎng)絡(luò)類型和選項(xiàng);

        易用性 通過(guò)系統(tǒng)提供的API,用戶可以容易地開(kāi)發(fā)出各種網(wǎng)絡(luò)應(yīng)用;

        可拆卸 這是整個(gè)網(wǎng)絡(luò)系統(tǒng)構(gòu)架的特征,系統(tǒng)可以拆成很多獨(dú)立的部分,應(yīng)用系統(tǒng)可以根據(jù)需要選擇其中一部分,這樣可以降低系統(tǒng)開(kāi)銷,使系統(tǒng)更加精簡(jiǎn)。

        除了這5個(gè)主要的系統(tǒng)模塊外,Windows CE還有一些其他的模塊,如OAL模塊、驅(qū)動(dòng)程序模塊等。在實(shí)際的開(kāi)發(fā)應(yīng)用中,嵌入式開(kāi)發(fā)者可以根據(jù)設(shè)備的性質(zhì)只選擇那些必要的模塊或模塊中的組件包含進(jìn)操作系統(tǒng)鏡像中。

        3 Windows CE驅(qū)動(dòng)開(kāi)發(fā)模型

        通常設(shè)備驅(qū)動(dòng)程序在操作系統(tǒng)中扮演著無(wú)名英雄的角色。正是由于驅(qū)動(dòng)程序的存在,大多數(shù)操作系統(tǒng)上的應(yīng)用程序都是與硬件無(wú)關(guān)的,應(yīng)用程序的開(kāi)發(fā)者和最終用戶通常都不必關(guān)心底層的硬件是怎么工作的。Windows CE之所以能夠支持各種各樣的硬件設(shè)備,毫無(wú)疑問(wèn),也是因?yàn)槎加衅鋵?duì)應(yīng)的設(shè)備驅(qū)動(dòng)程序。設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)與硬件交互的方式,是連接硬件與操作系統(tǒng)之間的橋梁。

        當(dāng)前,Windows CE有4種設(shè)備模型[2]。其中本機(jī)設(shè)備驅(qū)動(dòng)程序和流接口驅(qū)動(dòng)程序模型是專用于Windows CE驅(qū)動(dòng)程序的開(kāi)發(fā)方法。另外兩種外部模型也可應(yīng)用于其他操作系統(tǒng),他們分別是通用串行總線(USB)和網(wǎng)絡(luò)驅(qū)動(dòng)器接口標(biāo)準(zhǔn)(NDIS)的驅(qū)動(dòng)程序。

        3.1 本機(jī)設(shè)備驅(qū)動(dòng)程序

        在開(kāi)始本機(jī)設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)前,必須先了解哪些設(shè)備的驅(qū)動(dòng)程序用本機(jī)設(shè)備驅(qū)動(dòng)模型實(shí)現(xiàn)。正如他的名字,本機(jī)設(shè)備驅(qū)動(dòng)程序適用于集成到基于Windows CE平臺(tái)的設(shè)備。如鍵盤、顯示器、PC卡插槽等設(shè)備的驅(qū)動(dòng)。本機(jī)設(shè)備驅(qū)動(dòng)程序通常使用Windows CE提供的特定接口,因此本機(jī)設(shè)備驅(qū)動(dòng)程序都有明確和專一的目的。微軟本身提供了很多本機(jī)設(shè)備驅(qū)動(dòng)程序的樣本程序,這樣絕大多數(shù)的開(kāi)發(fā)人員不需要編寫本機(jī)設(shè)備驅(qū)動(dòng)程序。除非是OEM開(kāi)發(fā)商想為新平臺(tái)定制Windows CE ,那么他們就可以編寫自己的本機(jī)設(shè)備驅(qū)動(dòng)程序,當(dāng)然他們也可以將微軟的本機(jī)設(shè)備驅(qū)動(dòng)程序的例子直接移植到新平臺(tái)上。本機(jī)設(shè)備驅(qū)動(dòng)程序分為2種類型:?jiǎn)纹?qū)動(dòng)程序和分層的驅(qū)動(dòng)程序\\[3\\],如圖1所示。單片驅(qū)動(dòng)程序的代碼直接與硬件交互,因此他包含與特定的某款硬件相關(guān)聯(lián)的代碼。通常,單片驅(qū)動(dòng)程序會(huì)暴露DDI接口給操作系統(tǒng),DDI函數(shù)是操作系統(tǒng)與驅(qū)動(dòng)程序交互的接口協(xié)議。而分層驅(qū)動(dòng)程序由2個(gè)設(shè)置好的層組成:上層是模型設(shè)備驅(qū)動(dòng)程序(MDD),下層是依賴平臺(tái)的驅(qū)動(dòng)程序(PDD)。MDD層與硬件平臺(tái)無(wú)關(guān),他通過(guò)驅(qū)動(dòng)程序接口DDI與應(yīng)用程序通信。在開(kāi)發(fā)驅(qū)動(dòng)程序時(shí),一般不必修改MDD層。只需關(guān)心與具體硬件平臺(tái)有關(guān)的下層,依賴平臺(tái)的驅(qū)動(dòng)程序?qū)覲DD。PDD層通過(guò)設(shè)備驅(qū)動(dòng)服務(wù)接口DDSI直接管理硬件。通常,MDD層的代碼與PDD層的代碼會(huì)被編譯成獨(dú)立的靜態(tài)LIB庫(kù),然后進(jìn)行鏈接,形成可執(zhí)行的驅(qū)動(dòng)程序。因此,MDD和PDD的劃分只是在源代碼邏輯層面,在驅(qū)動(dòng)程序的二進(jìn)制可執(zhí)行代碼中不會(huì)存在MDD與PDD的分層。

        3.2 流接口驅(qū)動(dòng)程序

        流接口驅(qū)動(dòng)程序是為了連接到Windows CE的平臺(tái)的外圍設(shè)備設(shè)計(jì)的,如打印機(jī)、尋呼機(jī)、調(diào)制解調(diào)器等。他是動(dòng)態(tài)鏈接庫(kù),由設(shè)備管理器動(dòng)態(tài)加載、管理和卸載。與具有單獨(dú)目的接口的本機(jī)設(shè)備驅(qū)動(dòng)程序相比,流接口驅(qū)動(dòng)都使用相同的接口導(dǎo)出一組相同的函數(shù)[CD2]流接口函數(shù)。流接口函數(shù)也稱作流接口驅(qū)動(dòng)的入口點(diǎn),用來(lái)完成標(biāo)準(zhǔn)的文件I/O函數(shù)和電源管理函數(shù),這些函數(shù)是提供給Windows CE的操作系統(tǒng)內(nèi)核使用的。流接口驅(qū)動(dòng)的入口點(diǎn)主要包括 XXX_Init,XXX_Deinit,XXX_Open,XXX_Close,XXX_Read,XXX_Write,XXX_Seek,XXX_PowerUp,XXX_PowerDown和XXX_IOControl,其中XXX是在驅(qū)動(dòng)程序注冊(cè)表里定義的設(shè)備文件名的前綴。在Windows CE中設(shè)備文件名是由3個(gè)大寫字母、1個(gè)數(shù)字和1個(gè)冒號(hào)組成的。

        流接口驅(qū)動(dòng)對(duì)硬件設(shè)備的訪問(wèn)涉及5個(gè)步驟[4]:應(yīng)用程序、FileSys.exe、設(shè)備管理器、流式接口驅(qū)動(dòng)程序本身以及硬件。其中,應(yīng)用程序和流式接口驅(qū)動(dòng)程序是用戶編寫的;FileSys.exe與設(shè)備管理器是Windows CE操作系統(tǒng)提供的組件,用戶無(wú)法修改。圖2是流式接口驅(qū)動(dòng)程序的體系結(jié)構(gòu)。

        從圖2可以知道,首先,應(yīng)用程序使用文件API對(duì)設(shè)備進(jìn)行訪問(wèn),文件API被操作系統(tǒng)轉(zhuǎn)發(fā)到FileSys.exe進(jìn)程中;然后FileSys.exe發(fā)現(xiàn)是對(duì)設(shè)備的操作,就會(huì)把執(zhí)行交給設(shè)備管理器處理;接著設(shè)備管理器根據(jù)具體的請(qǐng)求,調(diào)用不同的流式接口驅(qū)動(dòng)程序中暴露的接口;最終,驅(qū)動(dòng)程序負(fù)責(zé)與硬件交互。

        4 Windows CE驅(qū)動(dòng)開(kāi)發(fā)實(shí)例

        下面以UART0驅(qū)動(dòng)程序?yàn)槔?,具體介紹驅(qū)動(dòng)程序的開(kāi)發(fā)。

        S3C2440A是三星公司推出的16/32位精簡(jiǎn)指令集微處理器,他是為應(yīng)用于小型掌上設(shè)備和高性價(jià)比,低功耗,高性能的嵌入式系統(tǒng)應(yīng)用而提供的微控制解決方案。S3C2440使用ARM920T內(nèi)核,芯片上提供的集成功能包括:分開(kāi)的16 k指令/數(shù)據(jù)緩存、SDRAM控制器、LCD控制器、4通道DMA、3通道UART、I2C總線、I2S總線、SD主機(jī)接口、PWM定時(shí)器、看門狗、片上PLL時(shí)鐘發(fā)生器、8通道10位AD控制器和觸摸屏接口、攝像頭接口以及帶日歷函數(shù)的實(shí)時(shí)時(shí)鐘。S3C2440A最高頻率可達(dá)533 MHz,且功耗只有mW級(jí)。

        S3C2440 UART提供3個(gè)獨(dú)立的異步串行I/O口,每1個(gè)口均可以工作在中斷或DMA模式下。也就是說(shuō)UART通過(guò)產(chǎn)生1個(gè)中斷或DMA請(qǐng)求來(lái)在CPU和UART之前傳輸數(shù)據(jù)。

        每個(gè)UART通道包括2個(gè)用于接收和傳輸?shù)?6 B的FIFOs。

        首先需要在oalintr.h中添加UART的中斷號(hào),然后在cfw.c中初始化UART中斷。接下來(lái)修改BSP中帶有的UART的驅(qū)動(dòng)程序,實(shí)現(xiàn)相應(yīng)的功能即可。

        (1) 注冊(cè)中斷

        首先需要在oalintr.h中添加UART的中斷號(hào),然后在cfw.c中初始化UART中斷。最后在armint.c的實(shí)現(xiàn)物理中斷與邏輯中斷的關(guān)聯(lián)。

        ① 在platform\\\\smdk2440\\\\inc\\\\Oalintr.h文件中添加:

        #define SYSINTR_UART0(SYSINTR_FIRMWARE+3)

        在platform\\\\smdk2440\\\\inc\\\\Oalintr.inc添加:

        SYSINTR_UART0:.equ SYSINTR_FIRMWARE+3

        ② 修改cfw.c文件

        case SYSINTR_UART0: // Serial port.

        s2440INT->rSUBSRCPND = (INTSUB_RXD0 | INTSUB_TXD0 | INTSUB_ERR0);

        s2440INT->rINTSUBMSK = ~I(xiàn)NTSUB_RXD0;

        s2440INT->rINTSUBMSK = ~I(xiàn)NTSUB_TXD0;

        s2440INT->rINTSUBMSK = ~I(xiàn)NTSUB_ERR0;

        s2440INT->rSRCPND = BIT_UART0;

        if (s2440INT->rINTPND BIT_UART0) s2440INT->rINTPND = BIT_UART0;

        s2440INT->rINTMSK = ~BIT_UART0;

        break;

        (2) 在smdk2440\\\\drivers下創(chuàng)建UART0文件夾,將drivers\\\\serial中的文件復(fù)制一份到這個(gè)文件夾中。并把ser2440.def、ser2440_hw.c、ser2440_ser依次改為UART0.def、UART0_hw.c、UART0_ser,同時(shí)修改drivers\\\\dirs文件,添加UART0即可。

        (3) 完成.def文件、source文件和platform.reg的修改

        ① .def文件修改如下:

        將LIBRARY ser2440分別改為L(zhǎng)IBRARY UART0。

        ② source文件修改如下:

        將TARGETNAME=ser2440改為TARGETNAME=UART0。

        將SOURCES=

        ser2440_ser.c

        ser2440_hw.c

        修改為:

        SOURCES=

        UART0_ser.c

        UART0_hw.c

        ③ smdk2440\\\\files\\\\platform.reg修改

        將注冊(cè)表中原有的關(guān)于ser2440的部分替換為UART0即可。

        (4) 修改bib文件

        有了驅(qū)動(dòng)程序和注冊(cè)表文件,驅(qū)動(dòng)程序還不能夠正確地運(yùn)行。因?yàn)樗€沒(méi)有被加入到內(nèi)核中。添加一個(gè)文件到定制的內(nèi)核中的方法有2種:一種是修改BIB文件,另一種是編寫一個(gè)CEC文件添加到PB中。這里選擇bib 文件。在smdk2440\\\\files\\\\platform.bib中IF BSP_NOSERIAL !和ENDIF BSP_NOSERIAL !之間添加:

        UART0.Dll(_FLATRELEASEDIR)\\\\UART0.Dll NK SH

        并注釋掉:

        ;irsir.dll (_FLATRELEASEDIR)\\\\irsir.dll NK SH

        ;irda2440.dll (_FLATRELEASEDIR)\\\\ser2440.dll NK SH

        ;ser2440.dll (_FLATRELEASEDIR)\\\\ser2440.dll NK SH

        完成以上修改后rebuild就可以實(shí)現(xiàn)UART0的驅(qū)動(dòng),然后下載內(nèi)核到目標(biāo)板利用串口調(diào)試程序測(cè)試。

        5 結(jié) 語(yǔ)

        在嵌入式技術(shù)飛速發(fā)展的今天,Windows CE必將有廣泛的應(yīng)用前景。編寫高效的設(shè)備驅(qū)動(dòng)程序也將帶動(dòng)外圍設(shè)備的開(kāi)發(fā)。

        參考文獻(xiàn)

        [1]陳向群,王雷.Windows CE.NET 系統(tǒng)分析及實(shí)驗(yàn)教程[M].北京:機(jī)械工業(yè)出版社,2003.

        [2]Microsoft.Microsoft Windows CE Device Driver Kit[ M].希望電腦公司,譯.北京:希望電子出版社,2000.

        [3]周毓林,寧楊,陸貴強(qiáng),等.Windows CE.net內(nèi)核定制及應(yīng)用開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2005.

        [4]何宗鍵.Windows CE嵌入式系統(tǒng)[M].北京:北京航空航天大學(xué)出版社,2006.

        [5]SUMSUNG S3C2440A用戶手冊(cè)\\[Z\\].

        亚洲性码不卡视频在线| 亚洲中文字幕无码mv| 日韩免费一区二区三区在线| 人妖熟女少妇人妖少妇| 国产成人一区二区三区影院| 人成午夜免费视频无码| 伊人色综合九久久天天蜜桃| 99久久精品国产片| 亚洲婷婷久久播66性av| 无码爆乳护士让我爽| 日产精品久久久久久久蜜臀 | 国产卡一卡二卡三| 人妻精品丝袜一区二区无码AV| 国产av熟女一区二区三区蜜臀 | 国产精品女同二区五区九区| 精品欧美一区二区三区久久久| 草草久久久无码国产专区| 无码不卡一区二区三区在线观看| 丰满人妻一区二区三区52| 久久人人爽人人爽人人片av高请| 老师翘臀高潮流白浆| 一个人免费观看在线视频播放| 国产一区二区三区精品毛片| 久久精品国产99国产精偷| 丰满少妇愉情中文字幕18禁片| 亚洲av永久无码精品水牛影视| 最新在线观看免费的a站国产| 久久久av波多野一区二区| 亚洲特黄视频| 成人一区二区三区蜜桃| 亚洲av无码精品无码麻豆| 99久久精品费精品国产一区二区| 亚洲色图综合免费视频| 国产日产亚洲系列首页| 亚洲精品无码高潮喷水a片软| 色婷婷七月| 国内精品国产三级国产avx| 一个人看的www片免费高清视频 | 粗一硬一长一进一爽一a级| 亚洲中文字幕有综合久久| 国产一区二区三区中文在线|