討論了Windows CE環(huán)境下無(wú)線(xiàn)網(wǎng)卡的安裝,并提出了一種在系統斷電重啟時(shí)自動(dòng)安裝無(wú)線(xiàn)網(wǎng)卡的解決方案。對Windows CE的系統定制、應用程序的開(kāi)發(fā)及系統封裝進(jìn)行了介紹。 Windows CE是為多種嵌入式系統和產(chǎn)品而設計的緊湊、高效、可升級的操作系統,并特別為有限的硬件資源設計了多線(xiàn)程、多任務(wù)和完全優(yōu)先的操作系統環(huán)境。在無(wú)線(xiàn)通信領(lǐng)域有很大的應用前景。 本文重點(diǎn)討論了Windows CE環(huán)境下無(wú)線(xiàn)網(wǎng)卡的安裝,并提出了一種在系統斷電重啟時(shí)自動(dòng)安裝無(wú)線(xiàn)網(wǎng)卡的解決方案;還對Windows CE的系統定制、應用程序的開(kāi)發(fā)及系統封裝進(jìn)行了介紹。由于Windows CE與Windows的同源和相似,決定了學(xué)習Windows CE的簡(jiǎn)易性,這樣就縮短了應用者的開(kāi)發(fā)周期。 1 Windows CE簡(jiǎn)介 Windows CE包括四大基本模塊,它們提供了操作系統的關(guān)鍵特性,分別是:內核(Kernel)模塊、對象存儲(Object Store)模塊、GWES(用戶(hù)、應用程序和操作系統之間的圖形用戶(hù)界面)模塊和通信(Communication)模塊。圖1為Windows CE的模塊化結構圖。 操作系統定制工具有Windows CE Platform Builder(簡(jiǎn)稱(chēng)PB),應用程序開(kāi)發(fā)工具有嵌入式開(kāi)發(fā)工具包Embedded Visual Tools,包括Embedded Visual C++(簡(jiǎn)稱(chēng)EVC)和Embedded Visual Basic(簡(jiǎn)稱(chēng)EVB)。 2 特定硬件平臺Windows CE操作系統的開(kāi)發(fā) 有了具體的嵌入式硬件平中后,就可以為其開(kāi)發(fā)滿(mǎn)足特定功能需要的Windows CE系統?傊,可以分成三個(gè)步驟:操作系統的定制、特定功能應用程序模塊的開(kāi)發(fā)、功能模塊封裝入操作系統。 2.1 操作系統的初步定制 圖2為在PB中定制Windows CE操作系統的一般流程。 首先,選擇操作系統的基本配置,并且為特定的平臺選擇相應的微處理器和平臺支持包BPS(Board Support Packet)。PB提供的BSP有CEPC(基于PC機的WinCE硬件開(kāi)發(fā)平臺)。開(kāi)發(fā)者可以選擇其一或自己定制特定平臺的BPS。其次,制定平臺,在此階段可開(kāi)發(fā)設備驅動(dòng),適當地裁剪、添加組件,如有必要還需對某些配置文件進(jìn)行修改。然后,封裝所需要的各功能模塊,編譯生成OS鏡像文件。若設備為自己定制的目標設備,則需開(kāi)發(fā)OAL(OEM Adaptation Layer)、BPS和BootLoader。接著(zhù),把鏡像文件下載到目標設備,進(jìn)行調試;需要的話(huà),進(jìn)行重復配置、封裝、下載及調試,需要的話(huà),進(jìn)行重復配置、封裝、下載及調試,直到滿(mǎn)足要求,完成平臺的創(chuàng )建。 最后導出相應的SDK(Software Development Kit)軟件開(kāi)發(fā)工具包,運行后加域到EVC中,使得可以進(jìn)行特定硬件平臺上的應用程序開(kāi)發(fā)。SDK包含程序庫、頭文件、示例程序源代碼和庫函數使用文檔,同時(shí)還包括編程指導和API參與以及設備驅動(dòng)工具包(DDK)。 2.2 特定功能應用程序模塊的開(kāi)發(fā) 開(kāi)發(fā)特定功能的應用程序模塊就是在EVC中編寫(xiě)應用程序,滿(mǎn)足系統功能擴充的需要。重點(diǎn)要做以下工作: (1)為特定平臺選擇相應的微處理器,如WCE THUMB或WCE x86em等。 (2)編寫(xiě)應用程序。方法上EVC與PC機上運行的VC差別不大。兩者的區別主要有:前者的API是后者API的子集,對不兼容的函數要做一些修改或者尋求可替代的函數;前者為Unicode環(huán)境,所有字符都是兩個(gè)字節,而后者為ANSI美國標準,每個(gè)字符一個(gè)字節,因此必要時(shí)兩者間要作數據類(lèi)型轉換;另外在用戶(hù)界面編程和內存管理等方面也有些差異。 (3)對程序進(jìn)行編譯和調試。編譯時(shí)一定要選擇特定的硬件平臺。調試時(shí)可用微軟件包提供的工具M(jìn)icrosoft Activesync建立PC機上與目標機的連接,把系統鏡像從PC機下載到目標機上進(jìn)行調試;另外EVC中帶有模擬器,可以在PC機上模擬目標平臺上的大部分功能。 2.3 功能模塊封裝入系統 OEM開(kāi)發(fā)者通常把必要的應用程序和操作系統封裝在一起發(fā)布給使用者,因此要把應用程序打包封裝入初步制定的操作系統中。需要做的工作主要有兩個(gè): (1)把編譯好的可執行文件拷貝到Windows CE系統相應的文件夾中。 (2)在PB中修改相應的系統配置文件。PB所提供的配置文件包括四種文件類(lèi)型:.bib,說(shuō)明需要打包進(jìn)鏡像文件的Windows CE文件;.dat,文件系統、目錄和文件分配表描述;.db,Windows CE對象存儲數據庫的描述;.reg,系統注冊表。在開(kāi)發(fā)過(guò)程中最常用到的配置文件有:Platform.bib、Platform.reg、Platform.dat、Config.bib。Platform.bib定義打包到OS鏡像文件時(shí)所需要的文件(files)和模塊(modules);Platform.reg定義目標平臺冷啟動(dòng)時(shí)所加載的注冊表鍵值;Platform.dat定義目標平臺冷啟動(dòng)時(shí)所加載的系統文件、目錄和鏈接等;Config.bib定義可用的物理地址,并進(jìn)行一些屬性設置。 做好以上兩步以后,對操作系統重新編譯、下載、調試,最終得到功能完整的系統鏡像。 3 開(kāi)發(fā)實(shí)例——Windows CE環(huán)境下無(wú)線(xiàn)網(wǎng)卡的自動(dòng)安裝 3.1 項目介紹 項目要求實(shí)現一個(gè)獨立的嵌入式無(wú)線(xiàn)通信模塊,通過(guò)現有的IEEE80211b無(wú)線(xiàn)網(wǎng)卡接入無(wú)線(xiàn)局域網(wǎng)進(jìn)行通信。系統采用Samsung公司的S3C2410芯片開(kāi)發(fā)嵌入式系統硬件平臺,需要在Windows CE環(huán)境驅勸PCMCIA無(wú)線(xiàn)網(wǎng)卡。 3.2 無(wú)線(xiàn)網(wǎng)卡安裝的問(wèn)題和解決方案 Windows CE操作系統支持兩種類(lèi)型的設備驅動(dòng)程序:內置式設備驅動(dòng)程序和可安裝設備驅動(dòng)程序。當目標朵與PC機相鏈,且目標機有顯示屏和鏈盤(pán)時(shí),對于可安裝的設備驅動(dòng)程序,其安裝步驟為:建立目標機與PC機的連接,將設備驅動(dòng)程序的.dll文件復制到Windows CE的Windows目錄下;當系統檢測到設備時(shí),顯示屏中會(huì )出現相應的對話(huà)框,用鍵盤(pán)輸入驅動(dòng)的名稱(chēng)即可。 項目中要為現有的無(wú)線(xiàn)網(wǎng)卡安裝驅動(dòng)程序。因為Windows CE系統運行時(shí)是基于RAM存儲的,ROM相當于只讀硬盤(pán),一旦系統斷電或冷啟動(dòng)后,RAM中的信息就會(huì )丟失,尤其是一些注冊表的信息,所以要對RAM持續供電。但由于本系統硬件電源不能保證持續供電,安裝了無(wú)線(xiàn)網(wǎng)卡的驅動(dòng)程序后,信息存儲在RAM中,系統斷電或冷啟動(dòng)后,相關(guān)的信息會(huì )丟失。而且,目標機在實(shí)際使用中無(wú)顯示屏和鍵盤(pán)。因此,斷電重啟時(shí)需要自動(dòng)重新安裝無(wú)線(xiàn)網(wǎng)卡驅動(dòng)程序。 解決方案為:從系統持久存儲SM卡中讀取網(wǎng)卡驅動(dòng)程序xi825.dll和TCP/IP屬性配置文件config.txt,并按配置文件設備注冊表鍵值,然后為無(wú)線(xiàn)網(wǎng)卡安裝驅動(dòng)程序。若需要根據具體應用環(huán)境更新TCP/IP屬性值,可用新的配置文件覆蓋SM卡中的舊文件,冷啟動(dòng)后,重新設備屬性值,在安裝網(wǎng)卡驅動(dòng)即可。 用EVC編寫(xiě)應用程序完成自動(dòng)安裝無(wú)線(xiàn)網(wǎng)卡驅動(dòng)的功能,圖3為應用程序的大體流程。 首先,把兩個(gè)文件從SM卡的storage card文件夾拷貝到Windows CE系統的Windows目錄下;拷貝成功后,按config.txt的內容對注冊表進(jìn)行操作,設置具體環(huán)境下的TCP/IP屬性值;系統檢測到無(wú)線(xiàn)網(wǎng)卡后,在彈出名為“Unidentified PCCard Adapter”的對話(huà)框中程序自動(dòng)輸入網(wǎng)卡驅動(dòng)程序名,完成無(wú)線(xiàn)網(wǎng)卡的自動(dòng)安裝。 3.3 幾個(gè)具體問(wèn)題的解決 下面,再討論一下本方案中幾個(gè)具體問(wèn)題的解決辦法。包括對注冊表的操作、自動(dòng)安裝功能的實(shí)現、程序流程的總體控制以及將程序打包封裝入操作系統的作法。 3.3.1 對注冊表的操作 Windows CE中有一系列API函數可以對注冊表進(jìn)行操作,完成打開(kāi)關(guān)閉注冊表、讀取或修改鍵值等功能。另外,Windows CE注冊表中值的類(lèi)型為Unicode;而配置文件config.txt是在PC機上產(chǎn)生的,類(lèi)別為ANSI。要按cogfing.txt中讀取的值設定注冊表值,就要進(jìn)行數據類(lèi)型的轉換,可以用函數MultiByteToWideChar()實(shí)現。關(guān)鍵代碼如下: RegOpenKeyEx(HKEY_LOCAL_MACHINE, //根鍵TEXT("Comm\xi8251\Parms\TcpIP"), //打開(kāi)根鍵下的子鍵 0, //預留值,必設為0 0, //不支持此項,必設為0 %26;amp;hKey //最終打開(kāi)鍵的句柄指針 ); RegSetValueEx( hKey, //對鍵操作的句柄 TEXT("IpAddress"),//鍵中的數據項名 0, //預留值,必設為0 REG_GZ, //數據項中值的類(lèi)型 (CONST BYE*)((LPCTSTR)regData),//存有數據項值的緩沖區 dwDataSize //值的字節數 ); //對"IpAddress"數據項的值作修改,即改變IP值 3.3.2 自動(dòng)安裝功能的實(shí)現 用FindWindows()函數判斷對話(huà)窗口的出現;用keybd_event()函數模擬鍵盤(pán)輸入。關(guān)鍵代碼如下: TCHAR g_szTitle[80]=TEXT("Unidentified PCCard Adapter"); //指定對話(huà)框的標題 HWND hWnd=..FindWindows(NULL,g_szTitle); //判斷此標題名的窗口是否已出現,不論是否為前臺窗口 if (hWnd! =NULL) //若窗口已出現 {..SetForegroundWindows(hWnd); //將此窗口設置前臺窗口 keybd_event(0x58,0,0,0); //按下x鍵 keybd_event(0x58,0,KEYEVENTE_KEYUP,0); //抬起x鍵 //完成了按下和抬起x鍵的兩個(gè)動(dòng)作,就模擬了鍵盤(pán)輸入字符x. ............//用同樣的方法輸入 "i825.dll" keybd_event(0x0d,0,0,0); keybd_event(0x0d,0,KEYEVENTF_KEYUP,0); //最后輸入確認鍵 } 正確輸入后,可以看到無(wú)線(xiàn)網(wǎng)卡的顯示燈開(kāi)始閃爍,說(shuō)明網(wǎng)卡已經(jīng)安裝成功,等待進(jìn)行無(wú)線(xiàn)通信。 3.3.3 程序流程的總體控制 為了保證程序流程的順序,整個(gè)程序中還需要有一個(gè)總體監視控制的管理員。這種監控功能,可以通過(guò)發(fā)送接收特定消息給主控函數的方法,也可以采用等待特定事件對象的方法,還可以采用開(kāi)定時(shí)器查詢(xún)的方法等。鑒于方法簡(jiǎn)單,而且對系統資源占用并不大,這里選用了開(kāi)定時(shí)器查詢(xún)的方法,并設置了標志位flag區分不同階段工作,進(jìn)行相應的操作。下面列出部門(mén)關(guān)鍵代碼: flag=0; //最初標志位設為0,即先拷貝所需要文件 m_nTimer=SetTimer(1,2000,NULL); //開(kāi)啟定時(shí)器 KillTimer(m_nTimer); //時(shí)間到,先關(guān)閉定時(shí)器,進(jìn)行相應判斷和操作。 3.3.4 應用程序封裝入系統 上文已經(jīng)講了將應用程序封裝入操作系統的一般方法,分為應用程序的拷貝和修改系統配置文件兩步。此項目最后要把開(kāi)的應用程序monitor.exe打包封裝入操作系統。這里重點(diǎn)介紹一下系統中幾個(gè)配置文件的具體修改情況。 (1) 在Platform.bib文件中的Files部門(mén)加入以下代碼 其中,monitor.lnk為monitor.exe的鏈接程序(快捷方式),制作方法很簡(jiǎn)單,可以通過(guò)一個(gè)ASCII碼編輯器編寫(xiě),格式為:#20.exe。 此配置文件中的代碼表示,將monitor.exe和monitor.lnk加載到名為NK的內存區中(NK的定義在config.bib文件中的memory部分完成),文件的屬性為U(非壓縮文件),這樣就完成了把自己所開(kāi)發(fā)的應用程序及其鏈接程序封裝進(jìn)操作系統中的“聲明”。 (2) 在Platform.dat文件中加入以下代碼: Directory ("):-File("monitor.lnk",“.lnk”) 由于Platform.bib做過(guò)聲明,這兩個(gè)文件在操作系統啟動(dòng)后會(huì )映射到目錄下,這是默認的目錄。所以此外的代碼表示在Windows CE啟動(dòng)時(shí)會(huì )自動(dòng)運行monitor.exe。 做完了以上工作,再對操作系統進(jìn)行編譯,把應用程序封裝到了Windows CE操作系統中,而且系統啟動(dòng)后會(huì )運行此應用程序,完成自動(dòng)安裝無(wú)線(xiàn)網(wǎng)卡的功能。 |