WinCE 6.0设备驱动程序基本知识
wince6.0操作手册
Section 0 – 1:Clone a BSPCreate, Build, and Run a New OS DesignLearning ObjectivesCreate an OS Design using Visual StudioIdentify the catalog features included in the designExtend the standard design by adding catalog itemsBuild configuration for the run-time image and build a run-time imageRun the OS image on the target deviceEstimated time to complete this lab:45 minutesExercise 1: Clone BSPIn this exercise, you will use the Clone BSP tool in Visual Studio 2005 to create a copy of the existing Device Emulator Board Support Package (BSP). We can modify this copy instead of modifying the original that was delivered as a part of the Windows Embedded CE 6.0 tools. Clone the DeviceEmulator BSP1. Launch Microsoft Visual Studio 2005.Note If this is the first time Visual Studio is launched after installation the Choose Default Environment Setting dialog will be displayed. For the purposed of this course select Platform Builder Development Settings and select Start Visual Studio.2. Select the Tools | Platform Builder for CE6.0 | Clone BSP from the menu in VisualStudio to bring up the Clone BSP dialog box.3. In the Clone BSP dialog, drop down the Source Board Support Package and selectDevice Emulator: ARMV4I BSP for clone.Note If you are working with a hardware reference platform, select the BSP corresponding to your specific hardware.4. Type TrainingBSP in the Name field in the New Board Support Package Info area.5. Type a description for your new BSP in the Description field.6. Type TrainingBSP in the Platform Directory field.7. Type GeneriCo in the Vendor field.8. Type 1.0 in the Version field.9. Click the Clone Button. The Clone BSP tool will create a new Board Support Packagebased on the DeviceEmulator Board Support Package.10. Acknowledge the Clone BSP success message by selecting OK.11. Open the C:\WINCE600\PLATFORM\TrainingBSP\FILES folder using WindowsExplorer.Note The labs in this course refer to the default installation path for OS Build Tree, which is “C:\WINCE600”. If your path is something other than the default you will need to make theadjustment anytime the path is noted.12. Rename the deviceemulator-preri.bat file to trainingbsp-preri.bat.Note The previous step was necessary due to a bug in the Clone BSP tool. It is only necessary if the source BSP contains certain build related batch files in the FILES directory. This is notcommon, but is the case with the DeviceEmulator BSP. Failure to make the change will causea build error in a later step.The DeviceEmulator Board Support Package has now been cloned into a new Board Support Package called TrainingBSP. The TrainingBSP Board Support Package will be used in the remaining labs.Exercise 2: Create, build and run the OS designIn this exercise you will create an OS design, and then customize that design by adding components from the catalog and build the result. You will run the OS design on the Device Emulator.This OS design will be used in other labs and will be a suitable platform for running a variety of Windows CE applications.You will learn how to:Create an OS DesignSet up the build configuration for your OS run-time imageBuild an OS run-time imageRun the OS Design on the Device EmulatorCreate an OS design1. Select File | New | Project… from the Visual Studio menu.2. Select the Platform Builder for CE 6.0 project type in the New Projectdialog.3. Select OS Design under Visual Studio installed templates.4. Type TrainingOSDesign in the Name field. The solution name willdefault to TrainingOSDesign as well.5. Click OK. Visual Studio will launch the Windows Embedded CE6.0 OS Design Wizard.6. Click Next.7. In the list of available BSPs, select TrainingBSP: ARMV4I and click Next.8. From the list of available design templates, select PDA Device and clickNext.9. From the list of available design variants, select Mobile Handheld andclick Next. The Applications & Media configuration window willappear.10. Deselect .NET Compact Framework 2.0 and ActiveSync and clickNext. The Networking & Communications configuration window willappear.11. Deselect TCP/IPv6 Support.12. Deselect Personal Area Network (PAN). This will deselect Bluetoothand IrDA.13. Click Next, and then Finish to complete the Windows Embedded CE6.0 Design Wizard.Note The wizard creates the initial configuration for your OS design. We will have the opportunity to make further changes to the OS design after completing the wizard.14. Click Acknowledge on the Catalog Item Notification dialog.On completion, Visual Studio will display your OS design project. The SolutionExplorer tab should be active and show your new TrainingOSDesign project inyour TrainingOSDesign Solution.Inspect the OS Catalog15. Click on the Catalog Items View tab to display the Catalog.16. Click on the Filter drop down box in the upper left hand corner of theCatalog Items View. Observe the different filtering options. The filtercontrols the items that are displayed in the catalog. Ensure that AllCatalog Items in Catalog is selected.17. Observe the selection boxes and icons in the catalog by expanding thenodes. Selection boxes with a green check mark indicate an item thatwas specifically selected as a part of the OS design. Selection boxeswith a green square indicate an item that was brought in to the OSdesign as a dependency. Selection boxes that are not marked indicateitems that are not included in the OS design but are available to beadded.18. Locate a catalog item with a green square in its checkbox.19. Right click on the catalog item and choose Reasons for Inclusion ofItem. The Remove Dependent Catalog Item dialog box displays thecatalog items you selected that caused this catalog item to automatically be included in the OS design.20. Close the Remove Dependent Catalog Item dialog box.21. Expand the Core OS | CEBASE | Applications – End User | Active Syncnode in the catalog.22. Right click on either of the ActiveSync system cpl items (or double click)and select Display in Solution View. The view will change to theSolution Explorer tab. The subproject containing the ActiveSynccomponent is displayed.This is a great way to navigate the source code that is available as partof Windows Embedded CE 6.0.Add support for Internet Explorer 6.0 Sample Browser catalog item23. Select the Catalog Items View tab to display the OS design catalog.Note If the filtering option was not set to All Catalog Items in Catalog, you would not see catalog items that were not already included in the OS design.24. Enter the text Internet Explorer 6.0 Sample into the search text box tothe right of the filter button. Press Enter or click the green arrow. Thepath Core OS | CEBASE | Internet Client Services | Browser Application| Internet Explorer 6.0 for Windows Embedded CE – StandardComponents should be expanded.Note Depending on where you are currently located in the catalog, you may have to restart the search from the top.25. Select, to check, the Internet Explorer 6.0 Sample Browser catalogitem.Add support for managed code development to your OS design26. Enter the text ipconfig into the Search box and press Enter. TheNetwork Utilities (IpConfig, Ping, Route) will be highlighted.Note Again, depending on node selected when starting a search in the catalog, you may have to restart the search from the top.27. Add the Network Utilities to your design by selecting the component.28. Enter the text wceload into the Search box and press Enter. The CABFile Installer/Uninstaller component will be highlighted. This is due tothe fact that the SYSGEN name for the component is “wceload”.29. Add the Cab File Installer/Uninstaller utility to your OS design.30. Enter the text sysgen_dotnetv2_support into the Search box andpress Enter. The OS Dependencies for .NET Compact Framework2.0 component will be highlighted.31. Add the OS Dependencies for .NET Compact Framework 2.0 to yourOS design.Note There are two separate components in this category. Be sure you select the one that does NOT have the – Headless modifier in its description.Build the OS run-time image32. Select Build | Configuration Manager… from the Visual Studio menuto bring up the Configuration Manager dialog box.33. Select TrainingBSP ARMV4I Debug from the Active solutionconfiguration drop down box and then close the dialog box.34. Select the Solution Explorer view by selecting the Solution Explorertab.35. In the Solution Explorer window, right click on theTrainingOSDesign project (not the Solution node) and chooseProperties. This will launch the Property Pages dialog for your OSdesign.36. Expand the Configuration Properties tree and click on the BuildOptions node.37. Ensure the following build options are set:Enable eboot space in memoryEnable kernel debuggerEnable KITLEnable profiling38. Select OK39. Select Build | Build TrainingOSDesign from the Visual Studio menu.Note This will take several minutes to complete depending on the capabilities of your development system. The following steps for configuring connectivity may be accomplished while building.Configure connectivity options40. Select Target | Connectivity Options… from the Visual Studio menu.The Target Device Connectivity Options dialog will appear showingthe Kernel Service Map configuration for the CE Device namedconnection.41. Select Device Emulator (DMA) from the Download drop down box.42. Select Device Emulator (DMA) from the Transport drop down box.43. Select KdStub from the Debugger drop down box.Change the emulator configurationThe emulator has a number of configurable options. We will modify it to use a larger screen resolution and to enable network communications.44. Next to the Download drop down menu click Settings.45. Select the Display tab in the Emulator Properties dialog box.46. Change the Screen width to 640 pixels and the Screen height to 480pixels.47. Select the Network tab in the Emulator Properties dialog box.48. Check the box beside Enable NE2000…49. Click on OK50. Select Apply to save the new device configuration.51. Select Close to close the dialog box.Note The build must complete before moving on to the next step.Test your OS run time image on the Device Emulator52. Select Target | Attach Device from the Visual Studio menu.Visual Studio will start the Device Emulator with your OS run time image design. The download will take a short time to complete. You will be able to interact with the emulator and test the features of your new OS design. Congratulations, you have successfully built and run your first Windows Embedded CE 6.0 OS design!If you are continuing with the next Hands-On Lab, keep your emulator image running.Section 0 – 2:Static and Dynamic LibrariesObjectivesCreate simple static libraryLink the static library with a dynamic libraryLink the dynamic library with an executableEstimated time to complete this lab:45 minutesExercise 1: Create a static library (LIB)In this exercise you will create a static library with routines that you will later link to when you build a dynamic library and an executable.Note This exercise involves a bit of typing; if you perfer you may copy the text from the Student files. Create a static library subproject1. Select Project | Add New Subproject… from the Visual Studio menu.This will bring up the Windows CE Subproject Wizard.2. Select the WCE Static Library template.3. Set the Subproject name to Power_Status and click Next.4. Check the Precompiled header box.5. Click Finish.6. Configure the Power_Status subproject to be excluded from theimage and always build and link as debug. (In Solution ExplorerView, right click the TrainingOSDesign and select the Properties)Create files7. Right click on the Power_Status subproject in the Solution Explorerand select Add | New Item…8. Select the Code category, the C++ File (.cpp) template, and then typePower_ON_OFF in the name field.9. Click on Add to add the new file.10. Right click on the Power_Status subproject in the Solution Explorerand select Add | New Item…11. Select the Code category, the Header File (.h) template, and thentype Power_Status in the name field.12. Click on Add to add the new file.13. Using the Solution Explorer, locate the Power_ON_OFF.cpp file in thePower_Status subproject and open it.14. Add the following code to the Power_ON_OFF.cpp file:#include"stdafx.h"LPCTSTR g_StrOn = L"Power is on";LPCTSTR g_StrOff = L"Power is off";LPCTSTR PowerOn(){return g_StrOn;}LPCTSTR PowerOff(){return g_StrOff;}15. Save and close Power_ON_OFF.cpp.16. Expand the Include files node in the Power_Status subproject andopen stdafx.h17. Add an include for <windows.h> as follows:// TODO: reference additional headers your program requires here#include<windows.h>18. Save and close stdafx.h.19. Using the Solution Explorer, locate the Power_Status.h file in thePower_Status subproject and open it.20. Add the following to Power_Status.h:extern LPCTSTR PowerOff(void);extern LPCTSTR PowerOn(void);21. Save and close Power_Status.h.Build the library22. Right click the Power_Status subproject in the Solution Explorer andselect Build.Exercise 2 Create a dynamic library (DLL)In this exercise you will create a dynamic library that will link with the static library you created previously.Note This exercise involves a bit of typing; if you perfer you may copy the text from the Student files.Create the dynamic library subproject1. Select Project | Add New Subproject… from the Visual Studio menu.2. Select the WCE Dynamic-Link Library template.3. Set the Subproject name to ScanBarcode and click Next.4. Select A simple Windows Embedded CE DLL subproject and clickFinish.5. Configure the ScanBarcode subproject to be excluded from theimage and always build and link as debug.Edit source files for DLL project6. In the Solution Explorer, right-click on the ScanBarcode subproject,and then select Add | New Item…7. Select the Code category, the Header File (.h) template, and then typeScanBarcode in the name field.8. Using the Solution Explorer, open the ScanBarcode.h file from theScanBarcode subproject.9. Add the following code to the ScanBarcode.h file:#include<windows.h>EXTERN_C LPCTSTR ScanBarcode(void);EXTERN_C LPCTSTR ScanPowerOff(void);EXTERN_C LPCTSTR ScanPowerOn(void);10. Using the Solution Explorer, open the ScanBarcode.def file from theParameter files node in the ScanBarcode subproject.11. Add the following to the DEF file:LIBRARY ScanBarcodeEXPORTSScanPowerOffScanPowerOnScanBarcode12. Save and close ScanBarcode.def.13. Using the Solution Explorer, open the ScanBarcode.cpp file from theScanBarcode subproject.14. Add an include statement for Power_Status.h as follows:// ScanBarcode.cpp : Defines the entry point for the DLL application.//#include"stdafx.h"#include"Power_Status.h"BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){return TRUE;}15. Add the following code snippet to ScanBarcode.cpp after the inclusionof Power_Status.h.LPCTSTR g_StrScan = L"123456789ABC";EXTERN_C LPCTSTR ScanBarcode(void){return g_StrScan;}EXTERN_C LPCTSTR ScanPowerOn(void){return PowerOn();}EXTERN_C LPCTSTR ScanPowerOff(void){return PowerOff();}16. Save and close ScanBarcode.cpp.Link to static library17. Right click on the ScanBarcode subproject node in the SolutionExplorer, and then select Open. The ScanBarcode SOURCES filwill open.18. Locate the section of the file containing TARGETLIBS.19. Add a reference to the Power_Status.lib static library by modifying thissection as follows:TARGETLIBS= \$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\coredll.lib \$(PBWORKSPACEROOT)\Power_Status\obj\$(_CPUINDPATH)\Power_Status.lib \Note The trailing backslash characters on each line are line continuation characters. Ensure that there is no white space after them. Also, ensure that there is a blank line following the last line.20. Add the path to directory containing the Power_Status.h header file byadding the following to the bottom of the SOURCES file:INCLUDES= \$(PBWORKSPACEROOT)\Power_Status \Note Ensure that there is at least one blank line prior to the line containing the INCLUDES directive.This ensures that there are no line continuation characters prior to this statement that are still in effect.21. Save and close the SOURCES file.22. Right click on the ScanBarcode subproject in the Solution Explorerand select Properties.23. Select the C/C++ tab and observe the Include Directories entry.Notice that the directory you just added with the INCLUDES directivein the SOURCES file is listed here.24. Select the Link tab and observe the Additional Libraries entry.Notice that the library you just added with the TARGETLIBS directivein the SOURCES file is listed at the end of this line.Note The SOURCES file itself controls the build rules for the subproject. The graphical user interface shown here provides an alternate way to view and modify this file.25. Select Cancel to close this dialog without making any changes.Build the library26. Right click the ScanBarcode subproject in the Solution Explorer andselect Build.Exercise 3 Create an executable (EXE)In this exercise you will create an executable that uses functionality from the dynamic library you just created.Adding existing application subproject1. Copy the BarcodeDllTest subproject from the Student files to your OSdesign atC:\WINCE600\OSDesigns\TrainingOSDesign\TrainingOSDesign.2. Right click on the Subprojects node in the Solution Explorer and selectAdd Existing Subproject.3. Select the BarcodeDllTest.pbpxml file from the BarcodeDllTestfolder.4. Configure the BarcodeDllTest subproject to be excluded from theimage and always build and link as debug.Add reference to dll5. Right click on the BarcodeDllTest subproject in the Solution Explorerand select Open.6. Add the following to the bottom of the file:INCLUDES= \$(PBWORKSPACEROOT)\ScanBarcode \Note Ensure that there is a blank line preceding the INCLUDES directive. Ensure there is no whitespace after the trailing backslashes.7. Locate the TARGETLIBS directive and add a reference toScanBarcode.lib as follows:TARGETLIBS= \$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\coredll.lib \$(PBWORKSPACEROOT)\ScanBarcode\obj\$(_CPUINDPATH)\ScanBarcode.lib \Note Ensure that there is a blank line after the line containing ScanBarcode.lib. Ensure there is no white space after the trailing backslashes.8. Save and close the sources file.9. Right click on the BarcodeDllTest subproject and select Build.Run the BarcodeDllTest application10. Launch BarcodeDllTest.exe using Target | Run Programs from theVisual Studio menu.11. The BarcodeDllTest.exe application will present the following userinterface. You can exercise it by clicking on the various buttons.This simple application makes calls into the linked Scanbarcode.dll dynamic library, which includes functionality from the Power_Status.lib static library. You may wish to set breakpoints on functions in these modules and view the call stacks to see how they are eventually called from the application.Section 1:Integrating a Device DriverEstimated time to complete this lab: 30 minutesExercise 1: Integrate barcode scanner driver into BSPThe purpose of this exercise is to integrate a driver into the BSP. In this exercise you will Add the driver subdirectory containing the driver source code to the BSPAdd the appropriate bib entry to cause the driver to be included in the OS image Add the appropriate registry entries to cause the drive to be loaded at bootUpdate the BSP catalog file to support the new driverBuild a debug OS run-time image that we will use in future labsAdd driver source code to BSP directory1. Detach from the Emulator if connected.2. Copy the BARCODE directory from Student files to theC:\WINCE600\PLATFORM\TrainingBSP\SRC\DRIVERS directory.3. Double click the C:\WINCE600\PLATFORM\TrainingBSP\src\driversnode in the Solution Explorer. This will open the Dirs file.4. Add the following line to the end of the Dirs file directly after the# @CESYSGEN ENDIF CE_MODULES_DEVICE line:barcode \5. Save and close the Dirs file.Add Driver to image6. Open the platform.bib file in the Parameter Files node of theTrainingBSP in the Solution Explorer.7. Add the following lines near the top of platform.bib as the first entryin the MODULES section.IF BSP_BARCODEbarcode.dll $(_FLATRELEASEDIR)\barcode.dll NK SHK ENDIFWhen you are done, the top of the file should look similar to the following:;; Copyright (c) Microsoft Corporation. All rights reserved.;;; Use of this source code is subject to the terms of the Microsoft end-user; license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.; If you did not accept the terms of the EULA, you are not authorized to use; this source code. For a copy of the EULA, please see the LICENSE.RTF on your; install media.;MODULES; Name Path Memory Type; -------------- ---------------------------------- -----------IF BSP_BARCODEbarcode.dll $(_FLATRELEASEDIR)\barcode.dll NK SHKENDIF; @CESYSGEN IF CE_MODULES_DISPLAYIF BSP_NODISPLAY !TrainingBSP_lcd.dll $(_FLATRELEASEDIR)\TrainingBSP_lcd.dll NK SHK; @CESYSGEN IF SHELLW_MODULES_GX; @XIPREGION IF MISC_TRAININGBSP_BIB8. Save and close the file.Add registry settings9. Open the file Platform.reg from the Parameter Files node of theTrainingBSP using the Solution Explorer.10. Right click on the [HKEY_LOCAL_MACHINE\Drivers\BuiltIn] keyand add a new key with the name Barcode.11. Add a String Value to the Barcode key with the name Dll and valueBarcode.dll.12. Add a String Value to the Barcode key with the name Prefix andvalue BAR.13. Save and close the file.Add driver to the catalog14. From the Visual Studio menu, select File | Open | File … and navigateto the C:\WINCE600\PLATFORM\TrainingBSP\CATALOG folder.15. Change the file mask to show Files of type: All Files (*.*)16. Open the TrainingBSP.pbcxml file.Note If no nodes are visible underneath Catalog in the Catalog Editor, click the Show All Catalog Files button.17. Expand the catalog tree to show the Device Drivers node.18. Right click on the Device Drivers node and select Add Catalog Item.The new item will be placed in the Third Party node.19. Set the Description field to Barcode Scanner.20. Set the Title field to Barcode Scanner.21. Set the Unique Id field to Item:GeneriCo:BarcodeScanner.22. Set the Additional Variables field to BSP_BARCODE.23. Set the Modules field to barcode.dll.24. Save and close the file.Add barcode scanner driver to image25. Switch to the Catalog Items View.26. Expand the TrainingBSP node under Third Party.Note Ensure that the Filter option is set to All Items in the Catalog. The Filter option is a drop down box in the upper right hand corner of the Catalog Items View.27. Select the Barcode Scanner item under Device Drivers. Refresh theCatalog View if necessary to see the Barcode Scanner.28. Select Build | Advanced Build Commands | Build Current BSPand Subprojects from the Visual Studio menu.Verify integration using Image Viewer29. Open the NK.bin file located in the flat release directory using VisualStudio. This will bring up the Run-Time Image Viewer.30. Click on the (All Files) node in the Image Explorer. This shows allfiles that are built into the OS run time image.31. Verify that barcode.dll is listed.32. Verify that the [HKLM\Drivers\BuiltIn\Barcode] key exists under theregistry node.33. Close the Image Viewer.Build debug OS image34. Select Build | Configuration Manager… using the Visual Studiomenu.35. Set the Active solution configuration to TrainingBSP ARMV4IDebug.36. Select Build | Build Solution using the Visual Studio menu. This willbuild a debug configuration that we will use in future labs.Section 2:Debugging the Scanner Device Driver ObjectivesUnderstand driver interaction with applicationUse kernel debugger to investigate call stackEstimated time to complete this lab: 30 minutesExercise 1 Application and Driver IntegrationIn this exercise you will add an application that communicates with the barcode scanner device driver. You will exercise the functionality of the driver and function call tree that results when the application calls into the driver.Add BarcodeTest1 application subproject to your OSDesign1. Copy the BarcodeTest1 folder from your Student files toC:\WINCE600\OSDesigns\TrainingOSDesign\TrainingOSDesign.2. Right click on the Subprojects node in the Solution Explorer and selectAdd Existing Subproject...3. Add the BarcodeTest1 subproject to your OS design.4. Configure the BarcodeTest1 subproject to be excluded from theimage and always build and link as debug.5. Right click on the BarcodeTest1 subproject in the Solution Explorerand select Build.Run test application on OS image6. Attach the emulator by selecting Target | Attach Device from the VisualStudio menu.Note This lab uses an updated version of the OS run time image. You will need to first detach from the existing emulator instance if it is still running.7. Open the BarcodeTest1.cpp file in the BarcodeTest1 subproject usingthe Solution Explorer.8. Set a breakpoint on the call to DeviceIoControl().9. Run the BarcodeTest1 application using Target | Run Programs…from the Visual Studio menu. The debugger will halt execution at thebreakpoint.10. Select Debug | Windows | Call Stack from the Visual Studio menu toshow the call stack. This window shows the sequence of calls thatresulted in the statement containing the breakpoint. You can doubleclick any of the calling functions to view the source code file containingeach function.Note The source code for the functions listed in this window is only available if you have installed the Shared Source. Only the disassembly view is available if the source code is not installed.11. Step through the application by pressing F10 through completion.Add additional functionality to test application and retest12. Locate the comment //Turn on power and add the following functioncall:Code:// Turn on powerDeviceIoControl(hBARPort, BARCODE_IOCTL_POWER_ON, NULL, 0, NULL,0, &dwNumBytesRead, NULL);13. Locate the comment //Check to make sure power is on and add thefollowing function call:Code:// Check to make sure power is onDeviceIoControl(hBARPort, BARCODE_IOCTL_QUERY_POWER_STATE,NULL,0, &dwResult, sizeof(DWORD), &dwNumBytesRead, NULL);_tprintf(_T("Power Status = %d.\n"),dwResult);14. Right click on the BarcodeTest1 subproject and select Build.15. Run the BarcodeTest1 application using Target | Run Programs…from the Visual Studio menu. The debugger will halt execution at thebreakpoint.16. Press F517. Observe debug messages in the Output window similar to thefollowing:Test BAR1: driver open/close.Barcode.DLL: +BAR_OpenBarcode.DLL: -BAR_OpenCreateFile returned a valid handle.Barcode.DLL: +BAR_IOControlBarcode.DLL: IOCTL - Set Power ManagementBarcode.DLL: -BAR_IOControl。
Windows CE 6.0下的驱动
Windows CE 6.0 6 0下的驱动 程序新特性何宗键 “微软——同济”移动与嵌入式中心 同济大学软件学院 济大学软件学院点击添加MSN机器人小新 为您收听下载MSDN中文网络广播课程加油助力!本次课程内容包括• 驱动程序开发简介 • CE 6.0的新内核架构对驱动程序的影响 • 内核模式驱动 VS 用户模式驱动 • 管理缓冲区 • 驱动程序的移植收听本次课程需具备的条件• 有过Windows CE 5.0开发经验 发经验 • 最好熟悉驱动程序开发 • 对CE 6内核有所了解Level 300驱动程序是什么?Application Driver Win CE OSDevice驱动程序是对物理或虚拟设备的抽象回顾驱动程序的基本知识z Native vs Stream ¾ 谁加载该驱动程序 (Who) z 单体 vs 分层 分层(MDD / PDD) ¾ 驱动的结构如何设计 (How) z Built In vs 动态加载 ¾ 驱动何时加载 (When) z Miniport、Wave、Touch ¾ 驱动的模型是什么样子 (What) z 内核驱动 vs 用户驱动 (新) 新 ¾ 在哪里加载驱动 (Where)回顾Windows CE 5的内存架构2 GB Kernel SpaceKernelLarge Memory AreaSlot 32 Slot 31 : : Slot 7 Slot 6 Slot 5 Slot 4 Slot 3 Slot 2Slot 1 – ROM DLLs Slot 0 – ExecutionSingle 2 GB VM for all Processes31 Slots for ProcessesExecution SlotWindows CE 6.0之后的内存模型2 GB Kernel SpaceKernel Filesystem y GWES Drivers2 GB p per ProcessProcess Code User VM32 K ProcessWindows CE 6中的两种驱动User r Memor ry Spac ceServicesD.EXE Windows CE Shell Application Service 1 Service n Udevice.EXE Udevice.EXE User Mode Driver 1 User Mode Driver nMarshalling Kernel Me K emory SpaceWin32 CE APIs – COREDLL / WINSOCK / COMMCTRL / COMMDLGKERNEL.DLLDEVMRG.DLL GWES.DLL DriversFILESYS.DLL FSDMGR.DLLNetworking DLLsOALK.COREDLL.DLL内核态驱动——新瓶装旧酒z 默认的驱动模式 z 在内核地址空间中运行 z 与内核模式的coredll, coredll k.coredll.dll k coredll dll链接 ¾自动完成,无需更改构建规则 z 效率高 ¾快速访问内核API ¾直接同步访问用户的缓冲区 z 稳定压倒一切! 稳定压倒 切! ¾驱动Crash可能会导致内核崩溃——用户态驱动老革命遇到新问题Reflector服务用户模式驱动程序加载User Mode Driver Host ProcessUser Application User Mode Driver 8ActivateDeviceEx XXX_Init(…) 1udevice.exe User Mode Driver User ModeActivateDeviceEx CreateProcess(,,Volume Name)10HANDLE Returned 39Kernel Mode 47Device Context XXX_Init forwarded to UM Driver HostReflector Service Device Manager 2569HANDLE Parent Bus Driver110HANDLE Returned用户模式驱动注册表p[HKEY_LOCAL_MACHINE\Drivers\ProcGroup_0003]"ProcName"="udevice.exe""ProcVolPrefix"="$udevice"[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Ethman]"Prefix"="ETM""Dll"="ethman.dll""Index"=dword:1; WZCSVC must be started before ethman"Order"=dword:2A; Flags==12 is DEVFLAGS_LOADLIBRARY and DEVFLAGS_LOAD_AS_USERPROC; Flags12 is DEVFLAGS LOADLIBRARY and DEVFLAGS LOAD AS USERPROC"Flags"=dword:12"UserProcGroup"=dword:3 ;// default to group 3BIB文件的改变深入理解:请参考共享源代码缓冲区管理原因——内核驱动缓冲区管理原因——用户驱动缓冲区管理的内容:指针参数与嵌套指针处理调用者缓冲区–列集方法列集之——同步或异步访问CeOpenCallerBufferCeAllocAsynchronousBuffer处理调用者缓冲区–安全拷贝安全拷贝的方法z CeOpenCallerBufferz CeAllocDuplicateBuffer处理缓冲区的API z CeOpenCallerBufferz CeCloseCallerBuffer处理缓冲区的APIz CeAllocAsynchronousBufferz CeFreeAsynchronousBuffer处理缓冲区的APIz CeAllocDuplicateBufferz CeFreeDuplicateBuffer用户态驱动程序的限制用户态驱动程序的限制内核态驱动的限制CeCallUserProc内核模式驱动用户模式驱动同步异步同步异步参数不需使CeAllocDuplicateBuffer 不需要使用CeAllocDuplicateBuf 列表中的指针要用CeFreeDuplicateBuffer fer CeFreeDuplicateBuff er嵌不CeOpenCallerB ffer CeOpenCallerB CeOpenCallerB ffer 入到结构体需要使用CeOpenCallerBuffer CeAllocAsynchronousB uffer C h uffer CeCloseCallerB ff CeOpenCallerBuffer CeAllocAsynchrono usBuffer C h 中的指针CeFreeAsynchronousBu ffer CeCloseCallerBuffer uffer CeFreeAsynchronou sBuffer CeCloseCallerBuffer深入理解:请参考共享源代码CE Base Team Blog: Windows Base Team Blog: Marshal Helper API:驱动程序的移植DEMO使用CEAppCompat工具检查应用程序的兼容性。
WINCE驱动程序快速入门
WINCE驱动程序快速入门有人也许和我一样比较心急,想尽快知道如何去写一个具体的驱动程序,这里,假设您对驱动程序已经有比较好的了解,告诉大家一个快速上路的方法。
当然,如果您有足够的时间我建议在动手之前还是深入了解一下CE整个系统架构。
在CE中,最简单的一个驱动程序莫过于一个内置(Built-in)设备的流接口驱动。
对于一个不支持热拔插的设备,最快捷的方法就是为其实现一个内置的流接口的驱动。
对于这样一类驱动程序,我们只需要按一种特定的规则实现一个动态库,其中实现对所有的硬件功能的调用,再将这个动态库加入系统中,然后设置相关的注册表项,使得在系统启动时设备管理器能识别并且加载这个设备即可。
3〃1 实现动态链接库此动态链接库与应用程序层所用的库并不很大差别,源文件可以是C、C++、甚至汇编,,只是它要实现以下函数。
DllEntry(HINSTANCE DllInstance, INT Reason, LPVOID Reserved )这个函数是动态链接库的入口,每个动态链接库都需要输出这个函数,它只在动态库被加载和卸载时被调用,也就是设备管理器调用LoadLibrary而引起它被装入内存和调用UnloadLibrary将其从内存释放时被调用,因而它是每个动态链接库最早被调用的函数,一般用它做一些全局变量的初始化。
参数:DllInstance:DLL的句柄,与一个EXE文件的句柄功能类似,一般可以通过它在得到DLL 中的一些资源,例如对话框,除此之外一般没什么用处。
Reason: 一般我们只关心两个值:DLL_PROCESS_ATTACH与DLL_PROCESS_DETACH,Reason等于前者是动态库被加载,等于后者是动态库被释放。
所以,我们可以在Reason等于前者是初始化一些资源,等于后者时将其释放。
DWORD XXX_Init(LPCTSTR pContext,LPCVOID lpvBusContext);它是驱动程序的动态库被成功装载以后第一个被调用的函数。
winCE5.0 6.0使用教程
Windows ce6.0模拟器可用于车载导航系统(凯立德导航地图、道道通导航地图、城际通导航地图及其它Windows CE软件模拟测试)。
本次分享的是Wince6.0模拟器,喜欢折腾的朋友抓紧下载了!Windows ce6.0模拟器使用方法:1. 解压下载好的Windows ce6.0程序压缩包。
2. 运行文件夹内“连接加载.bat”注册Windows ce6.0。
3. 按需求运行文件夹内各分辨率“800x480.BAT”“7寸.bat”“4.3寸.bat”运行文件,启动CE6.0模拟器。
480*272 4.3寸 CE6.0模拟器演示480*234 7寸 CE6.0模拟器演示800*480 CE6.0模拟器演示windows ce6.0模拟器运行凯立德导航地图(其他导航系统运行方法一致):1、点击win CE6.0模拟器顶部文件选项>>>配置>>常规>>共享文件夹2、点击共享文件夹"..."后,选择凯立德导航地图文件夹,选择完毕点击确定。
3、点击win CE6.0模拟器桌面上的“我的设备”图标。
4、打开“SDMMC”5、打开“SDMMC”后,运行Navione.exe 运行凯立德导航系统。
windows ce6.0模拟器运行凯立德导航系统全屏设置:1、单击windows ce6.0模拟器开始菜单>>>设置>>>任务栏和开始栏菜单2、在任务栏和开始栏菜单属性>>>常规里勾选自动隐藏,点击OK,凯立德导航地图全屏显示了。
15.jpg(122.8 KB, 下载次数: 5)下载附件设置成功,凯立德导航地图全屏显示2012-11-8 11:23 上传Windows ce6.0模拟器下载:下载地址:本帖隐藏的内容/share/link?shareid=104534&uk=2569674654。
WINCE6.0+S3C6410串口驱动
WINCE6.0+S3C6410串口驱动WINCE串口驱动备注:本博文基于Real6410+WINCE6.0的系统来学习的1. 硬件设计图1 UART接口在此开发板中的应用如下:UART0作为调试口来使用图2 UART1用于和GPRS模块SIM900通信图3 UART2用于和GPS模块COMPASS_EB818通信图4UATR3用于和蓝牙模块通信图52. 软件设计2.1 WINCE串口驱动的架构在WINCE系统中,串口驱动是作为一个流驱动的形式存在,其驱动架构如下图所示:图6串口驱动分为MDD层和PDD层,DD层对上层的Device Manager(device.dll)提供了标准的流设备驱动接口(COM_xxx),PDD层实现了HWOBJ结构及结构中若干针对于串口硬件操作的函数指针,这些函数指针将指向PDD层中的串口操作函数。
DDSI是指MDD层与PDD层的接口,在串口驱动中实际上就是指HWOBJ,PDD层会传给MDD层一个HWOBJ结构的指针,这样MDD层就可以调用PDD层的函数来操作串口。
2.2 MDD层的导出接口函数MDD层为系统提供流设备接口,这些接口微软已经实现,但还是有必要学习一下2.2.1 COM_Init此函数始化串口设备,该函数通过读取注册表获得串口设备号,并获得相应的HWOBJ的结构指针,通过该指针调用PDD层的硬件初始化函数初始化串口。
Identifier:如果驱动被设备管理器加载,那么这个参数将包含一个注册表键值在”HKEY_LOCAL_MACHINE\Drivers\Active”路径下。
如果驱动是通过调用RegisterDevice函数来加载的,那么这个值等于dwInfo的值。
在COM_Init中,会先打开该键值,用返回的句柄来查询DeviceArrayIndex值,并根据该值获得PDD层的HWOBJ结构指针,下图是COM_Init函数的一部分图72.2.2 COM_Deinit卸载串口设备,该函数中主要做了一些释放资源的操作。
Windows CE 6.0设备驱动结构与系统调用性能
Windows CE 6.0设备驱动结构与系统调用性能
钟川;陈金坦
【期刊名称】《现代计算机(专业版)》
【年(卷),期】2009(000)002
【摘要】介绍Windows CE 6.0新的特征,重点分析Windows CE 6.0在存储嚣管理、设备驱动程序结构、系统调用性能,介绍Windows CE 6.0在其他方面的改进.【总页数】2页(P142-143)
【作者】钟川;陈金坦
【作者单位】广东省公路管理局,广州,510075;广东省公路管理局,广州,510075【正文语种】中文
【中图分类】TP3
【相关文献】
1.微软Windows Embedded CE 6.0 R3支持丰富的用户体验及与Windows 7的连接 [J],
2.Windows CE和桌面Windows 2000/XP设备驱动开发的区别 [J], 刘彦峰;李峥
3.Windows CE设备驱动程序开发 [J], 郝旺;杨一帆
4.Windows CE和Windows 2000/XP设备驱动开发的区别 [J], 刘彦峰;李峥
5.WindowsCE平台下USB超声波采集设备驱动的设计与实现 [J], 曹德华;雷跃明因版权原因,仅展示原文概要,查看原文内容请购买。
驱动程序基础知识
驱动程序基础知识驱动程序作为我们正常使用操作系统的必要条件,它的正确安装与否将会影响我们是否能够听到声音、看清图片、上得起网。
所以,我们应该正确了解有关驱动程序的相关基础知识。
一、驱动程序的概念驱动程序,英文名为“Device Driver”,全称为“设备驱动程序”,它是一种特殊的程序。
其作用是将硬件本身的功能告诉操作系统,接下来的主要功能就是完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。
简单的说驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系。
二、关于驱动程序的一些疑问只有通过驱动程序,操作系统才能控制电脑上的硬件设备,所以说电脑的每一个硬件都离不开驱动程序。
但是许多网友朋友就有疑问了。
比如:为什么CPU等设备为什么不用装驱动程序?为什么U盘等外设一插上电脑就可以使用?下面小编一一为大家解答原因1)CPU等设备为什么不用装驱动程序?首先,我们进入“设备管理器“,在这里显示了电脑里的所有硬件,我们可以看到很详尽的驱动程序的信息,有它的供应商、文件版本、发行日期等等,甚至还有具体的这个驱动程序文件的所在位置。
比如处理器(CPU),然后点击“驱动程序”选项,就可以看到你的CPU驱动程序的一些信息了,再点击其中的“驱动程序详细信息”。
那么,这个驱动程序是如何来的?这是因为在安装操作系统的同时,操作系统已经不知不觉的帮你给一些常用的硬件安装上驱动程序,如鼠标、键盘等设备的驱动程序,更别说不可或缺的CPU和硬盘等硬件。
而且,对于某些高版本的操作系统,如WindowsXP甚至还包含了很多显卡、声卡和网卡等设备的驱动程序,所以这样也就不难理解有些用户安装完高版本的操作系统后,甚至不用安装任何驱动程序就可以正常使用。
2)为什么USB设备等硬件只要插到电脑就可以使用?这是因为操作系统支持即插即用。
即插即用(Plug and Play)是INTEL开发的一组规范,它赋予了计算机自动检测和配置设备并安装相应驱动程序的能力,当有设备被更改时能自动通知使用该设备的程序当前设备的状况。
Windows系统的硬件驱动和设备管理指南
Windows系统的硬件驱动和设备管理指南Windows操作系统是目前全球应用最广泛的操作系统之一,它提供了强大的硬件驱动和设备管理功能,使用户能够方便地连接和管理各种硬件设备。
本文将为您介绍Windows系统中硬件驱动和设备管理的相关知识和操作指南。
一、硬件驱动的作用和安装硬件驱动是系统软件与硬件设备之间的桥梁,它能够使操作系统与硬件设备进行有效的通信和交互。
在Windows系统中,硬件驱动通常由硬件设备厂商提供,您可以从设备的官方网站或驱动光盘中获取到相应的驱动程序。
1. 查找硬件驱动:首先,您需要确定您所使用的硬件设备的厂商和型号,并前往其官方网站寻找相应的驱动程序。
在网站上一般会有一个“支持”或“下载”页面,您可以在该页上搜索与您设备相关的驱动程序。
2. 下载和安装:一旦找到了适用于您设备的驱动程序,点击相应的下载链接并将其保存到您的计算机中。
下载完成后,您可以双击该驱动程序进行安装。
在安装过程中,请按照驱动程序提供的安装向导进行操作。
3. 更新硬件驱动:时常更新硬件驱动可以保持系统的稳定性和兼容性。
您可以定期访问硬件设备厂商的官方网站,查找是否有适用于您设备的新版驱动程序。
如果有,请按照上述步骤下载和安装它们。
二、设备管理器的功能和使用设备管理器是Windows系统中一个重要的工具,它用于管理和监控计算机中安装的硬件设备。
通过设备管理器,您可以查看设备的状态、启用或禁用设备、更新驱动程序以及解决硬件冲突等问题。
1. 打开设备管理器:在Windows系统中,您可以通过多种方式打开设备管理器。
一种常用的方式是右键点击“开始”菜单,选择“设备管理器”选项。
另外,您还可以通过控制面板或者在运行对话框中输入“devmgmt.msc”命令来打开设备管理器。
2. 查看设备状态:在设备管理器中,您将看到一个设备列表,其中列出了计算机中安装的各种硬件设备。
设备列表中设备的图标和名称表示了设备的状态。
正常运行的设备通常显示为绿色图标,而有问题的设备可能会显示为黄色或红色图标。
Windows CE 6.0入门详解(环境搭建系统开发起步)
Windows CE 6.0入门详解(环境搭建内核配置和应用开发起步)文件编号XX-SP-TR-S01文件状态[ ]草稿 [] 正式发布 [√]正在修改当前版本V1.0拟制日期审核日期批准日期发布日期生效日期武汉众嵌科技有限公司修订历史记录A - 增加M - 修订D - 删除修改人摘要备注变更版本号日期变更类型(A*M*D)1.0 2011.7.7 A 邓壮建立2.0 2011-7-14 A 王文志修改一、安装开发环境 (4)A)按下列顺序安装所需软件 (4)B)安装说明 (4)C)装中可能出现的问题及解决方法 (5)二、WINDOWS CE 内核定制 (7)A)基W INDOWS CE产品开发流程大致分为以下几个阶段 (7)1. 硬件设计 (7)2. 选定BSP (7)3. 获得驱动程序 (7)4. 剪裁系统内核 (7)5. 导出SDK (7)B)详细制作流程 (8)1. 新建立一个OS Design工程 (8)2. 建立工程 (9)3. 配置工程 (10)C)配置内核 (12)1. 选择应用程序(Applications-End User) (12)2. Applications and Services Development (13)3. 选择系统核心服务(Core OS Services) (13)4. Communication Services and Networking (14)5. 设备管理(Device Management) (14)6. File System and Data Store (15)7. 选择字体(Fonts): (15)8. 国际化支持(International) (15)9. Internet Client Services (16)10. Graphics and Multimedia Technologies (16)11. Shell and User Interface (17)D)生成系统镜像 (17)E)生成SDK (18)F)安装A CTIVE S YNC 并配置 (18)G)配置模拟器并生成程序 (18)H)配置模拟器 (19)I)应用开发 (21)一、安装开发环境a) 按下列顺序安装所需软件1.V isual studio 20052.V isual studio 2005 server pack 13.V isual studio 2005 service pack 1 update for Windows vista/74.Windows Embedded CE 6.0 (Windows Embedded CE6.0.iso)5.Windows Embedded CE6.0 service pack 16.Windows Embedded CE 6.0 R27.Windows Embedded CE 6.0 R38.Windows Embedded CE cumulate product update rolluppackage through(12/31/2010)9.VS_emulator.exe(模拟器)b) 安装说明我的系统是Windows 7 旗舰版所以存在一个权限问题我以这样的方式安装所有的程序:c) 装中可能出现的问题及解决方法报错信息:1. ToolsMsmCA(Error): Setup package issue or CoreConDataStore corrupted: DeviceSDKInstComp Add/Remove failed.HR=0x8007005。
WindowCE驱动程序
Windows CE驱动程序模型 CE驱动程序模型
桌面Windows驱动程序模型 桌面Windows驱动程序模型
操作系统在启动后对硬件进行延迟加载,但依然 操作系统在启动后对硬件进行延迟加载, 把驱动程序加载到操作系统的内核空间中。 把驱动程序加载到操作系统的内核空间中。驱动程 序工作在系统的地址空间内, 序工作在系统的地址空间内,实现了驱动的动态加 载。 桌面Windows驱动程序最早采用 桌面Windows驱动程序最早采用VxD(已废弃), 驱动程序最早采用VxD(已废弃 已废弃) 2000开始采用 开始采用WDM( 从Windows 2000开始采用WDM(Windows Driver Model)模型,驱动程序调用DDK;Vista以 Model)模型,驱动程序调用DDK;Vista以 及以后的版本采用WDF( 及以后的版本采用WDF(Windows Driver Founation)是对WDM的建模与封装 Founation)是对WDM的建模与封装,但隐藏了更 的建模与封装, 多的细节,但降低了开发难度。 多的细节,但降低了开发难度。
Windows CE驱动程序的宿主 CE驱动程序的宿主
如果要运行DLL中的代码,那么必须先有一个EXE 如果要运行DLL中的代码,那么必须先有一个EXE 中的代码 进程,把该DLL加载道自己的地址空间内 加载道自己的地址空间内, 进程,把该DLL加载道自己的地址空间内,然后才可 执行DLL中的代码 中的代码。 执行DLL中的代码。 Windows CE的驱动程序也必须被其他EXE——宿 CE的驱动程序也必须被其他EXE——宿 的驱动程序也必须被其他 主加载
Windows CE驱动程序 CE驱动程序
Windows CE驱动程序 CE驱动程序
Windows CE驱动程序模型 CE驱动程序模型 Windows CE驱动程序的宿主程序 CE驱动程序的宿主程序 Windows CE驱动程序的类型 CE驱动程序的类型 Windows CE驱动程序的分类 CE驱动程序的分类 示例驱动程序的代码
WinCE系统下的驱动开发知识
WinCE第三方驱动安装之二——CAB安装包制作Microsoft Windows CE是紧凑的,高效的操作系统,它被广泛的应用在从手持电脑到专门的工业控制器或消费用电子产品等各种嵌入工业产品中。
英创公司ARM9系列工控主板预装了正版Windows CE5.0操作系统,并对板上所有硬件资源提供了完备的驱动支持。
随着WinCE操作系统的广泛应用,越来越多的在PC上使用的硬件设备提供了对WinCE系统的支持,如3G模块,Wi-Fi等。
第三方驱动一般以两种形式提供,一是动态链接库(*.dll)加对应的注册表文件(*.reg),另一种是可直接安装的CAB文件(*.cab)。
与动态链接库加注册表文件形式的驱动相比,CAB文件安装十分方便,不需要了解繁杂的WinCE INF文件格式或REG文件格式。
本文介绍通过WinCE CAB Manager工具将以动态链接库usbser.dll和注册表文件usbser.reg 形式提供的USB转串口驱动程序压缩为可直接在英创主板上安装的CAB压缩包的方法。
1、打开WinCE CAB Manager,选择File->New,运行New Cabinet wizard(CAB新建向导),选择“next”直至完成如图1。
2、在CAB Information上点击右键,选择Properties(属性)选项(如图2),打开CAB 包属性设置对话框,如图3。
3、在CAB Properties对话框中(如图3),填写Company Name(公司名称)和Application Name(CAB包名称)。
4、切换至CAB Properties->Installation Directory对话框,设置CAB包默认安装路径,此处设置为NandFlash\USBDriverDll目录,如图4。
5、切换至CAB Properties->Cabinet对话框,设置处理器类型,Processor可直接选择为ALL/CEF,如图5。
wince流驱动总结
最近公司让调试wince系统,用到了流驱动,做个总结,如有错误,请指出。
使用系统是wince6.0.Wince的流驱动一般包括5个文件,一个Makefile文件,一个链接和编译文件source文件,一个动态库导出文件.def文件,一个源代码文件.c文件,一个驱动程序头文件.h文件。
这5个文件共同完成wince流驱动的相关功能。
1、Makefile文件:makefile文件,文件名固定为makefile,该文件指出了驱动程序的编译和链接方法,一般来讲,所有驱动的makefile文件都一样,直接拷贝过来即可使用。
Makefile只有一句话:!INCLUDE $(_MAKEENVROOT)\makefile.def。
2、source文件:在wince bsp中,会看到很多source文件,一般会和源文件放在同一个目录中,但是不是绝对。
source文件是一个文本文件,为子目录中的源代码设置宏定义。
主要告诉Build.exe在编译源代码时应该如何编译和链接,告诉Nmake.exe如何编译源代码以及最后生成什么类型的文件。
例如:TARGETNAME=SimpleDriverRELEASETYPE=PLATFORMTARGETTYPE=DYNLINKTARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib DEFFILE=$(TARGETNAME).defDLLENTRY=DllEntrySOURCES=SimpleDriver.c这是simpledriver里面source文件的内如。
TARGETNAME:最后编译生成的目标文件的名称,不包括扩展名。
R ELEASETYPE=PLATFORM;它设置两种旗标:RELEASEDIR和RELEASELIBDIR,用于指定编译生成二进制和库文件存放的目录。
默认情况下,为目标生成的二进制和库文件存放在目录%_PROJECTROOT%\oak下,这里存放在D:\WINCE600\PLATFORM\Mini2440\target\ARMV4I\retail目录下TARGETTYPE:生成的文件类型,具体值如下:LIBRARY,一个.lib文件,静态库文件。
wince6.0的体系结构
WinCE6.0中的程序有两个级别,分为内核级和用户级。
有些程序可以同时运行在内核及和用户级。
例如:Coredll会分别运行在内核级和用户级上,这两个级别的Coredll功能是一样的,目的是增加系统的稳定性。
GWES:WinCE通过这模块提供的图形接口提供了几个功能:基本的绘图引擎、窗口管理、接口的事件机制等,是用户、应用程序和操作系统间的接口。
Device Manager:由Kernal来加载并一直运行,它负责管理设备驱动的加载和设备接口,Device Manager追踪驱动登记的接口,并支持根据全局唯一标识globally unique identifier (GUID),来寻找驱动。
Kernal Mode Driver:设备驱动是物力设备或虚拟设备的一个软件抽象,一个设备驱动管理这些设备的运行。
一个物力设备驱动的例子是网卡驱动,一个虚拟设备的驱动是文件系统。
不同的进程加载不同的驱动程序,下面这张表说明了哪些进程都加载什么驱动。
Coredll(核心操作系统服务):由Windows Embedded CE kernel 和其他一些通用的WinCE设计组成。
Coredll 执行低级别的任务,例如,进程、线程和内存管理。
基础设备驱动也是Coredll的一部分。
Kernal:表现为Nk.exe的形式,是WinCE操作系同的核心,提供操作系统的基本功能。
这些功能包括,进程、线程和内存管理。
Kernal还提供一些文件管理功能。
OAL(OEM adaptation layer):OEM adaptation layer,是存在于硬件和kernal之间的一段代码。
它方便了OS和目标设备之间的交流。
这段代码包括了:中断、时钟和一般I/O控制(IOCTLs)等代码。
KITL(Kernel Independent Transport Layer):提供一种简单的支持任何调试服务的方式。
KITL隔离了层间通信服务的协议,可以直接与硬件通信。
Windows CE 6.0入门详解(环境搭建系统开发起步)教学文稿
W i n d o w s C E 6.0入门详解(环境搭建系统开发起步)Windows CE 6.0入门详解(环境搭建内核配置和应用开发起步)武汉众嵌科技有限公司修订历史记录A - 增加M - 修订D - 删除一、安装开发环境 (5)A)按下列顺序安装所需软件 (5)B)安装说明 (5)C)装中可能出现的问题及解决方法 (6)二、WINDOWS CE 内核定制 (8)A)基W INDOWS CE产品开发流程大致分为以下几个阶段 (8)1. 硬件设计 (8)2. 选定BSP (8)3. 获得驱动程序 (8)4. 剪裁系统内核 (8)5. 导出SDK (9)B)详细制作流程 (9)1. 新建立一个OS Design工程 (9)2. 建立工程 (10)3. 配置工程 (11)C)配置内核 (13)1. 选择应用程序(Applications-End User) (13)2. Applications and Services Development (13)3. 选择系统核心服务(Core OS Services) (14)4. Communication Services and Networking (15)5. 设备管理(Device Management) (15)6. File System and Data Store (16)7. 选择字体(Fonts): (16)8. 国际化支持(International) (16)9. Internet Client Services (17)10. Graphics and Multimedia Technologies (17)11. Shell and User Interface (17)D)生成系统镜像 (17)E)生成SDK (18)F)安装A CTIVE S YNC 并配置 (18)G)配置模拟器并生成程序 (18)H)配置模拟器 (19)I)应用开发 (21)一、安装开发环境a) 按下列顺序安装所需软件1.Visual studio 20052.Visual studio 2005 server pack 13.Visual studio 2005 service pack 1 update for Windows vista/74.Windows Embedded CE 6.0 (Windows Embedded CE 6.0.iso)5.Windows Embedded CE6.0 service pack 16.Windows Embedded CE 6.0 R27.Windows Embedded CE 6.0 R38.Windows Embedded CE cumulate product update rolluppackage through(12/31/2010)9.VS_emulator.exe(模拟器)b) 安装说明我的系统是Windows 7 旗舰版所以存在一个权限问题我以这样的方式安装所有的程序:c) 装中可能出现的问题及解决方法报错信息:1. ToolsMsmCA(Error): Setup package issue or CoreConDataStore corrupted: DeviceSDKInstComp Add/Remove failed.HR=0x8007005。
非常详细的WINCE6.0模拟器使用说明
第一种方法,下载安装中文wince6.0模拟器SDK,直接运行即可。
①/detail/sunrain_hjb/563215下载模拟器②下载安装ActiveSync。
连接后显示:与PC机连接:就在wince6里面“开始->设置->网络和拨号连接-》新建连接->我的连接,选项:直接连接->下一步:选择设备 Serial Over DMA-》点完成,回到控制面板-》pc连接-》更改连接-》我的连接,然后插入底座就可以正常连接了。
插入底座:如图,cradle插入设备,更改PC端ActiveSync设置,连接DMA选项。
打开移动设备,即可把文件放入模拟器wince的文件夹中进行测试。
或者打开编写的工程,F5启动调试,即可在模拟器的wince6.0中进行测试。
大功告成!第二种方法,自己创建模拟器文件。
网上下载安装Microsoft Device Emulator 2.0,Virtual Machine Network Driver for Microsoft Device Emulator。
两个文件都不大。
1.新建工程及配置属性1.1创建的工程是基于模拟器的工程,按照WinCE的工程向导,一步步走下去,需要注意的几个点是:1. Available BSPs选择Device Emulator:ARMV4I,2. Design Templates选择 PDA Device,3. Variants选择Mobile Handled;当然,组建的添加和删除也是根据功能需求来进行。
1.2.建立工程完成之后,选择工程类型为Release,1.3配置工程属性会弹出本工程相应的对话框,分别对Configuration Properties下的现象进行配置,对General的配置:(在编译的时候选择Release模式,这样编译的速度会快很多,,而且生成的NK.bin内核文件相对比较小,方便bootload)对Locale的配置如下:(首先进行Clear all,之后选择中文(中国)或英语(美国))对Build Uptions的配置如下:勾去Enable KITL(…)单击确定,完成工程属性配置。
基于WinCE6.0的 LPC3250串口驱动程序开发
基于WinCE6.0 的LPC3250 串口驱动程序开发引言Windows CE 是一个开放的、可升级、可裁减的32 位实时嵌入式操作系统,具有可靠性好、实时性高、内核体积小的特点,广泛应用于工业控制、信息家电、移动通信、汽车电子、个人电子消费品等领域。
最新版本Windows Em-bedded CE 6.0 于2006 年11 月发布,其特点有:最大进程数量到32K,且每个进程有最大2 GB 的虚拟内存空间;将关键的驱动程序、文件系统和图形界面管理器移到了内核中,大大减少了CPU 在内核态和用户态间切换造成的性能损失等。
LPC3250 是NXP 半导体公司(由Philips 公司成立)推出的带有矢量浮点协处理器的ARM926EJ-SCPU 内核的微控制器。
它具有丰富的外围接口,包括7 个UART,其中4 个是标准UART,另外3 个是高速UART,都带有64 字节的接收和发送FIFO,最高可支持的速率达921 600 b/s。
为了实现低功耗,LPC3250 采用NXP 半导体先进的开发技术来优化内在功率,并使用增强型的软件控制结构使基于功率管理的应用得到优化。
在同时要求高性能和低功耗的嵌入式应用中,运行Win-dows CE 的LPC3250 平台将会有很好的市场前景,对于最常用到的串口的驱动开发显得尤为重要。
1 WindOWS CE 的串口驱动模型基于Windows CE 有两种驱动程序模型:本机设备驱动程序和流接口驱动程序。
串口驱动就属于分层的流接口驱动程序。
分层驱动程序将设备的驱动程序分为两层:平台相关驱动PDD(Platform Dependence Driver)层和模型设备驱动MDD(Model Device Driver)层。
PDD 层由特定于给定硬件设备或平台的代码组成,很多时候用户需要根据具体平台修改;MDD 层包含平台无关的代码,它通过实现一些操作系统预先定义的接口来实现某一类设备的通用功能,通常由微软提供。
Windows CE 6.0入门详解(环境搭建系统开发起步)
Windows CE 6.0入门详解(环境搭建内核配置和应用开发起步)武汉众嵌科技有限公司修订历史记录一、安装开发环境 (3)A)按下列顺序安装所需软件 (3)B)安装说明 (3)C)装中可能出现的问题及解决方法 (4)二、WINDOWS CE 内核定制 (5)A)基W INDOWS CE产品开发流程大致分为以下几个阶段 (5)1.硬件设计 (5)2.选定BSP (5)3.获得驱动程序 (5)4.剪裁系统内核 (5)5.导出SDK (6)B)详细制作流程 (6)1.新建立一个OS Design工程 (6)2.建立工程 (7)3.配置工程 (8)C)配置内核 (10)1.选择应用程序(Applications-End User) (10)2.Applications and Services Development (10)3.选择系统核心服务(Core OS Services) (11)munication Services and Networking (12)5.设备管理(Device Management) (12)6.and Data Store (13)7.选择字体(Fonts): (13)8.国际化支持(International) (13)9.Internet Client Services (14)10.Graphics and Multimedia Technologies (14)11.Shell and User Interface (15)D)生成系统镜像 (15)E)生成SDK (16)F)安装A CTIVE S YNC 并配置 (16)G)配置模拟器并生成程序 (16)H)配置模拟器 (17)I)应用开发 (19)一、安装开发环境a) 按下列顺序安装所需软件1.Visual studio 20052.Visual studio 2005 server pack 13.Visual studio 2005 service pack 1 update for Windows vista/74.Windows Embedded CE 6.0 (Windows Embedded CE6.0.iso)5.Windows Embedded CE6.0 service pack 16.Windows Embedded CE 6.0 R27.Windows Embedded CE 6.0 R38.Windows Embedded CE cumulate product update rolluppackage through(12/31/2010)9.VS_emulator.exe(模拟器)b) 安装说明我的系统是Windows 7 旗舰版所以存在一个权限问题我以这样的方式安装所有的程序:c) 装中可能出现的问题及解决方法报错信息:1. ToolsMsmCA(Error): Setup package issue or CoreConDataStore corrupted: DeviceSDKInstComp Add/Remove failed.HR=0x8007005。
WINCE6.0下的nandflash驱动
WINCE6.0下的nandflash驱动(基于K9F1G08U0B)********************************LoongEmbedded********************************作者:LoongEmbedded时间:2010.11.26类别:WINCE驱动开发********************************LoongEmbedded******************************** 1.nandflash驱动架构概述图1Windows CE下的FLASH驱动分为两层,分别为FMD层和FAL层(flash abstraction layer),FMD (Flash Media Driver)属于底层,直接操作Flash硬件,比如读、写和擦除等,不同的Flash 硬件则FMD_XXX接口实现函数各不相同,上层则是FAL (Flash Abstraction Layer)层,该层是由微软实现并提供的,是一个与硬件无关的层,可用于FAL层实现扇区的动态分配和坏块管理等。
FAL层向应用层(如API)提供DSK接口。
例如CreateFile中调用的设备即是调用该FAL层提供的接口。
FMD层暴露FMD_XXX让FAL层调用。
在PB中的阐述如下:The flash media driver (FMD) is a device driver that performs the actual input and output of data to a flash memory device. An FMD contains all of the device-specific code necessary for read, write, and erase commands to the flash memory device. You can link the FMD with the flash abstraction layer (FAL) to create a block driver that a file system such as FAT can use. You can also link the FMD with a boot loader so that the boot loader can flash a run-time image.2.FAL和FMD对应的实现代码部分首先我们知道是由FAL+FMD smflash.dll的,下面看看FAL和FMD分别对应哪些代码:2.1 FAL层FAL: \WINCE600\PRIVATE\WINCEOS\DRIVERS\MSFLASH,这个文件夹下的代码编译出fal.lib也就是说FAL层是以fal.lib供链接的,fal.lib的导出文件内容如下:LIBRARY MSFLASHEXPORTSDSK_InitDSK_DeinitDSK_OpenDSK_CloseDSK_ReadDSK_WriteDSK_SeekDSK_IOControlDSK_PowerDownDSK_PowerUp从上面的导出函数可知FAL层向应用层(如API)提供DSK接口2.2 FMD层smflash_lib.lib:\WINCE600\PLATFORM\DMA2443\Src\Common\Smartmedia\fmd,这个文件下的代码生成smflash_lib.lib,而\WINCE600\PLATFORM\DMA2443\Src\Common\Smartmedia\Dll 文件夹将生成smflash.dll,下面是其sources的内容:TARGETNAME=smflashTARGETTYPE=DYNLINKRELEASETYPE=PLATFORMWINCEOEM=1DEFFILE=smflash.defTARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \SOURCELIBS=$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\fal.lib \$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\smflash_lib.lib可以知道smflash.dll需要链接fal.lib和smflash_lib.lib这个两个库,而fal.lib就是FAL层提供的链接库,smflash_lib.lib是FMD层提供的链接库。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设备驱动程序基础
b)
混合驱动程序
同样使用两层的MDD/PDD模型,这意味着会持续使用MDD, 也就是对于所有的PDD来说都使用相同的MDD,但是这个 MDD还提供了额外的独特功能(这个功能是给定设备类型的 MDD/PDD实现的一种逻辑扩展)。
使用混合驱动程序的优点: 使用混合驱动程序的优点:与分层架构相同。
接上页... 接上页...
这种架构通常在下列情况中使用: 当某个设备类型没有可用的分层模型时; 当设备硬件是不常见的定制硬件时; 当没有可以重用的分层驱动程序代码时; 当使用MDD/PDD模型,但不能达到需要的效率水平时。 当使用MDD/PDD模型,但不能达到需要的效率水平时。 优点: 可以避免在各个层之间切换,并且能最大化使用硬件,这些都 优点: 带来了高效率。
XXX_Seek
— 调用SetFilePointer函数时调用此函数 调用SetFilePointer函数时调用此函数
实现流接口驱动程序
XXX_IOControl
— 调用DeviceIoControl函数时调用此函数 调用DeviceIoControl函数时调用此函数 — 提供了支持自定义驱动程序操作的机制 — 大多数驱动程序都具有的多用途函数 — 通过I/O控制代码来识别具体的操作 通过I/O控制代码来识别具体的操作 — I/O控制代码是每个设备特定的 I/O控制代码是每个设备特定的
设备驱动程序基础
GWES(图形、窗口以及事件子系统) GWES(图形、窗口以及事件子系统):
支持窗口、对话框、控件、菜单、以及其他和用户界面相关的资源。控 制窗口管理器和窗口消息管理器,包括键盘消息、鼠标消息、触摸屏消 息等等。 GWES(gwes.dll)模块会加载由本系统独占使用的设备驱动程序,也就 是下列以任何方式与用户界面相关联的驱动程序:键盘、视频适配器、 触摸屏、打印机、鼠标。
设备驱动程序基础
2.
加载模块
在Windows Embedded CE中,下列三个模块(内核的一部分)可以加 CE中,下列三个模块(内核的一部分)可以加 载驱动程序: Device.dll: Device.dll:由设备管理器(Device Manager)处理,并被称为流驱动 程序(Stream Driver)。 Gwes.dll: Gwes.dll:由GWES处理,并被称为原生驱动程序(Native Driver)。 FileSys.dll: FileSys.dll:由文件系统处理。
注意:在函数名中,前缀XXX是一个占位符,用于表示三个字母长度的驱动程序 注意:
名称。
实现流接口驱动程序
XXX_Open
— 当使用设备名称调用CreateFile函数时,调用这个函数。 当使用设备名称调用CreateFile函数时 调用这个函数。 函数时, — 为其他IO函数的使用提供设备句柄。 为其他IO函数的使用提供设备句柄 函数的使用提供设备句柄。 — 为开放上下文分配资源,并为操作做准备。 为开放上下文分配资源,并为操作做准备。
原生设备驱动程序: 原生设备驱动程序:
典型的原生CE驱动程序支持输入和输出外围设备,例如显示器驱动程序、键盘驱动程 序、触摸屏驱动程序。 图形、窗口以及事件子系统(GWES)会直接加载和管理这些驱动程序。 原生驱动程序会根据它们的用途实现特定的函数,GWES可以通过调用GetProcAddress 这个API函数来判定这些特定的函数。
实现流接口驱动程序
XXX_PowerDown
— 当OS正在挂起时用于通知设备的回调函数 OS正在挂起时用于通知设备的回调函数 — 为了进入低功耗模式,允许驱动程序执行任何必要的操作 为了进入低功耗模式,
XXX_PowerUp
— 当OS正在恢复运行时用于通知设备的回调函数 OS正在恢复运行时用于通知设备的回调函数 — 为了离开低功耗模式,允许驱动程序执行任何必要的操作 为了离开低功耗模式,
为了使设备管理器能够成功地加载和管理流驱动程序,流驱动程序必须导出一个 通用的接口,被称为流接口。 流接口由12个函数组成,用于初始化和打开设备,读写数据,使设备上电或掉电, 关闭和反初始化设备。 XXX_Init XXX_PreDeinit XXX_Deinit XXX_Open XXX_Close XXX_PreClose XXX_IOControl XXX_Read XXX_Write XXX_Seek XXX_PowerUp XXX_PowerDown
驱动程序是一种向操作系统(OS)提供物理设备或虚拟设备的 驱动程序是一种向操作系统(OS)提供物理设备或虚拟设备的 操作接口的软件。 操作系统期望驱动程序能够实现一个预定义的接口,这样便可 以为具体的硬件或设备的虚拟实现创建抽象。 设备驱动程序包含了硬件特定代码,除了CE自带的标准驱动程 设备驱动程序包含了硬件特定代码,除了CE自带的标准驱动程 序之外,我们还可以实现自定义的驱动程序以支持额外的外围 设备。 设备驱动程序是一个动态链接库(DLL),它可以在底层硬件 设备驱动程序是一个动态链接库(DLL),它可以在底层硬件 和运行在目标设备上的OS以及应用程序之间提供一个抽象层。 和运行在目标设备上的OS以及应用程序之间提供一个抽象层。
提问时间
你可以回答下面的问题么:
1.
在分层驱动程序架构中,通常需要修改哪一层?
2.
哪个模块负责加载流驱动程序? b/w MDD层 - OS和MDD层 - PDD层的接口名称是什么? MDD层 OS和MDD层 PDD层的接口名称是什么?
3.
2.
实现流接口驱动程序
实现流接口驱动程序
流接口API 流接口API
设备驱动程序基础
设备驱动程序分类
实现架构 分层驱动程序 单层驱动程序 混合驱动程序 加载模块 设备管理器(device.dll) 设备管理器(device.dll)— 流驱动程序。 GWES(gwes.dll) 只由图像、窗口以及事件子系统(GWES) GWES(gwes.dll)— 只由图像、窗口以及事件子系统(GWES) 使用的原生驱动程序。 文件系统(filesys.dll) 文件系统(filesys.dll)— 文件系统的驱动程序。 加载到内存 内核(Kernel)内存 内核(Kernel)内存 用户(User)内存 用户(User)内存 系统加载时机 系统启动时 发生请求时
缺点:构建一个单层驱动程序是最复杂的任务之一,会增加开发的成 缺点: 本与时间。
接上页... 接上页...
单层与分层驱动程序架构
设备驱动程序基础
Windows Embedded CE中包含大多数驱动程序的目录: CE中包含大多数驱动程序的目录: 表格:包含驱动程序的目录 表格:
目录 \PUBLIC\COMMON\OAK\DRIVERS\
设备驱动程序基础
支持设备类型
串行端口 视频适配器 网络卡 触摸屏 键盘 鼠标 人机接口设备(HID),等等... 人机接口设备(HID),等等...
设备驱动程序基础
1.
实现架构:
WinCE同样在基本设计上定义了3 WinCE同样在基本设计上定义了3种类型的设备驱动程序。
a)
分层驱动程序
Windows Embedded CE支持一种分层的驱动程序架构,它基于模型设备驱动程序 CE支持一种分层的驱动程序架构,它基于模型设备驱动程序 (MDD)和平台依赖驱动程序(PDD)。 MDD)和平台依赖驱动程序(PDD)。 PDD
Windows Embedded CE 6.0
设备驱动程序 基础知识
Bean Young
主题… 主题…
1. 2. 3. 4. 5.
设备驱动程序基础 实现流接口驱动程序 配置与加载驱动程序 在设备驱动程序中实现中断机制 为驱动程序实现电源管理
1.
设备驱动程序基础
设备驱动程序基础
什么是设备驱动 程序
文件系统: 文件系统:
文件系统负责对象存储、注册表、CEDB数据库、以及系统初始化。 文件系统(filesys.dll)模块会加载文件系统驱动程序。文件系统驱动程序 作为一个DLL实现,它实现了一个预定义的函数集合与IOCTL控制代码 集合。文件系统驱动程序将设备注册成一个文件,这样便可以通过使用 一个标准的文件系统应用程序接口(API)来调用这些函数。
描述 包含与平台无关的驱动程序, 通常是总线驱动程序以及分 层驱动程序的MDD部分。 包含片上系统(SOC)外围 设备所使用的驱动程序实现。 包含指定平台的驱动程序实 现以及分层驱动程序的PDD 部分。
\PLATFORM\COMMON\SRC\SOC\ \PLATFORM\<PLATFORM_NAME>\SRC\DRIVERS
设备管理器
Windows Embedded CE的设备管理器是一个OS组件,它负责管理 CE的设备管理器是一个OS组件,它负责管理 系统上的流设备驱动程序。在引导进程期间,OAL(oal.exe)会 系统上的流设备驱动程序。在引导进程期间,OAL(oal.exe)会 加载内核(kernel.dll),然后内核又会加载设备管理器。特别地, 加载内核(kernel.dll),然后内核又会加载设备管理器。特别地, 内核会加载设备管理器的外壳程序(device.dll),然后这个外壳 内核会加载设备管理器的外壳程序(device.dll),然后这个外壳 程序会转而加载设备管理器的核心程序(devmgr.dll),然后这个 程序会转而加载设备管理器的核心程序(devmgr.dll),然后这个 核心程序又会负责加载和卸载流驱动程序,并且会成为与流驱动 程序交互的接口。
设备驱动程序基础 MDD: MDD:这是一种常见的设备驱动程序类型,它通常向操作系统 提供必需的设备驱动程序接口(DDI),也就是IOCTL代码和 函数的定义集合。 为了与PDD层进行交互,MDD同样定义了中断服务线程(IST) 为了与PDD层进行交互,MDD同样定义了中断服务线程(IST) 和设备驱动程序服务接口(DDSI)。 和设备驱动程序服务接口(DDSI)。 PDD:PDD库实现了一些实际的函数,以便和硬件进行通信, 并通过预定义的函数集合(DDSI)向MDD层提供信息。 DDSI MDD 使用分层架构的优点: 使用分层架构的优点: 代码重用 更低的开发开销和成本 在为客户修正QFE时,可以节省时间,提高开发效率 在为客户修正QFE时,可以节省时间,提高开发效率 通常只需要自己开发实现PDD层,并使用已有的公共MDD层 通常只需要自己开发实现PDD层,并使用已有的公共MDD层 实现