WinCE
njuitjf
不积跬步无以致千里
展开
-
OTGHNP_EventNotify
<br /><br />函数CHub::IdentifyOTGDevice中对m_bOtgDescriptor进行赋值<br /> m_bOtgDescriptor = m_bOtgDesc[2];<br /> <br />函数CDevice::CreateUsbConfigurationStructure中对m_bOtgDesc进行了赋值:<br /> //identify the OTG descriptor<br /> memset((PVOID)&m_bOtgDesc[0], 0原创 2011-05-02 22:05:00 · 919 阅读 · 0 评论 -
USB Device Desctiptor 相关
前面有篇文章说到如何获取U盘描述符,最终我们读取描述符的时候是通过以下语句实现的: lpudd[i] = m_ppCDeviceOnPort[i]->m_deviceInfo.Descriptor;将驱动中保存的Desctiptor信息,赋值到传入的buffer中。因此,引出来一个问题,驱动中保存的Descriptor信息是什么时候产生的?宏观上来讲,应该是USB Device插入的时候,驱动从USB Device读取相关信息,并最终生成Descriptor。但具体是怎么实现的呢?今天就来分析一下这个过程原创 2011-04-01 18:19:00 · 1701 阅读 · 0 评论 -
Wince 5.0 获取U盘描述符
<br />最近由于项目需求,需要获取U盘的描述符。而现有的usb otg驱动中没有提供这样的接口。没有办法,只能自己动手来修改了。本人刚开始接触USB 驱动,在代码的海洋中还比较迷茫。以下代码的实现是公司内一位大牛所作,本人只是借来学习一用。也算对USB驱动有个初步的了解。<br /> <br />先罗嗦两句。刚开始看到文件夹usbotg,还有点不太理解是什么意思。当时在想,usb驱动为什么不直接放在usb文件夹下,而是放在usbotg文件夹下?otg是嘛意思?资料当然也很好找,usb家族里面,对该成员有原创 2011-03-31 15:32:00 · 2091 阅读 · 0 评论 -
HCD中Root Hub对象的初始化
<br />前面有篇文章,说到了如何获取USB设备的Descriptor。其中有一个步,通过调用CHcd类的成员变量m_pCRootHub(CRootHub)的GetDeviceList函数,来获取Root Hub上设备列表。此处的Root Hub是在什么地方被初始化的呢?<br /> <br />1、搜索代码发现,类CHcd中有一个成员函数SetRootHub,会给m_pCRootHub赋值。<br /> <br />2、类CEhcd的成员函数DeviceInitialize,会创建一个CRootHub类原创 2011-03-31 17:20:00 · 1363 阅读 · 0 评论 -
windows的分层驱动--内核实现的一种方式
<br />古老的unix提出了一切皆文件的思想,近代的OO提出了一切皆对象的理论,在unix的年代,人们迫切需要的是如何操作计算机而不是如何设计软件,毕竟那个时候软件设计其实比现在简单,就那么几种,关键是没有人会操作计算机,而OO年代,软件成了一种工业产品,此时不管是追求利润也好,XX也罢,人们的计算机操作水平被windows拉到了一个很高的层次--如此复杂菜单加菜单的方式。使用软件成了人们日常生活的一部分,因此问题就成了如何快速开发出软件,因此也就有了OO,甚至更新的面向YY编程。windows正好出现转载 2011-03-31 16:07:00 · 785 阅读 · 0 评论 -
外国wince学习论坛收集
<br />外国wince学习论坛收集<br />http://www.archivum.info/microsoft.public.windowsce.platbuilder/<br />——更新很快,资料很多,搜索功能很强的老外wince论坛(SD......SPI ,and so on.)<br />http://www.tech-archive.net/Archive/WindowsCE/<br />——很牛的一个网站,PB,EVC,EVB等都有很多例子。有Bruce Eitman等高人回答,是学习转载 2011-03-21 17:26:00 · 883 阅读 · 0 评论 -
wince 5.0 内核启动顺序(ARM)
<br /><br />Kernel Startup Sequence<br />Startup()<br />KernelStartup()<br />ArmInit()<br />OEMInitDebugSerial()<br />OEMInit()<br />KernelInit()<br />HeapInit()<br />InitMemoryPool()<br />ProcInit()<br />SchedInit()<br />FirstSchedule()<br />SystemStartup转载 2011-03-21 16:06:00 · 862 阅读 · 0 评论 -
Windows CE 6.x驱动程序的新特性
1 访问检查<br />访问检查是用来检查函数的调用者是否有足够的权限去访问传递给这个函数的内存。访问检查是很必要的,它可以防止恶意的应用程序利用驱动程序去完成需要特权才能访问的资源。设备驱动程序由于在Windows Embedded CE 6.0中处于内核空间所以是一种特权程序,可以访问很多系统的资源。而工作在用户态的应用程序却不是。如果一个应用程序利用设备驱动程序去读写系统的内存,那么设备驱动程序实际上就相当于是授予了这个应用程序高的访问权限。所以在设备驱动程序中进行访问检查可以保护转载 2010-08-31 22:22:00 · 809 阅读 · 0 评论 -
File System Driver Creation
File System Driver CreationA file system driver (FSD) is a dynamic-link library (DLL) that exports file system entry points that map to standard Microsoft® Windows® CE file system functions, such as CreateFile and CreateDirectory. When an application cal转载 2010-08-22 15:19:00 · 947 阅读 · 0 评论 -
Implementing FSD_GetVolumeInfo
<br />In Windows CE 5.0, we added a new FSD API: FSD_GetVolumeInfo. This API is used to populate the CE_VOLUME_INFO structure reported by the CeGetVolumeInfo SDK API. This function is intended to give applications insight into properties of the file system转载 2010-08-22 15:14:00 · 688 阅读 · 0 评论 -
WinCE USB驱动CDevice::EnterOperationalState函数相关
USB驱动中,设备相关的类及其继承关系如下: CDevice (ADT) / / CFunction CHub (ADT) / / CRootHub CExternalHub父类CDevice中包含原创 2011-04-02 17:06:00 · 2025 阅读 · 0 评论 -
Wince USB otg驱动中关于函数CHub::HubStatusChangeThread
该函数是USB驱动中,监视hub状态改变的线程函数。Root hub的监视线程在OTG_Init函数被调用时创建。External Hub的监视线程在External Hub插入到Root Hub时被创建。在线程刚启动的时候(在线程循环体之外),需要进行一些操作。 // before we can process port changes, we need // to power all ports // 函数PowerAllHubPorts在CRootHub类中的实现为空。 // 在类CExternalH原创 2011-04-05 22:09:00 · 2138 阅读 · 2 评论 -
wince usb驱动中的CHub::AttachDevice函数
<br /><br />wince usb驱动中的CHub::AttachDevice函数<br /> <br />函数CHub::AttachDevice在HubStatusChangeThread中被调用。当有设备插入的时候,该函数被调用。函数的注释如下:<br />// This function is called when a new device is attached<br />// on port "port". After this procedure原创 2011-05-02 17:48:00 · 2801 阅读 · 0 评论 -
wince 6.0 设备管理器架构(Device Manager Architecture)
<br />设备管理器架构<br />----Windows Embedded CE 6.0 R3<br /> <br />原文:http://msdn.microsoft.com/en-us/library/ee484004(v=WinEmbedded.60).aspx<br /> <br />设备管理器运行在Windows Embedded CE操作系统下,跟踪加载的驱动及其接口。它从内核中启动,并持续运行。当设备接口变的可用或不可用时,设备管理器能够通知用户。用户,或者系统本身可以让设备接口变的可用或翻译 2011-05-03 15:14:00 · 2199 阅读 · 0 评论 -
wince usb驱动中的OTGHNP_IsADevice函数
<br /><br />函数OTGHNP_Init中调用了函数UsbSocHnpInit。<br /> UsbSocHnpInit(dwHnpRegBase, fLegacyHost);<br /> <br />函数UsbSocHnpInit中对全局变量g_dwHnpRegBase进行赋值。<br /> g_dwHnpRegBase = dwHnpRegBase;<br /> <br />函数OTGHNP_IsADevice调用了函数UsbSocHnpIsADevice。<br /> <br /原创 2011-05-02 18:18:00 · 831 阅读 · 0 评论 -
CE5.0 驱动程序:设备管理器的源码分析
<br />系统下面许多设备,比如键盘,串口,触摸屏,硬盘......这些设备什么时候被系统使用的?这些设备怎样被系统使用的?加载过程是怎么样的?设备如何加入系统协同工作的?为什么系统能检测到并使用即插即用的设备(如usb鼠标)?系统是怎么控制设备的电源的?<br /><br />CE管理设备的程序叫做DEVICE.EXE,这是一个独立的用户级进程,它主要负责跟踪,维护系统的设备信息并对设备资源进行调配.设备管理器包括即插即用设备管理,电源管理,io资源管理等等.<br /><br />结构示意图:<br转载 2011-05-03 16:14:00 · 1243 阅读 · 0 评论 -
WinCE中命令行工具Viewbin简介(查看nk.bin中包含的文件)
<br /><br />Viewbin是微软提供的一个命令行工具,在WinCE5.0和WinCE6.0中,可以在"/WINCE600/PUBLIC/COMMON/OAK/BIN/I386"找到他。Viewbin工具可以用来查看NK.bin文件。它可以从NK.bin中获得这个NK image的大小,运行的起始地址等。还能查看到里面所包含的模块,应用程序及相关的信息。<br />Viewbin的使用格式如下:<br />viewbin [parameter] [filename]<br />举几个例子吧:<br转载 2011-04-28 11:50:00 · 2789 阅读 · 0 评论 -
vs2005 如何调试wince dll
<br /><br />vs2005 wince dll调试只需要简单的几个设置就可以了:<br />1 在dll project的property设置,deployment中的remote directory设置为目标文件夹,即编译好的dll需要copy to的地方<br /><br />2 在property中设置,Debugging中的remote executable设置为会调用你dll的应用程序(当然是wince的应用)。<br />只要你的dll是用debug版本编译的就可以在dll的solut转载 2011-04-27 15:09:00 · 1486 阅读 · 0 评论 -
WinCE USB 驱动中IssueTransfer调用相关
<br /><br />IssueTransfer调用相关<br /> <br />在CHub类中的AttachDevice函数中,经常会调用到类CControlPipe的函数IssueTransfer。本文介绍一下函数CControlPipe::IssueTransfer的调用过程,以及具体实现。<br /> <br />首先说说对函数CControlPipe::IssueTransfer的调用。<br /> <br />首先调用函数CControlPipe::IssueTransfer:<br />原创 2011-04-22 18:20:00 · 1707 阅读 · 0 评论 -
Wince 中栈的大小
<br /><br />Fun()<br />{<br />char SourceBuffer[102400] = {0};<br />}<br />在一函数中如上,申请了100K栈内存,出现的问题是只要一调用该函数,主线程马上终止并退出。一开始就想到了栈空间不足的可能,重启手机,再调试,问题依旧,google了WIN CE内存,找到了答案。<br />栈是Windows CE内存类型中最容易使用的(自行管理)。在Windows CE中的栈像其它操作系统一样,是被引用函数的临时变量存储区。操作系统也用栈来存转载 2011-04-10 15:23:00 · 1354 阅读 · 0 评论 -
CE中模块加载顺序
<br />在ce中可以通过“LaunchhXX”和"DependXX"来指定模块的加载顺序,以及模块间的依赖关系。<br />如:<br /> <br /><br />; @CESYSGEN IF CE_MODULES_SHELL<br />[HKEY_LOCAL_MACHINE/init]<br /> "Launch10"="shell.exe"<br />; @CESYSGEN ENDIF<br />; @CESYSGEN IF CE_MODULES_DEVICE<br />[HKEY_原创 2010-08-21 15:48:00 · 1135 阅读 · 0 评论 -
Implementing FSD Call-back File Notifications
<br />In the past, the Windows CE file explorer required every File System Driver (FSD) to perform call-back notifications after every file system change. This notification mechanism allowed file explorer to quickly refresh open views when files were added转载 2010-08-22 15:18:00 · 721 阅读 · 0 评论 -
wince 错误 Error: failed PB timebomb check
今天在搭ce6.0的环境时,碰到了一个错误。在Sysgen的时候,开始都没有出现错误,到 make run time image的时候, 弹出了如下的错误 : makeimg: run command: romimage F:/OSDesign/CHSOS/CHSOS/RelDir/DeviceEmulator_ARMV4I_Release/ce.bibError: failed P原创 2010-05-12 14:46:00 · 3241 阅读 · 0 评论 -
静态链接库(Lib)与动态链接库(DLL)的区别
静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包转载 2010-05-13 20:35:00 · 671 阅读 · 0 评论 -
静态链接库和动态链接库
我们可以创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接,整个查找过程根本不需要我们操心。这个文件叫做 “库(Libary)”,平时我们把编译好的目标代码存储到“库”里面,要用的时候链接程序帮我们从库里面找出来。静态链接库: 在早期库的组织形式相对简单,里面的目标代码只能够进行静态链接,所以我们称为转载 2010-05-13 20:34:00 · 673 阅读 · 0 评论 -
动态链接库dll,静态链接库lib, 导入库lib
动态链接库dll,静态链接库lib, 导入库lib目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。 静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态转载 2010-05-13 20:33:00 · 644 阅读 · 0 评论 -
WinCE 加载存储设备的过程
WinCE 加载存储设备的过程:1) 设备管理器负责加载区块装置的驱动程序。2) 由该设备发出一个通知,告知储存管理器该设备的设备名及其GUID等信息。3) 储存管理器根据组态信息为该设备加载分区驱动程序。4) 储存管理器列举该设备上的所有分区。5) 储存管理器为每个分区加载档案系统驱动程序。转载 2010-04-26 21:57:00 · 769 阅读 · 0 评论 -
wince write through
以前写过一个wince下面的性能测试工具,在进行文件读写操作的时候,创建文件,我同事使用了FILE_FLAG_WRITE_THROUGH和FILE_FLAG_NO_BUFFERING两个标志。后来有同事提出,wince下面不支持FILE_FLAG_NO_BUFFERING标志,所以也不支持文件的直接读写。我当时的理解是,不支持FILE_FLAG_NO_BUFFERING标志,也就是说读写的原创 2010-04-12 21:21:00 · 1760 阅读 · 0 评论 -
wince文件系统函数的调用过程
wince文件系统函数的调用过程 查了一下MSDN,在页面:<a title="http://msdn.microsoft.com/en-us/library/ee489755.aspxCTRL + 单击以下链接" href="http://msdn.microsoft.com/en-us/library/ee489755.aspx" target="_blank">http://原创 2010-04-12 21:16:00 · 1198 阅读 · 0 评论 -
wince如何通知设备已经mount
wince如何通知设备已经mount 应用程序怎样知道何时设备可以使用,即可以成功的在设备上进行文件操作,这就涉及到mount和mount通知的问题。这部分包括两个方面的内容:1、mount的实现和通知。2、获取mount的通知。 mount的实现和通知都是在FSD中实现的。FSD中Export出去的函数中,有一个是XXX_MountDisk函数,如MyFSD_MountDisk函原创 2010-04-12 21:17:00 · 1196 阅读 · 1 评论 -
如何在wince下实现一个文件系统驱动
如何在wince下实现一个文件系统驱动 应用程序操作文件是通过wince 文件系统提供的接口进行操作,如:可以通过CreateFile函数,打开或创建一个文件。接下来,系统是如何去完成这个任务的呢?比如我们要操作SD卡上的文件,SD卡上也有自己的文件系统,用于组织和管理文件,wince文件系统是如果操作这些文件的呢?这时候,FSD(文件系统驱动)就发挥它的作用了。文件的操作共涉及到五个原创 2010-04-12 21:14:00 · 2823 阅读 · 0 评论 -
ce 6.0 链接错误
今天在CE 6.0中添加了一个驱动,在buid我的驱动的时候,显示有链接错误。是我驱动中调用FSDMGR_AdvertiseInterface,等几个fsdmgr中的函数,链接有问题。由于以前在网上看到的资料,说产生链接错误,很有可能是环境配置有问题。基于此,我换了个机器,重新配置环境,结果错误照常产生。后来请教了一位大侠,大侠提醒,很有可能是链接的lib有问题。在大侠的帮助下,进行了一下尝试原创 2010-05-13 20:28:00 · 834 阅读 · 1 评论 -
WinCE 流接口驱动中设备句柄的传输过程
驱动程序是通过设备句柄来控制设备的,应用程序要控制设备,也需要获得设备句柄,然后使用驱动程序体提供的DeviceIoControl接口来控制设备。那么应用程序是如何获得设备句柄的呢?通常流接口驱动程序会使用两个结构体,驱动上下文结构体和设备上下文结构体。设备句柄会保存在设备上下文结构体中,驱动上下文结构体会保存设备上下文结构体的地址。这样通过驱动上下文结构体就能够得到设备句柄。下面我定义一转载 2010-05-17 19:58:00 · 572 阅读 · 0 评论 -
Writing Windows CE Device Drivers: Principle to Practice(转)
<br />Writing Windows CE Device Drivers: Principle to Practice<br />By David G. Heil, CalAmp, September 22, 2006<br />0 CommentsDavid Heil of CalAmp provides an overview of the new Windows CE 6.0 kernel architecture and describes the various driver models转载 2010-06-21 22:20:00 · 1007 阅读 · 0 评论 -
Registry Configuration for an FSD
<br /><br />File system drivers can be loaded in two different ways: loaded in response to a disk being attached to the system (discovered during boot or after media insertion), and auto-loaded during the boot sequence.<br />Auto-Loaded File Systems<br />转载 2010-08-14 09:33:00 · 677 阅读 · 0 评论 -
INTERACTING WITH FSDMGR(转)
<br /><br />下面转个老外写的介绍FSDMGR的文章,不错,转到这里,权当备份。INTERACTING WITH FSDMGR<br />In interacting with the FSDMGR and its helper functions, there are two pseudo-handle types that will be used: HDSK and HVOL (these types are defined in fsdmgr.h). While there is a on转载 2010-06-21 22:19:00 · 751 阅读 · 0 评论 -
CE驱动程序快速入门(转)
<br /><br />有人也许和我一样比较心急,想尽快知道如何去写一个具体的驱动程序,这里,假设您对驱动程序已经有比较好的了解,告诉大家一个快速上路的方法。当然,如果您有足够的时间我建议在动手之前还是深入了解一下CE整个系统架构。<br />在CE中,最简单的一个驱动程序莫过于一个内置(Built-in)设备的流接口驱动。对于一个不支持热拔插的设备,最快捷的方法就是为其实现一个内置的流接口的驱动。<br />对于这样一类驱动程序,我们只需要按一种特定的规则实现一个动态库,其中实现对所有的硬件功能的调用,再转载 2010-06-15 10:08:00 · 974 阅读 · 0 评论 -
ce 6.0 链接错误
<br />今天在CE 6.0中添加了一个驱动,在buid我的驱动的时候,显示有链接错误。是我驱动中调用FSDMGR_AdvertiseInterface,等几个fsdmgr中的函数,链接有问题。由于以前在网上看到的资料,说产生链接错误,很有可能是环境配置有问题。基于此,我换了个机器,重新配置环境,结果错误照常产生。后来请教了一位大侠,大侠提醒,很有可能是链接的lib有问题。在大侠的帮助下,进行了一下尝试:一、驱动的sources文件中调用的是coredll.lib,怀疑ce6.0中的lib分为用户(cor原创 2010-06-15 10:01:00 · 958 阅读 · 0 评论 -
WinCE 流接口驱动中设备句柄的传输过程
<br /><br />驱动程序是通过设备句柄来控制设备的,应用程序要控制设备,也需要获得设备句柄,然后使用驱动程序体提供的DeviceIoControl接口来控制设备。那么应用程序是如何获得设备句柄的呢?<br /><br />通常流接口驱动程序会使用两个结构体,驱动上下文结构体和设备上下文结构体。设备句柄会保存在设备上下文结构体中,驱动上下文结构体会保存设备上下文结构体的地址。这样通过驱动上下文结构体就能够得到设备句柄。下面我定义一个驱动上下文指针dwDriverContext来说明这个指针是如何被传递转载 2010-06-15 10:08:00 · 641 阅读 · 0 评论 -
FSDMGR Helper Functions for FSD Developers
<br /><br />FSDMGR provides many helper functions to make developing an FSD easier. In particular, registry helper functions provide a simple mechanism for configuring an FSD for a particular storage device and I/O helper functions provide a media-independ转载 2010-08-02 22:08:00 · 752 阅读 · 0 评论