WINCE软件编译支持缅语配置
A. 关于Wince中RasEntry的参数设置。
一、工具软件
要在Wince安装程序,则需要制作*.cab安装包。制作*.cab安装包,需要专门的制作工具软件,最常用的也是用得最多的是WinCE CAB Manager
二、制作及安装过程
第一步:先制作.inf文件
要制作.cab安装包,你只要写一个.inf文件,也可以用的文本编辑工具制作,还有准备好你要安装到PPC的各个文件、程序。
第二步:生成CAB包
只要在WinCE CAB Manager中打开你的INF文件,WinCE CAB Manager会根据你的这个INF文件来生成*.CAB文件。你只需要把它保存起来就行了
第四步:连接手机通过USB连接PC,运行*.ARM.CAB文件
三、制作INF文件说明
第一个字段[Version]
中Provider大家可以随便改,其他两个参数就不要去碰了。
第二个字段[CEStings]
CompanyName="www.DIYPDA.COM"
AppName="PPC"
InstallDir=\UserData\myoa
说明:
CompanyName是公司名字,可以任意修改。
AppName是应用程序名字,可以任意修改。
InstallDir是应用程序安装的Wince终端的路径,可以任意修改。
第三个字段[CEDevice]
CEDevice字段是程序所对应的设备平台,这个大家就不用去管它了。
第四个字段[SourceDisksNames]
是指定源文件程序所在的磁盘路径。
1=,"cab",,"D:\oasourcedir\programe\"
可以修改"D:\oasourcedir\programe\"来指定源文件所在路径,也就是要制作安装盘的*.exe等文件路径,其它的都不要修改了。
第五个字段[SourceDisksFiles]
就是大家要打包的源文件清单,后面的=1就表示文件的路径,也就是[SourceDisksNames]中的1。
oa.exe=1
readme.txt=1
my.jpg=1
有多少个要打包的源文件都可以把名字加上即可,格式为:文件名.文件类型 = 1
第六个字段[DefaultInstall]
CEShortcuts=CEShortcuts1,CEShortcuts2,CEShortcuts3,CEShortcuts4
CopyFiles=Files.Common
AddReg=RegData
就是安装程序到手机中时:
CopyFiles参数表示安装时如何解压拷贝文件,AddReg参数表示安装时如何修改注册表。CEShortcuts参数表示如何在Wince桌面创建快捷方式。
CopyFiles=后面跟着是字段名字,即你所要做的拷贝工作到底有哪些。AddReg=作用一样。
例如在范本中,CopyFiles=Files.Common就是告诉cabwiz.exe要做一个拷贝文件工作,
需把一些文件拷贝到安装指定目录文件夹下,要拷贝的文件在[Files.Common]字段中。
而AddReg=RegData表示安装程序还要修改注册表,修改的东西在[RegData]字段中。
第七个字段[Files.Common]
就是安装拷贝文件到手机中,目标安装时需要拷贝哪些文件,应该与[SourceDisksFiles]中的文件名字一致。
oa.exe,oa.exe,,0
readme.txt,readme.txt,,0
my.jpg,my.jpg,,0
第八个字段[Shortcuts]
关于应用程序桌面快捷方式设置:
Sample App,0,sample.exe
Sample App,0,sample.exe,%InstallDir%
字段语法说明一下,四个域,域之间用逗号隔开,前三个域的内容必须填写。
第一个域是快捷键名称,也就是在Wince桌面快捷方式名称。
第二个域中0表示是文件,其他任何非零数表示为目录,
第三个域就是快捷键的目标程序(目录),
第四个域是可选域,是安放快捷键的目录,默认目录就是[DestinationDirs]中Shortcuts = "",你可以指定其他目录,如你想在开始菜单中加入自己的快捷键的话就在这里写上storage\windows\startmenu\。
下面是范例:
移动OA,0,oa.exe,UserData\myoa
第九个字段[RegData]
就是安装程序到手机步骤中时,修改注册表。
第一个“,”之前表示注册表中的四大块的名字,直接用缩写就可以了,如范本中HKLM就代表HKEY_LOCAL_MACHINE,其他三个分别为HKCR,HKCU和HKU。
第二个“,”之前表示你要修改的键的具体路径(如果没有会自动建立),即完整的项(key)名称,
第三个“,”之前就表示你要具体修改的键(就是我们经常在修改注册表的文章中看到的Value Name),如果没有的话程序就会自动建立,
第四个“,”之前表示值类型,目前我只懂得整数是0x00010001(见补充2),字符型数据这里你就不要填了,留着个“,”就可以了。最后就是你要填入的Value。
在范例中
HKLM,SOFTWARE\Microsoft\Shell\Rai\:CallAlert,BKBitmapFile,,"\Storage\Application Data\Home\iMac\call1.jpg"
表示修改(建立)名为BKBitmapFile的键的值,它在HKLM\SOFTWARE\Microsoft\Shell\Rai\:CallAlert下,值内容为\Storage\Application Data\Home\iMac\call1.jpg,很明显,这是一个值为String类型的键。
四、如何可以得到一个INF文件范例
安装一个WinCE CAB Manager,最好安装一个中文汉化的,打开一个现在的CAB文件,从菜单中选择文件-导出-导出到INF,再选择好导出路径,完成,就可以在你指定的目录出一个当前CAB文件的INF文件,呵呵中!你可以自己好好研究一下了!
B. 如何编译wince6.0流驱动
最近开始尝试写WinCE6.0的驱动,当然从最简单的流驱动开始,选择了GPIO的驱动进行实验。本文参考了网上有很多流驱动的开发资料,但在开发的过程中也发现了一些细节问题,网络上并没有给出详细的解答,所以在这里记录下来,并对流驱动开发中的一些问题做了总结。 流驱动的开发有两种方法:添加驱动到BSP和借助驱动调试助手。 第一种,添加驱动到BSP。修改BSP,将驱动加入到BSP当中,再选择该BSP当做OS下载到目标板上。下面以6410下实现GPIO为例,说明详细的步骤: 首先,在\WINCE600\PLATFORM\SMDK6410\SRC\DRIVES目录下面创建文件夹,命名为GPIO,并在GPIO文件夹下面创建源代码文件,命名为gpio.c。同时在DRIVES目录下修改dirs文件,在dirs文件最后添加新建的目录名GPIO。在gpio.c文件中实现的流式接口函数如下(这些接口函数的参数介绍见博文最后):BOOL WINAPI DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved)DWORD GPI_Init(LPCTSTR PContext, LPCVOID lpvBuscontext)BOOL GPI_Deinit(DWORD hDeviceContext)DWORD GPI_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD shareMode)BOOL GPI_Close(DWORD hOpenContext)DWORD GPI_Read(DWORD hOpenContext, LPVOID pBuff, DWORD Count)DWORD GPI_Write(DWORD hOpenContext, LPVOID pBuff, DWORD Count)DWORD GPI_Seek(DWORD hOpenContext, long Amount, WORD Type)void GPI_PowerUp(DWORD hDeviceContext)void GPI_PowerDown(DWORD hDeviceContext)BOOL GPI_IOControl( DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwactualOut ) 其次,在GPIO文件夹下面创建gpio.def文件,定义需要输出的函数,这些函数能够被其它代码用动态加载的方法调用。具体内容如下,有的介绍里面导出的函数中还有EntryDll,其实没有必要,它是一个入口函数而已,主要导出那些会被调用的就可以了。LIBRARY GPIOEXPORTS GPI_Init GPI_Deinit GPI_Open GPI_Close GPI_Read GPI_Write GPI_Seek GPI_PowerDown GPI_PowerUpGPI_IOControl再次,在GPIO文件夹下面创建makefile文件,具体内容如下,这一步对于不同的流驱动基本不变。!INCLUDE $(_MAKEENVROOT)\makefile.def 接下来,在GPIO文件夹下面创建sources文件,具体内容如下,各个宏的意义不做详细介绍,也可以添加其他的一些宏,根据具体情况定。WINCEOEM=1TARGETNAME=GPIOTARGETTYPE=DYNLINKRELEASETYPE=PLATFORMDEFFILE=gpio.defDLLENTRY=DllEntryTARGETLIBS= \ $(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\coredll.libSOURCES=gpio.c第五步,修改注册表信息了,打开WINCE600\PLATFORM\SMDK6410\FILES\Platform.reg 文件,添加以下内容:[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\GPIO]"Prefix"="GPI""Dll"="GPIO.Dll""Index"=dword:1"Order"=dword:1这里要注意添加的时候不要添加到带有条件编译的语句当中去,否则还需要设置编译条件,比较麻烦。最后,修改Platform.bib 文件,将GPIO驱动加载到NK当中。打开WINCE600\PLATFORM\SMDK6410\FILES\Platform.bib 文件,添加以下内容,GPIO.dll $(_FLATRELEASEDIR)\GPIO.dll NK SH到这里基本上准备工作就已经完成了,接下来编译,下载到目标板上。之后可以用调试工具查看驱动是否已经成功加入到注册表中,还有驱动是否被OS成功加载了。上述正确后,就可以编写上层测试代码进行验证了。 上述的步骤基本和网络的介绍一致,在调试过程中,遇到了以下两个问题:1、驱动信息已经加入到注册表中,但是NK总是没有加载成功GPIO.dll驱动?解决:出现这种情况,有可能是一下原因造成的:(1)没有实现上面提到的全部的流驱动接口函数,只是实现了其中的一部分,只要补齐所有的驱动接口函数就可以了;(2)在修改Platform.bib文件时,在文件末尾添加的内容。应该在宏FILES前面添加内容,否则就会无法加载驱动了。也有可能是其他原因,本人暂时没有遇到。2、驱动加载后立马又被卸载?解决:本人在调试过程中,通过串口输出信息,发现驱动GPIO被加载后立马又被卸载了,并且调用了GPI_Init函数,后来发现时由GPI_Init的返回值引起的。GPI_Init函数是驱动成功加载后调用的第一个函数,设备管理器通过调用GPI_Init初始化硬件,分配自己的内存空间,并将此内存块的地址以一个DWORD值返回给上层。如果返回0,说明初始化失败,之前分配的系统资源将全部释放,也就是驱动会被卸载。在简单的输出信息的流驱动中,最好将所有的流接口都设置为返回成功。 快速编译技巧:上面的方法要求每次都重新编译内核,很耗费时间,这里收集了网络上提供的修改驱动后快速编译的方法,下面的步骤建立在已经进行过一次上面的操作了,否则必须先修改注册表和.bib文件:(1)在VS2005下Build菜单选择“Open Release Directory in Build Window”,进入到命令行模式,在命令行中进入到你的驱动目录,执行build命令就OK了。其实也可以直接在右侧“Solution Explorer”中找到你的驱动目录,右键选择Build就可以了。(2)在VS2005下Build菜单选择“Make Run-Time Image”就可以产生NK文件了。第二种,使用串口助手调试,这里给出原创的连接we-hjb的BLOG。该方法将会比第一种方法效率高,不需要每次都编译NK,然后下载镜像到目标板,但存在适用范围的问题,即该方法并不是适用于任何的驱动。驱动调试助手,是用来动态管理流驱动。本地驱动和USB驱动不再它的控制范围之内,各位在使用时注意这一点。 补充流接口函数介绍(转自网络):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);它是驱动程序的动态库被成功装载以后第一个被调用的函数。其调用时间仅次与DllEntry,而且,当一个库用来生成多于一个的驱动程序实例时仅调用一次DllEntry,而xxx_Init会被调用多次。驱动程序应当在这个函数中初始化硬件,如果初始化成功,就分配一个自已的内存空间(通常用结构体表示),将自已的状态保存起来,并且将此内存块的地址做为一个DWORD值返回给上层。设备管理器就会用在调用XXX_Open时将此句柄传回,我们就能访问自已的状态。如果初始化失败,则返回0以通知这个驱动程序没有成功加载,先前所分配的系统资源应该全部释放,此程序的生命即告终至。当这个函数成功返回,设备管理器对这个程序就不做进一步处理,除非它设置了更多的特性。至此一个各为XXX的设备就已经加载成功,当用户程序调用CreateFile来打开这个设备时,设备管理器就会调XXX_Open函数。参数:pContext:系统传入的注册表键,通过它可以讲到我们在注册表中设置的配置信息。lpvBusContext:一般不用。实际上,很多程序中将这个函数写成了DWORD XXX_Init(DWORD pContext ),我们只需要将pContext转化成LPCTSTR即可。DWORD XXX_Open(DWORD hDeviceContext,DWORD dwAccess, DWORD dwShareMode);当用户程序调用CreateFile打开这个设备时,设备管理器就会调用此驱动程序的XXX_Open函数。参数:hDeviceContext XXX_Init 返回给上层的值,也就是我们在XXX_Init中分配的用来记录驱动程序信息的那个结构体的指针,我们可以在这个函数中直接将其转化成所定义的结构,从而获取驱动程序的信息。dwAccess 上层所要求的访问方式,可以是读或者写,或者是0,即不读也不写。dwShareMode 上层程序所请求的共享模式,可以是共享读、共享写这两个值的逻辑或,或者是0,即独占式访问。系统层对设备文件的存取权限及共享方法已经做了处理,所以在驱动程序中对这两个参数一般可以不用理会。这个函数一般不用做太多处理,可以直接返回hDeviceContext表示成功,对于一个不支持多个用户的硬件,在设备已经打开后,应该总是返回0以至失败,则CreateFile调用不成功。DWORD XXX_Close( DWORD hDeviceContext); 当用户程序调用CloseHandle关闭这个设备句柄时,这个函数就会被设备管理器调用。参数:hDeviceContext 为XXX_Open返回给上层的那个值。这个函数应该做与XXX_Open相反的事情,具体包括:释放XXX_Open分配的内存,将驱动程序被打开的记数减少等。DWORD XXX_Deinit(DWORD hDeviceContext);这个函数在设备被卸载时被调用,它应该实现与XXX_Init相反的操作,主要为释放前者占用的所有系统资源。参数:hDeviceContext XXX_Init函数返回给上层的那个句柄u void XXX_PowerUp( DWORD hDeviceContext );void XXX_PowerDown(DWORD hDeviceContext );正如其名称中体现的那样,这两个函数在系统PowerUp与PowerDown时被调用,这两个函数中不能使用任何可能引起线程切换的函数,否则会引起系统死机。所以,在这两个函数中,实际上几乎是什么做不了,一般在PowerDown时做一个标志,让驱动程序知道自已曾经被Power Down过。在Power Down/On的过程中硬件可能会掉电,所以,尽管Power On以后,原来的IO操作仍然会从接着执行,但可能会失败。这时,当我们发现一次IO操作失败是因为程序曾经进入过Power Down状态,就重新初始化一次硬件,再做同样的IO操作。BOOL XXX_IOControl(DWORD hDeviceContext,DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut );几乎可以说一个驱动程序的所有功能都可以在这个函数中实现。对于一类CE自身已经支持的设备,它们已经被定义了一套IO操作定,我们只需按照各类设备已经定义的内容去实现所有的IO操作。但当我们实现一个自定义的设备时,我们就可以随心所欲定义我们自已的IO操作。参数:hDeviceContext XXX_Open返回给上层的那个句柄,即我们自已定义的,用来存放程序所有信息的一个结构。dwCode IO操作码,如果是CE已经支持的设备类,就用它已经定义好码值,否则就可以自已定义。pBufIn 传入的Buffer,每个IO操作码都会定义自已的Buffer结构dwLenIn pBufIn以字节记的大小 pBufOut,dwLenOut分别为传出的Buffer,及其以字节记的大小pdwActualOut 驱动程序实际在pBufOut中填入的数据以字节记的大小其中,前两个参数是必须的,其它的任何一个都有可能是NULL或0。所以,当给pdwActualOut赋值时应该先判断它是否为一个有效的地址。本文出自 “飞雪待剑” 博客
C. wince系统改安卓系统教程,车载wince如何升级改造
很多车友在找wince系统改安卓系统的教程,要实现这样的质变,唯有进行刷机操作。但比较现实的就是wince是比较早期的操作系统,大部分车型的硬件都比较老旧,即便刷出系统,估计也兼容不了。毕竟导航仪系统和硬件的配置是相关的,硬件不支持,安卓系统就无法运转。对于刷机而言,不同的设备型号刷机方式会有些许差异,在对应的设备论坛上一般会有相应的刷机教程。但不建议不懂车机的车友自行刷机,毕竟刷机是个蛮复杂的过程,稍有不慎会损害原有的wince系统。
车载wince如何升级改造?
如果实在想要升级成安卓系统,可以尝试更换车机导航,购买一个安卓系统的车载导航,然后到专业的修理店找师傅将原来的拆下,然后走线、接驳更换新的即可。
除此之外,也可以升级原来的wince系统上,虽然不能变成安卓,但也会有所改善,具体步骤如下:
1、首先下载一个CE桌面程序然后将其复制到U盘上;
2、打开车机上的原地图文件,找到里面的“NaviResFile”文件夹,然后将“”修改查看工具放到这个文件上,然后双击修改查看工具,打开同目录的文件,并记住上面的端口和波特率参数;
3、完事后,根据参数下载一个适合自己型号的地图软件,然后复制到U盘上;
4、将U盘插入导航仪,打开下载的地图软件,即可进行升级,如果说导航默认开启,先将其退出。
D. 如何设置WinCE仿真模拟器
一、打开WinCE模拟器
启动Visual Studio 2008
在菜单栏里:工具->连接到设备,弹出“连接到设备”这个界面,在“平台”下拉列表里面选择为“Windows CE”,之后在显示出来的列表中选择“Pocket PC 2003 SE 仿真程序”,然后点击“连接”按钮。截图如下:
连接成功后,就弹出了仿真模拟器的界面,界面完全就是一个掌上电脑,很不错哦!截图如下:
二、设置WinCE仿真模拟器的属性
如果想要上网,你一定要先装上Virtual PC 2007 setup.exe,然后再重新连接模拟器。Virtual PC直接装完就OK了,无需对其进行任何设置。
1、设置共享文件夹
单击模拟器界面中的菜单栏:文件->配置,在“仿真程序属性”界面中,“常规”选项卡里面,选择你的“共享文件夹”的目录。然后确定即可,最后要插入底座才生效哦。截图如下:
2、设置网络
再提一下,先要装Virtual PC 2007。(好啰嗦……呵呵)
进入“仿真程序属性”界面的“网络”选项卡,勾上“启用NE2000 PCMCIA网络适配器并绑定到”,下拉列表中选择“数据包计划程序微型端口”。确认即可,最后要插入底座才生效哦。当然,你还要在模拟器中设置网络连接的属性才能上网,一定要看完再操作哦!
截图如下:
3、设置串口、耳机等
进入“仿真程序属性”界面的“外围设备”选项卡,勾上相应的选项即可。截图如下:
4、插入底座,使设置生效
在VS2008的菜单栏中,工具->设备仿真器管理,右击你目前正在用的“Pocket PC 2003 SE 仿真程序”,选择“连接”,然后再次右击,选择“插入底座”,现在你的模拟器就可以使用你的电脑上的那些网络、串口、耳机等资源了。截图如下:
5、设置WinCE模拟器中的网络连接属性
在WinCE模拟器界面中,开始->设置,选择下面的“连接”选项卡,单机“网卡”,在“我的网卡连接到”选项卡中选择“默认Internet设置”,并在其下的列表中选择“NE2000兼容Ethernet驱动程序”,然后选择“使用服务器分配的IP地址”,单击右上角的OK。最后,打开模拟器里面的IE,点击一个天线状的图标,选择网卡连接到“默认Internet设置”,然后你就可以上网了。
E. Win10下开发WinCE的配置
设置目标或测试计算机是配置计算机以便进行自动驱动程序部署、测试和调试的过程。一个测试和调试环境具有两台计算机:主计算机和目标计算机。目标计算机也称为“测试计算机”。使用主机上的 Visual Studio 开发和构建驱动程序。调试程序在主机上运行并且位于 Visual Studio 用户界面中。当测试和调试驱动程序时,驱动程序在目标计算机上运行。
主计算机和目标计算机必须能够彼此按名称执行 ping 操作。如果两台计算机已加入到同一工作组或同一网络域,则此操作可能更容易。如果你的计算机位于工作组中,我们建议你使用路由器(而非集线器或交换机)连接计算机。不支持对虚拟机进行设置。
准备目标计算机以进行设置
在目标计算机上,安装将用于运行和测试驱动程序的操作系统。
如果在 x86 或 x64 目标计算机上启用“安全启动”,则禁用该功能。
如果目标计算机使用 ARM 处理器,则安装 Windows 调试策略。则无需禁用“安全启动”。
在目标计算机上,运行与目标计算机平台匹配的 WDK 测试目标安装程序 MSI。可以在 Remote 下的 Windows 驱动程序工具包 (WDK) 安装目录中找到该 MSI。
例如:C:Program Files (x86)Windows Kits10Remotex64WDK Test Target Setup x64-x64_en-us.msi
如果目标计算机运行的是 N 或 KN 版本的 Windows,则安装适用于 N 和 KN 版本的 Windows 的媒体功能包。
如果目标计算机运行的是 Windows Server,请查找刚才通过 WDK 测试目标设置 MSI 创建的 DriverTest 文件夹。(例如:c:DriverTest)。右键单击“DriverTest”文件夹,然后选择“属性”。在“安全”选项卡上,向“经过身份验证的用户”组授予“修改”权限。
验证主机和目标计算机可以彼此执行 ping 操作。打开命令提示符窗口,并输入 ping 192.186.X.X(ip_adress)。
如果主计算机和目标计算机已加入到一个工作组,但它们位于不同的子网上,你可能必须调整某些防火墙设置,以便主计算机和目标计算机可以通信。请按照下列步骤进行操作:
两种方法(选一即可):
方法一:
在目标计算机上的“控制面板”中,转到“网络和 Internet”>“网络共享中心”。注意你的活动网络。它可能是“公共网络”、“私有网络”或“域”。
在目标计算机上的“控制面板”中,转到“系统和安全”>“Windows 防火墙”>“高级设置”>“入站规则”。
在入站规则列表中,查找用于活动网络的所有网络发现规则。(例如,查找所有“配置文件”为“专用”的网络发现规则。)双击每个规则,然后打开“作用域”选项卡。在“远程 IP 地址”下,选择“任何 IP 地址”。
在入站规则列表中,查找用于活动网络的所有“文件和打印机共享”规则。对于每个规则,双击该规则,将打开“作用域”选项卡。在“远程 IP 地址”下,选择“任何 IP 地址”。
方法二:
“控制面板”->“系统和安全”->“Windows防火墙”->"启动或关闭Windows防火墙"->"关闭Windows防火墙"
设置目标计算机
现在,你可以随时在 Visual Studio 中通过主计算机设置目标计算机。
在主计算机上,在 Visual Studio 的“Driver”菜单中,选择“Test”>“Configure Deivce”。
单击“Add New Device”。
在“Network host name”中输入目标计算机的名称。选择“Provision Device and choose debugger setting”。
选择某种调试连接类型,并输入所需的参数。
设置过程将需要几分钟时间,并且可能会自动重新启动目标计算机一到两次。设置完成后,单击“完成”。
WDK 10 与 Microsoft Visual Studio 完全集成。你可以使用 Visual Studio 开发环境生成驱动程序,也可以使用 Microsoft Build Engine (MSBuild) 直接从命令行生成驱动程序。
从 Windows 驱动程序工具包 (WDK) 8 开始,MSBuild 就已经取代了在早期版本的 WDK 中使用的 Windows 构建实用工具 (Build.exe)。现在,WDK 可使用与你用于构建 Visual Studio 项目相同的编译器和构建工具。使用早期版本的 WDK 构建的驱动程序项目必须进行转换才能在 Visual Studio 环境中工作。你可以从命令行运行转换实用工具,也可以通过从现有的源创建新的 Visual Studio 项目来转换现有驱动程序。
构建驱动程序主要有以下两种方式(选一即可)
方法一:使用 Visual Studio 构建驱动程序
构建驱动程序的方法与在 Visual Studio 中构建任何项目或解决方案的方法相同。当使用 Windows 驱动程序模板创建新的驱动程序项目时,该模板定义默认(活动)的项目配置以及默认(活动)的解决方案生成配置。
注意你可以将使用 WDK 8 或 Windows 驱动程序工具包 (WDK) 8.1 所创建的项目和解决方案转换为适用于 Windows 驱动程序工具包 (WDK) 10 和 Visual Studio 2015。打开项目或解决方案前,请先运行 ProjectUpgradeTool。ProjectUpgradeTool 将转换项目和解决方案,以便可以使用 WDK 10 构建它们。
1、确保安装在你的计算机上的 SDK 和 WDK 的版本相同。
2、在 Visual Studio 中打开驱动程序项目或解决方案。
3、在“解决方案资源管理器”中右键单击解决方案,并选择“配置管理器”。
4、从“配置管理器”中,选择与你感兴趣的构建类型相对应的活动解决方案配置(例如,“调试”或“发布”)以及活动解决方案平台(例如,“Win32”)。
5、选择要构建驱动程序的目标操作系统。导航到“驱动程序”>“常规”中的项目属性,然后设置 TargetVersion 属性。
6、为驱动程序或驱动程序包配置项目属性。 可以为部署、驱动程序签署或其他任务设置属性。
7、从“构建”菜单中,单击“构建解决方案” (Ctrl+Shift+B)。
方法二:
使用命令行构建驱动程序 (MSBuild)
你可以使用“Visual Studio 命令提示符”窗口和 Microsoft Build Engine (MSBuild) 来从命令行构建驱动程序。
使用“Visual Studio 命令提示符”窗口构建驱动程序
打开“适用于 VS2015 的开发人员命令提示符”窗口。
在此窗口中,你可以借助 MSBuild.exe,通过指定项目 (.VcxProj) 或解决方案 (.Sln) 文件来构建任何 Visual Studio 项目。
导航到项目目录并为你的目标输入 MSbuild 命令。
例如,若要使用默认的平台和配置生成名为 MyDriver.vcxproj 的全新的 Visual Studio 驱动程序项目,请导航到项目目录并输入以下 MSBuild 命令:
msbuild /t:clean /t:build .MyDriver.vcxproj
语法 - 若要指定特定的配置和平台,请使用以下命令语法:
msbuild /t:clean /t:build ProjectFile /p:Configuration=<Debug|Release> /p:Platform=architecture /p:TargetPlatformVersion=a.b.c.d /p:TargetVersion=OS
例如,以下命令将为“调试”配置、“Win32”平台和 Windows 10 生成一个通用 Windows 驱动程序。
msbuild /t:clean /t:build .MyDriver.vcxproj /p:Configuration="Debug" /p:Platform=Win32 /p:TargetVersion=”Windows10” /p:TargetPlatformVersion=”10.0.10010.0”
“TargetPlatformVersion”设置为可选项,并且允许你指定用于生成的工具包版本。默认值为使用最新的工具包。
使用 Visual Studio 中的选项增加构建输出详细信息的步骤
1、单击 Tools > Options。
2、单击“项目和解决方案”文件夹并单击“生成并运行”。
3、更改“MSBuild 项目构建输出详细信息”和“MSBuild 项目构建日志文件详细信息”。 默认情况下,这些都设置为“最少”。
F. VS2008 开发wince软件
如果你安装的是vs2008完整版的话,不需要另装软件,
但需要做一些配置,具体步骤如下:
(1) 确认PC同步已经建立并连接正常(ActiveSync已连接)
(2) 点 VS2008 菜单“工具”->“选项” ,出现“选项”窗口,
在左侧一栏中选择“设备工具”->“设备” ,
在右侧中的各个下拉列表选择”Windows CE“
点“属性”按钮,出现“Windows CE 设备 属性窗口” ,
在引导程序中选择"ActiveSync启动提供程序"
点“配置”按钮,出现“配置 TCP/IP传输”窗口,选择默认配置,点击"确定"返回
(3) 点 VS2008 菜单“工具”->“连接到设备” ,出现“连接到设备”设置窗口,选择平台为"Windows CE",选择设备为”Windows CE 设备“
点“连接”按钮,此时VS2008 开始和开发板进行连接握手:
稍等一会,出现连接成功的提示,点“关闭”按钮返回 VS2008工作主界面:
(4) 接上面的步骤,点菜单“调试”->“启动调试”或者直接按 F5 键开始调试过程。
出现“部署 my2440”窗口,选择“Windows CE设备” ,并点“部署”按钮开始部
署
(5) 如果程序没有问题,则下载成功
G. 构建WinCE开发环境时,安装Windows Embedded CE 6.0,Microsoft Device Emulator 2.0的作用
按照我所说的步骤进行,得到下图:(在我的贴吧里有(wince吧))
一.定制wince6.0操作系统
1.在VS2005里新建项目中时,选择创建PlatformbuilderforCE6.0的OSDesign,新项目可以自命名,这里命名为“zhenxing”。
2.创建zhenxing的向导中,BSP一定要选择“DeviceEmulator:ARMV4I”,下一步;
3.模板(DesignTemplates)选择“PDADevice”,下一步;
4.选择“MobileHandheld”,下一步;
5.应用程序(Application&Media)就随自己的需要选择,下一步;
6.网络和通信(Networking&Communications)在此只选择“LocalAreaNetwork(LAN)”,下一步;
7.选择完成;
8.选择Acknowledge;
到此工程建完;
二.添加组件(可以根据需要添加,这里主要添加汉字相关的组件)
(1)添加汉字字库(这里要记得加入,很多人这里没有加入,就出现汉字只看到方框的现象):
1.在CatalogView添加“CoreOS”-->“CEBASE”-->“International”-->“LocaleSpecificsupport”-->“Chinese(Simplified)”-->“Fonts”-->“SimSun&NSimSum(choose1)”-->“SimSun&NSimSun”或者“SimSum&NSimSun(Subset2_50)”;
2.在CatalogView添加“CoreOS”-->“CEBASE”-->“International”-->“LocaleSpecificsupport”-->“Chinese(Simplified)”-->“GB18030DataConverter”和“”;
(2)添加中文输入法:
在CatalogView添加“CoreOS”-->“CEBASE”-->“International”-->“LocaleSpecificsupport”-->“Chinese(Simplified)”-->“InputMethodEditor”-->“MSPY3.0forWindowsEmbeddedCE”;
(3)VS2005中菜单“项目”-->“zhenxing(项目名)属性”,配置选择“所有配置”,配置属性-->“BuildOptions”,在“BuildOptions”中去掉“EnableKITL(noIMGNOKITL=1)”(这里如果加入了KITL功能的话,可能在模拟器运行的时候,会一直是黑屏的);
(4)“Locale”中,Locales先ClearAll,然后选择“中文(中国)”,Defaultlocal选择“中文(中国)”;
(5)运行VS2005菜单“生成”-->“生成zhenxing”;
(安装R3后,发现简单的deviceemuloter的工程都编译不过去了,
提示don'tknowhowtomakeatlsd.lib错误,
后来发现在catalogview中吧ActiveTemlateLibrary选择上就可以了。
还有一个疑问就是如果我不需要ATL,也需要把这个选择吗
)
三.构建SDK:
1.运行VS2005菜单“项目”-->“AddNewSDK…”,在SDK属性页中填写必要的信息,属性“Emulation”中Configuration选择Debug,可以设置模拟器的显示屏大小及色深,还有内存大小,在此设置为240x320,16色深,128M内存,然后“应用”,“确定”。。
2.然后运行VS2005菜单“生成”-->“BuildAllSDK…”,顺利的话,就会在%WINCEROOTOSDesigns\下会有zhenxing.msi;
四.配置VS2005:
1、先安装生成好的zhenxing.msi。运行VisualStudio2005,选择菜单“工具->选项”,打开选项设置对话框,从左边的树型列表中选择“设备工具->设备”,右边的下拉列表框拉到底可以看到“zhenxing”,这就是刚刚生成的那个模拟器。下面的设备列表里有两项,双击zhenxing,设定传输为DMA传输,再点击“仿真器选项”,在“显示”选项卡里设定好模拟器屏幕尺寸,颜色深度等,全部保存。
2、用VS2005新建一个智能设备项目,向导选择平台时,先删除PocketPC2003,选择zhenxing,完成。然后按F5运行程序,顺利的话定制的模拟器就会出来了(不过这个过程比较慢,需要等待一段时间)。