摘要: 以前在CSDN写过一些wince5.0中断的文章,现在重新看看,发现以前的有些理解是错误的,想翻开来改改,可是郁闷的CSDN在前台没有返回后台的编辑功能,所以现在重新写一篇纠正一下。首先描述wince5.0 (2440BSP)的中断流程注册表等——》KernelIoControl(——》OEMIoControl——》OALIntrRequestIrqs )把物理中断转换成系统中断——》InterruptInitialize调用OEMInterruptEnable使能中断并用中断绑定线程——》OEMInterruptHandler屏蔽中断——》执行线程——》InterruptDone——》调用O 阅读全文
posted @ 2010-05-05 11:17 gmh 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 对于KernelIoControl这个函数我们并不陌生,在2440 5.0BSP当中,这个函数在很多驱动中出现了,主要是用来申请中断,比如下面BOOL RetVal = KernelIoControl( IOCTL_HAL_REQUEST_SYSINTR, &Irq, sizeof( Irq ), pSysIntr, sizeof( *pSysIntr ), NULL );-------------------其实他的作用远远不止申请/释放中断那么简单,下面来看看PB的帮助文档。This function provides the kernel with a generic I/O contr 阅读全文
posted @ 2010-05-05 10:24 gmh 阅读(1828) 评论(0) 推荐(0) 编辑
摘要: 首先要理解 windows CE 下的地址映射机制。 wince有两种地址:物理地址和虚拟地址.不同架构的 CPU 硬件上的区别导致地址映射也不同。MIPS和SH x 处理器,不采用MMU,直接在CPU和内核里定义 1G 的物理地址;而X86和ARM带有 MMU 单元,在 OEMAddressTable 中定义物理地址到虚拟地址间的映射关系或者是OS启动后调用 CreateStaticMapping 和 NKCreateStaticMapping 来实现从虚拟地址到物理地址的静态映射.经过静态映射的地址,可以由操作系统内核用于 ISR 访问设备。如果我们要在应用程序中访问外设,必须在物理地址和 阅读全文
posted @ 2010-04-29 16:20 gmh 阅读(1036) 评论(0) 推荐(0) 编辑
摘要: 先说VirtualAlloc 和VirtualCopy VirtualAlloc 首先会从我们的虚拟地址空间中申请(或者说预留)一块虚拟空间,准备接下来要用它。注意此时,可用的物理内存并没有减少,只是虚拟地址少了一块可用的区域。真正把这块之前reserved的虚拟空间映射到物理的内存区域就是由VirtualCopy来干的,此时,MMU的页表就会增加一个entry,来表示物理--虚拟的映射关系。再说动态虚拟内存映射和静态虚拟内存映射 OEMaddressTable只是建立了一个一级的静态虚拟--物理的映射关系,一般给kernel(NK.EXE)通过直接访问的形式来用(OALPAtoVA); Mm 阅读全文
posted @ 2010-04-29 10:52 gmh 阅读(821) 评论(0) 推荐(1) 编辑
摘要: 1.VirtualAlloc用来在进程的虚拟地址空间中保留(reserve)或者提交(commit)页。在保留时以64KB为粒度,即保留空间以64K为单位。而提交虚拟地址时,则以页(典型大小为4KB)为单位。2.VirtualCopy用来绑定一块物理内存到当前进程虚拟地址空间。参数里的lpvSrc既可以是内核段的虚拟地址也可以是物理地址(用page_physical来标记)。同时要注意lpvSrc的右移与否。 PAGE_PHYSICAL这个参数决定了要右移八位(除以256),不过还有一点就是使用了PAGE_PHYSICAL之后就不要使用VirtualFree 了因为,使用了也无济于事3.使用V 阅读全文
posted @ 2010-04-29 10:39 gmh 阅读(681) 评论(0) 推荐(0) 编辑
摘要: 1.如果是在bootloader中打开MMU之前,程序访问设备寄存器,可以直接操作物理地址,无需虚实映射。2.wince启动后,硬件上ARM和X86体系的处理器启动了MMU,操作系统只能访问到虚拟地址,不能直接操作物理内存了。但是如果是X86的CPU,由于它的外设I/O端口和存储器空间分开编址,可以直接嵌入汇编或者使用宏read_port_xxx,write_port_xxx来读写设备寄存器的物理地址。3.wince软件结构里对应MMU的是一个名为OEMAddressTable的数据结构(源文件oeminit.asm中),其中建立了物理地址和虚拟地址的静态映射关系,也可以在其中改动系统所能识别 阅读全文
posted @ 2010-04-29 10:37 gmh 阅读(340) 评论(0) 推荐(0) 编辑
摘要: debug错误提示是 BUILD: [01:0000000169:ERRORE] NMAKE : U1073: don't know how to make 'F:\wince5project\test\WINCE500\new2440_ARMV4I\cesysgen\sdk\lib\ARMV4I\retail\Ndis.lib' BUILD: [01:0000000171:ERRORE] NMAKE.EXE -i -c BUILDMSG=Stop. NOLINK=1 NOPASS0=1 failed - rc = 2 解决办法:修改下网卡驱动的sources:TARGETLIBS= \ $ 阅读全文
posted @ 2010-04-19 16:00 gmh 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 1、Platform Builder在IDE菜单中提供了几种BuildOS命令和菜单选项,分别用于不同情况和不同阶段的操作系统创建。 Sysgen:运行Sysgen工具。一般与Copy Files to Release Directory After Build选项和Make Run_Time Image After Build配合,用于操作系统的初次创建或再次创建。在初次创建之后,如果添加或删除了新的Catalog项目,建议选择Clean Before Building选项,然后运行Sysgen再次创建。 Build and Sysgen:先运行Build命令,然后运行Sysgen工具。该命 阅读全文
posted @ 2010-04-09 16:13 gmh 阅读(543) 评论(0) 推荐(0) 编辑
摘要: 在WinCE系统中,当我们完成了相关的开发和系统定制工作以后,会编译WinCE系统,最后生成NK.bin和NK.nb0。我现在用WinCE6.0在自己的PC上面编译一次用时19分16秒(有一天无聊,就测了一下)。下面介绍一下WinCE系统的编译过程,大致分为4个阶段:编译阶段(Compile phase),系统产生阶段(Sysgen phase),文件拷贝阶段(Release copy phase)和生成映像阶段(Make Run-time image phase)。过程如图:从图中可以看出,整个编译都是通过调用Blddemo.bat来实现的,实际上也是这样,编译WinCE就是用Blddemo 阅读全文
posted @ 2010-04-09 15:45 gmh 阅读(711) 评论(0) 推荐(0) 编辑
摘要: windows mobile 编译镜像总是让人难以忍受的耗时,当然我们不能每次修改一点东西就build All一次。下面是自己工作中积累的【不同情况下使用的编译命令】来加速生成镜像的过程,不排除有错的可能,欢迎指正。对于修改,一般可以分为以下几种类型:(1)修改public下的东西(一般不会修改这里的东西)(2)修改了Cesysgen.bat或是会影响到Cesysgen.bat的环境变量,如以SYSGEN或BSP为前缀的变量。(3)修改platform\%myPlatform%下的东西其中(3)又可以分为:(4)只修改reg、bib文件(5)只修改了%myPlatform%下的源码一、 bld 阅读全文
posted @ 2010-04-07 17:39 gmh 阅读(360) 评论(0) 推荐(0) 编辑