马宁的嵌入式开发研究

Windows Phone, XNA, Windows Embedded, Windows Mobile
posts - 81, comments - 699, trackbacks - 17, articles - 0

2009年5月9日

在MSDN Blog上申请自己的Blog有一阵子了,但是一直没空打理。前几天,张欣在MSN上问我是不是失踪了,才发现太久没有更新Blog了。下面是我在MSDN上Blog的地址。

http://blogs.msdn.com/ninma/

因为MSDN Blog属于微软的官方博客,所以内容可能会关注于我目前的工作:Windows Embedded CE。想和大家分享Windows Embedded CE中的新技术、开发技巧、使用心得。其他方面的内容,我会发表于博客园和CSDN的Blog上。

写Blog的历史,应该从2001年CSDN的网友专栏开始,到现在也有差不多8年的时间了。一直将Blog作为记录自己开发中心得的地方。因为比较专注于Windows Embedded和Windows Mobile,所以访问量也很不错,也有一定的知名度。我现在维护的Blog主要有下面几个:

CSDN Blog:http://blog.csdn.net/aawolf

博客园:http://aawolf.cnblogs.com/

嵌入式在线:http://blog.mcuol.com/aawolf/index.htm

谢谢大家的关注,我会继续努力…

posted @ 2009-05-09 18:24 马宁 阅读(765) 评论(0) 编辑

作者:马宁

原文:http://blog.mcuol.com/User/aawolf/Article/6389_1.htm

      .NET Compact Framework已经升级到3.5的版本了,.NET CF 3.5支持LINQ和WCF等新的特性。对于Windows Mobile的开发人员来说,只需要安装一个更新的CAB包就可以了。可是Windows CE的开发者如果想将.NET CF 3.5加入到OS Design,还是需要花一点功夫的。我们会使用革新2410D开发板作为我们的平台,关于该开发板的介绍和开发过程,大家可以参考我之前的文章——《革新2410D开发板试用手记》,链接如下:
http://www.cnblogs.com/aawolf/archive/2008/05/29/1209854.html
      来自Mike Hall的QFE
      这篇文章的起因是Mike Hall在自己BLOG上发表的一篇文章:
http://blogs.msdn.com/mikehall/archive/2008/03/17/net-compact-framework-3-5-component-for-windows-embedded-ce-6-0-catalog-component.aspx

      这篇文章介绍了微软在2008年一月份推出的一个QFE的包,其中包括了.NET Compact Framework 3.5的组件。所谓QFE,就是Quick Fix Engineering,用于快速修复一些BUG或者增加一些新的功能,修改比SP要小,所以可以每月推出。
好了,既然有老大级的人物给我们指明了方向,小弟们跟着干就是了,首先在微软网站上下载这个QFE包:
http://www.microsoft.com/downloads/details.aspx?FamilyID=a83124d5-7c8e-4abe-87fd-69654561be40&displaylang=en

    然后确认你的开发计算机上已经装了下面的东西:
      1. Visual Studio 2005
      2. Visual Studio 2005 SP1
      3. Visual Studio 2005 SP1 Update for Vista (if applicable)
      4. Windows Embedded CE 6.0 Platform Builder
      5. Windows Embedded CE 6.0 SP1 (required if PB 6.0 Tools have been installed)
      6. Windows Embedded CE 6.0 R2

      别紧张,基本上来说,只要你用的是Windows CE 6.0 R2,那么这些东西就都有了。

      接下来,我们确认将Visual Studio 2005关闭,然后运行QFE的安装程序就可以了。如果是在Vista下安装的话,可能会遇到安装文件出错的问题,这是由权限问题造成的。我们可以参考下面的文章解决:
http://support.microsoft.com/kb/950793/en-us
      不过我在Vista下安装时没有碰到这个问题。
      创建.NET Compact Framework 3.5的应用程序

      好了,安装完成后,我们是不是需要打开Visual Studio 2005开始我们的平台定制历程了?不,首先还是让我们先换一台机器。

      换机器干嘛?因为我们遇到了一个逻辑问题——.NET CF 3.5的应用程序在哪里?.NET CF 3.5的应用程序是由Visual Studio 2008开发的,而我们的Platform Builder 6.0是运行在Visual Studio 2005之上的。您可以将VS 2005和VS 2008装在同一台机器上,但是我没有那么做,而是换了台装有VS 2008的机器,来进行下面的应用程序开发。

      需要说明的是,按照常规,我们应该先用Platform Builder 6.0构建一个CE 6.0的平台,然后导出SDK,然后再装有VS 2008的机器上安装,安装完成后再使用VS 2008开发一个针对该CE 6.0平台的应用程序。如果真这么干,拐弯就拐到爪哇国去了。

      幸好Visual Studio 2008为我们提供了另一种方式,还是来看一下:

      打开Visual Studio 2008后,还是首先选择File – New – Project菜单项。在New Project对话框中选择Visual C#中的Smart Device,然后选择创建Smart Device Project,名字随便定。

      接下来的对话框对于经常看我文章的朋友也会很熟悉:

      只是这一次我们选择的Target platform不是Pocket PC或者Smartphone,而是Windows CE,还要记得一定要选择.NET CF 3.5。

      好了,接下来就进入了IDE的窗口设计器,看起来和普通的WinForm程序没有太多区别。我们添加了三个按钮和一个ListBox,还有两个菜单项。

在第一个Button“Message”里添加下面的事件处理函数:
    private void button1_Click(object sender, EventArgs e)
     {
        MessageBox.Show("Hello,.NET CF 3.5");
}
      我承认我没追求,所有程序不都是从Hello World开始的吗?为了要突出一下.NET Compact Framework 3.5的新特性,我们还要添加对于LINQ的支持:
    private void button2_Click(object sender, EventArgs e)
    {
        listBox1.Items.Clear();

        var numbers = new List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        var evenNumbers =
              from p in numbers
              where (p % 2) == 0
              select p;

        foreach (var number in evenNumbers)
           listBox1.Items.Add(string.Format("{0} ", number));
}
      关于LINQ我就不多作解释了,记得添加System.Linq的引用,还有:
using System.Linq;
在添加完Linq后,我们还有一个更直接的办法,就是版本号:
    private void button3_Click(object sender, EventArgs e)
    {
       MessageBox.Show(Environment.Version.ToString());
}
      System.Environment中的Version属性可以很直接的告诉我们当前运行的.NET CLR的版本号。具体细节看MSDN帮助吧。

      好了,程序编写好了,接下来就要运行它了。但是我们的Visual Studio 2008里并没有Windows CE的模拟器。没办法,只好选择Windows Mobile 6 Professional的模拟器来跑了。

        事实证明,在应用程序开发方面,Windows CE和Windows Mobile的差距的确不大。程序不但跑起来了,而且菜单还按照Windows Mobile的方式显示到了窗体下方。

         上面就是点击Version按钮后的运行结果,可以看到我们的.NET CLR是3.5的。
        创建支持.NET CF 3.5的OS Design
        OK,终于可以回到我们的Platform Builder里创建包含.NET CF 3.5的OS Design了。我们可以创建一个新的OS Design,或者利用已有的OS Design。
        具体方法请参考:
        革新2410D开发板试用手记(三)
http://www.cnblogs.com/aawolf/archive/2008/06/03/1212696.html
Windows Embedded CE 6.0开发初体验(五)构建CE平台
http://www.cnblogs.com/aawolf/archive/2008/01/15/1040306.html

        当我们打开OS Design的Catalog Item View页面。在Core OS - CEBASE – Application and Services Development下,我们可以看到.NET Compact Framework 2.0和.NET Compact Framework 3.5两个选项。选择.NET CF 3.5的选项和简体中文资源,以及OS Dependencies for .NET Compact Framework 3.5的选项。

      当然,我们也可以在OS Design的创建向导里选择.NET CF 3.5的组件。
为了验证我们的.NET CF 3.5 CLR可以良好运行,我们还需要添加一个.NET CF 3.5的应用程序。怎么添加呢?

      第一步,呃,从另外一台机器上把应用程序拷过来……
      第二步,在Solution Explorer里选择OS Design下的Parameter Files下的Project.bib文件。在《Windows Embedded CE 6.0开发初体验(六)平台定制》中我们详细讨论过bib文件,请参考:
http://www.cnblogs.com/aawolf/archive/2008/02/03/1063444.html
      第三步,将.NET CF 3.5的应用程序加入到OS Design中:

       就一句话,简单吧?然后就是OS Design的编译、下载、运行和调试了。需要说明一点的是,可能由于Debug版的NK.bin太大,我一直没有成功运行起来。不过Release版的一切正常。

       关于编译和下载的话题,可以参考下面的文章:
革新2410D开发板试用手记(六)
http://www.cnblogs.com/aawolf/archive/2008/06/24/1228752.html
Windows Embedded CE 6.0开发初体验(七) 编译和调试平台
http://we.cnblogs.com/article.aspx?id=20

       好了,最后来看一下运行结果:我们点击了Version按钮,显示当前的.NET CF CLR确实是.NET CF 3.5版本。

       最后让大家看看开发板的裸照吧(开发板本来就……)

posted @ 2009-05-09 18:07 马宁 阅读(2538) 评论(2) 编辑

作者:马宁

原文:http://tech.it168.com/a2008/1223/260/000000260962.shtml 

     现在大多数主板都支持USB启动,而U盘便于携带的特点,能够让你打造一个属于你自己的PC环境,使用自己熟悉的界面。现在U盘启动的系统已经非常时髦了,比如Ubuntu Linux。而大家有没有想过将Windows XP放到U盘里?
     Windows XP Home或Pro放在U盘里的确有点难度,但是Windows XP Embedded(也就是现在的Windows Embedded Standard)放在U盘里却不是件太难的事情,我们可以根据自己的需要定制出一个比较小的操作系统镜像(最小可以达到20M左右,一般在300M左右)。
  Windows Embedded Standard开发的文章请参考:
  http://www.cnblogs.com/aawolf/archive/2008/06/25/1229698.html
  准备启动环境
  开发工具自然就是Windows Embedded Studio,具体使用方法请参考《Windows Embedded Standard开发初体验》。除了开发工具外,我们还需要准备存储介质——U盘,从市面上随便买一个就可以,建议容量是1GB,小一点也没关系,最好是USB 2.0的,否则在拷贝文件时会比较慢。
  接下来就是U盘的准备步骤:
  1.使用usboot设置U盘的工作模式
  我们使用的usboot166是第三方工具,可以在雷志刚的博客上找到:
  http://cid-ea7144b242d01ad2.skydrive.live.com/browse.aspx/Public/%e7%ac%ac%e4%b8%89%e6%96%b9%e5%b7%a5%e5%85%b7
  将U盘插到计算机上之后,我们打开USBoot的界面,就可以看到磁盘的列表。

WindowsEmbeddedStandard的U盘启动

  第一个是计算机的硬盘,第二个才是我们要格式化的U盘,所以千万别弄错。
  选择了要格式化的U盘之后,还要选择工作模式,点击界面下方的链接处。

WindowsEmbeddedStandard的U盘启动

  我选择使用的是HDD模式,据说FDD模式也可以,没试过。有一款Thin Client竟然不支持USB-HDD模式启动,抓狂……
  接下来的工作,就是按照提示,等待U盘格式化完成,再写入引导文件。
  其实这一步主要是改变U盘的工作模式,因为我们不使用DOS启动,所以启动文件还要通过下一步来做。
  2.使用ufdprep写入启动信息
  假设Windows Embedded Standard的开发工具安装在C盘,我们可以在下面的目录中找到一个名叫UFDPrep的程序:C:\Program Files\Windows Embedded\utilities

  我们在命令行中执行这个程序:
  如果不知道该怎么使用,可以用ufdprep /?来查询参数。
  如果我们想格式化U盘,则需要使用下面的命令行:
  Ufdprep /size=1000 /ntfs /y g:
  /size,表示使用U盘上多大的空间,不能超过磁盘的最大存储空间;/ntfs,是磁盘格式;/y,表示安全提示时选择y;g:是U盘的盘符。
  可能需要等待一段时间,如果看到格式化成功的提示,则表示该操作完成。
  我们还可以使用下面命令行来验证ufdprep是否成功:
  Ufdprep /verify g:
  制作最小化系统
  接下来我们就需要将操作系统拷贝到U盘上去了。我们要做的不是DOS启动盘,所以刚才将U盘格式化为NTFS格式的了。所以接下来,我们要做一个Windows Embedded Standard的操作系统。因为不知道目标设备的驱动,所以,比较稳妥的方式就是构建一个命令行的Windows Embedded Standard平台,将一些常用工具拷贝进去,个人感觉,比DOS启动盘好用。
  构建步骤,与步骤三类似,所以详情参考“制作XPe镜像”:
  1.  打开Target Designer,创建一个新的Configuration,取名MiniOS。
  2.  在组件列表中,选择Software-> Test&Development 下的MinLogon组件,下图红圈所示位置:

WindowsEmbeddedStandard的U盘启动

  3.选择USB boot 2.0组件(见“制作XPe镜像”一节);
  4. 选择Configuration菜单中的Dependency Check,或者F5,进行依赖检查;
  5. 选择Configuration菜单中的Build Target Image,或者F7,编译操作系统。
  6.编译出来的操作系统大约20M左右,只提供命令行界面。我们将C:\Windows Embedded Images文件夹下的所有文件拷贝到U盘的根目录中。
  7. 我们在U盘的根目录中建一个Tools文件夹,将一些常用工具拷贝进去,比如:
System32目录下的Diskpart、edit等命令
  因为要收集硬件信息,所以要拷贝C:\Program Files\Windows Embedded\utilities下的TAP程序到Tools目录中。大家注意,在这里我们使用的是32位版本的TAP,而不是16位版本的TA,这也说明我们运行的环境是32位操作系统环境。
  8. 将U盘从计算机上安全删除;插到目标设备的USB端口上;
  9. 重新启动目标设备,在BIOS中选择USB-HDD启动;
  10. 进入FBA过程;
  11. FBA过程完成后,会重新启动,然后显示XP的启动画面,进入命令行界面;
  12.运行Tools目录中的TAP命令,该命令会收集硬件信息,在Tools目录下产生device.PMQ文件。

  到这一步,我们的工作就基本完成了,这个命令行的Windows Embedded Standard系统一定要好好保存。自从软盘退出历史舞台后,这是我用过的最适合随身携带的工具盘。宝贝啊。

  制作XPe镜像

  1. 导入PMQ文件
  接下来的工作就比较正常了,将U盘插回到计算机上,将U盘里的device.PMQ文件拷贝到计算机上来。如果之前你没有做完FBA的Mini操作系统,建议你也拷一份出来,毕竟20多M的小东西还是很好用的。
  我们打开Windows Embedded Studio中的Component Designer将PMQ文件转换为组件文件(.sld文件)。Target Designer会根据硬件信息组件(sld文件)判断将哪些驱动程序加入到操作系统镜像中来。
  选择Component Designer的File菜单里的Import选项,会让你打开PMQ文件,然后打开下面的对话框:

WindowsEmbeddedStandard的U盘启动

  点击Start开始导入过程,一般来说,会比较慢,需要几分钟的时间。导入完成后,会生成一个sld文件,将其保存到我们制定的目录下即可。

  2. 导入组件数据库
  接下来,我们要将生成的组件sld文件导入到组件数据库中。在这一步前,请确认所有的Target Designer和Component Designer都已经被关闭。
  然后打开Component Database Manager ,界面如下图所示:

WindowsEmbeddedStandard的U盘启动

  为了导入组件,我们点击Import按钮,打开下面的界面:

WindowsEmbeddedStandard的U盘启动

  点击SLD file文本框后的按钮,上图红圈所示,选择刚才保存的sld文件,然后点击Import按钮。Component Database Manager会提示导入是否成功。

  3.生成WES镜像
  导入sld文件成功之后,我们就可以重新打开Target Designer,来编译我们的操作系统Image文件。
  首先需要新建一个Configuration文件,进入Target Designer主界面。
  我们会看到刚才被导入的组件,会默认出现在组件列表的根目录中,我们双击,将该组件加入我们的操作系统中。
接下来,我们添加功能组件:
  1. Runtime Quick Start Helper Macro,位于Software -> Test & Development目录下

WindowsEmbeddedStandard的U盘启动

  2. USB boot 2.0组件和User Account组件,位于Embedded Enabling Features目录下,其中USB boot 2.0是为了支持USB启动的组件,而User Account组件是默认的登录用户。

WindowsEmbeddedStandard的U盘启动

  3. 设置User Account组件

WindowsEmbeddedStandard的U盘启动

  中间部分是我们已经添加到操作系统中的组件,我们打开User Account组件,选择Settings,在IDE的右侧会显示属性窗口,设置帐号的用户名和密码:

WindowsEmbeddedStandard的U盘启动

  4. 依赖检查;
  5. 编译目标操作系统。
  6. 将编译好的Image文件,拷贝到我们的U盘上。
  7.经过FBA过程后,重启动,我们就可以进入Windows Embedded Standard的界面了。

  参考资料
  http://blogs.msdn.com/ningling/archive/2007/06/20/xpe-usb-2-0.aspx
  http://lzg-ad.blog.sohu.com/77528224.html

posted @ 2009-05-09 17:37 马宁 阅读(1249) 评论(1) 编辑