WinCE小结
第一章:开发环境搭建
软件列表:详细说明
1、系统定制和编译:Platform Builder 5.0 (依赖于Net Framework1.1)
2、应用程序编写:早期的用Embedded Visual C++ 4.0 (依赖于ActiveSync) ,现在一般都用:Visual Studio 2005 (依赖于ActiveSync和Net framework2.0)
3、开发环境和库文件:SDK (依赖于应用程序安装,VS2005或EVC4)
软件安装顺序:NetFramework1.1―> PB5―>ActiveSync―> EVC4或(NetFramework2.0+VS2005+MSDN)―> SDK
开发过程中会经常用到PB(Platform builder的简称)的帮助文档,里面有开发过程中遇到的各种问题的指导。顺便介绍个网站:http://msdn.itellyou.cn/
第二章:CE构架
1、开发流程
启动部分:设计硬件(带有MMU的CPU才能跑Wince),建立Bootloader,建立OAL,建立BSP
平台部分:开发驱动并测试,启动最小内核并测试,自定义组件并测试
应用部分:设计,测试,调整相应系统功能
2、系统组成
硬件层:由硬件工程师设计与软件控制配合调试来作相应修改,比如设置上拉下拉稳压之类。遇到相应模块要看相应原理比如RAM,Nand,DM9000……
OEM层:这一层改动最多,Bootloader负责加载引导系统,会初始化最小硬件系统包括CPU、RAM、FLASH、USB、UART、LCD等。
配置文件(configuration file)分别有:BIB(系统文件打包生成)、REG(系统配置参数)、DIRS(编译目录)、SOURCE(编译生成)、
DAT(文件系统构建)、DB(数据库相关)、CEC(组件管理)、Makefile(指导编译)。
Drivers就是整个系统中的各类驱动程序开发了,比如IIC、KEY、BAT、UART、WIFI、USB、SD、TOUCH、WAV、DISPLAY等等。
OAL层就是要完成向上的微软接口,比如Bootloader里面OEMPlatformInit、OEMPreDownload等接口,CE里面的驱动大部分都是分层设计,
有MDD和PDD层之分,可能还会细分到更多的层,PDD层是平台相关的,跟实际应用的硬件有很大的关系,也是我们改动最多的,MDD层一般是通用的。
OEM层的代码一般都会在BSP里面。
Kernel层:组件的添加和裁减或者修改替换内核组件,跟内核相关的代码一般都会放在PUBLIC或者PRIVATE目录下,这两个目录一般都不怎么改。
APP层:通过VS2005等工具,装上SDK后进行的程序开发,接口都是微软标准的,与桌面PC开发有别的是PC上面的接口有很多在CE里面是没有的,或者参数会作改动。
3、源代码组成
WIN500目录结构
目录 |
内容说明 |
CRC |
存放Platfrom Builder5.0安装时候用到的校验文件CRC.INI |
PBWorkspaces |
_PLATFORMROOT环境变量标识,存放工程文件和编译生成文件 |
OTHERS |
包含WINCE中一些模块和二进制库文件和代码。如果在OS Design中选择某些组件,那么这些二进制代码就会被包含到最终的操作系统映像中。 |
PLATFORM |
存放了和硬件平台相关的BSP和驱动代码和文件 |
PRIVATE |
_PRIVATEROOT环境变量标识,存放WINCE操作系统私有源代码。WINCE核心模块代码都放在此目录下。 |
PUBLIC |
包含硬件无关的Windows CE相关文件目录 |
SDK |
存放构建系统用到的编译器与其他一些辅助工具,在构建系统用_SDKROOT环境变量标识。在/SDK/BIN/I386下存放构建系统可能用到的工具。 而4个子目录ARM,MIPS,SH和X86分别针对WINCE所支持的4个平台的C/C++语言与汇编语言的编译器。 |
第三章:建立PB工程
1、参考第一章建立开发环境
2、获取芯片厂商BSP
下载得到BSP后,把它放在C:\WINCE500\PLATFORM目录下
3、克隆并建立工程文件
4、添加组件配置编译
第四章:系统烧写
2416支持SD卡启动烧写,通过PC把启动引导文件烧写到SD卡,用于引导2416启动,2416支持SD、Nand启动方式,通过设置cpu的M0~M4位进行选择。
烧写的文件一共有三个
STEPLDR.nb0:用于初始化完CPU、RAM和Nand后把Eboot.bin拷贝到内存中运行。
因为2416支持自动拷贝Nand的前8k的内容到内部RAM中运行,所以STEPLDR.nb0不能太大。
Eboot.bin:用于初始化CPU、RAM、Nand、USB、UART、LCD……然后对系统进行上传下载交互操作和启动引导系统。
NK.bin:传说中的系统。
烧写的工具:USB和串口、DNW.exe下载软件和USB下载驱动
第五章:系统启动流程
Boot Loader and Kernel Startup Sequence
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WINCE.v50.en/dnce50/html/ce50prev.htm
第六章:驱动开发流程
开发驱动的几个要素
1、了解硬件:硬件规范,硬件操作原理、流程,时序。
2、驱动工作机制:如何加载和卸载,如何初始化,如何访问外设IO,如何处理中断,如何处理DMA,如何使用内存及如何进行异步操作……
3、驱动模型:驱动的分层设计,接口,及数据结构。
CE下驱动是一个DLL文件,DLL无法单独被加载运行,要有一个EXE进程来加载DLL才可以运行。有3个系统进程会加载执行驱动程序DLL,是:Device.exe(流驱动)、GWES.exe(本地驱动)、FileSys.exe(文件系统驱动)。
分层驱动与单体驱动:分层规范化,易于移植维护;单体效率高。分层只是源代码逻辑上,在二进制代码中不存在分层结构。
分层驱动:上层叫模型设备驱动(Model Device Driver 简称:MDD),类型通用代码。下层叫平台相关驱动(Platform Dependence Driver简称:PDD),特定平台硬件支持代码。
分层驱动一般只改PDD层就可以了。分层后,系统和MDD间也有一个接口协议(DDI),MDD和PDD间需要一个接口协议(DDSI)。
MDD层特性:
包含通用代码;
调用PDD层访问硬件设备;
定义PDD层必须实现的DDSI函数;
实现系统DDI函数供系统交互;
中断处理;
生成的Lib库可与不同PDD库链接;
中断处理 IST通常位与这一层;
PDD层特性:
包含硬件相关代码;
对于不同硬件标准,有不同实现;
与某一层MDD协同合作;
实现DDSI函数;
简单的流驱动开发流程请看链接:MyGPIO驱动开发
WinCE小结的更多相关文章
- WINCE下进程间通信(一)
WINCE下进程间通信(一) 在WINCE开发中经常需要在不同的进程之间传递.共享数据,总结了一下,WINCE下进程间通信常用的方式有:Windows消息,共享内存,socket通信,管道,全局原子, ...
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- iOS--->微信支付小结
iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...
- iOS 之UITextFiled/UITextView小结
一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- scikit-learn随机森林调参小结
在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
随机推荐
- Qt中2D绘图问题总结(一)----------基本的绘制与填充
刚刚开始学习Qt不久,才开始渐渐地熟悉基础内容,学习过程中的一些知识的总结和感悟希望通过博客记录下来,与大家分享学习的同时,也是对自己坚持下去的鞭策,废话不多说了,开始第一次的小总结吧. Qt提供了强 ...
- linux下如何使用sftp命令
sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性.下边就简单介绍一下如何远程连接主机,进行文件的上传和下载,以及一些相关操作. 举例,如远程主机的 IP ...
- 如何用vs2010打开vs2013的项目?
众所周知,用vs2013打开vs2010十分简单,无须做什么. 从VS2010开始,不再制作专有的文件格式,这只是一个xml格式的文本文件,其中决定了解决方案的平台工具集和VS版本. 既然.sln只是 ...
- ARMLinux下Alignment trap的一些测试 【转自 李迟的专栏 CSDN http://blog.csdn.net/subfate/article/details/7847356
项目中有时会遇到字节对齐的问题,英文为“Alignment trap”,如果直译,意思为“对齐陷阱”,不过这个说法不太好理解,还是直接用英文来表达. ARM平台下一般是4字节对齐,可以参考文后的给出的 ...
- MVC与webservice上传文件(图片和视频),希望帮且到一些朋友
最近做一个项目,要把图片和视频传到服务器上(网站与图片服务器分开),在网上找了好久,没找到完整的资料. 自己也折腾了半天,才把完整的代码实现完.可能好多朋友都有实现过,没分享代码吧,写得不好希望不要见 ...
- 如何快速在当前目录打开cmd命令提示符
对于稍微熟悉电脑一些的朋友来说.cmd绝对是个很方便的东西.但是每次使用cmd都要cd半天才能到当前目录.怎么快速打开当前目录呢? 当前目录按住shift再右键.然后会看到右键菜单里有一个" ...
- php正则,删除字符串中的中英文标点符号
原理很简单,正则查找字符串,然后替换 英文标点符号,正则中有专用的模式来匹配.中文则需要一一列举 代码: <?php $str = "!@#$%^&*(中'文::﹑•中'文中' ...
- Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path 解决办法
返回数据解析错误 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT ...
- php 使用 curl 发送 post 数据
作为第三方开发商,经常会需要调用平台接口,远程调用,就要用到curl,其实质就是叫调用的方法与用到的参数以http post的方式发送至平台服务器. 简单的例子: $url = 'http://'; ...
- Excel 导入 Sql Server出错——“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”错误的解决
有人说应该先转成Access, 再转到Sql Server. 其实用处并不大, 要截断的还是被截断了. 原因是,SQL Server的导入导出为了确定数据表的字段类型,取excel文件的前8行来判别. ...