如何制作支持VMWare的Windows CE BSP

不知道有没有人试过在VMWare中跑过Windows CE。可能有人会问:在VMWare中跑Windows CE有什么意义?Windows CE不是有基于Vritual PC的emulator吗?要做干吗不做一个基于Microsoft自己的Virtual PC的?­

简单的答案是,VMWare支持一些Virtual PC(包括Windows CE emulator)不支持的硬件。对我来说,最吸引我的是VMWare支持USB设备。另外根据我的经验VMWare的性能比Virtual PC强。­

本文介绍如何针对VMWare支持的硬件,做一个相应的Windows CE BSP。根据VMWare虚拟机的spec,我打算支持的硬件列表如下(SCSI设备、软驱这些用的比较少就算了):­

­

Graphics­

­

??VGA and SVGA support­

­

IDE Drives­

­

??IDE virtual disks up to 950 GB­

­

??Serial (COM) Ports­

­

??Up to four serial (COM) ports­

­

USB ports­

­

??Two-port USB 1.1 UHCI controller­

­

Keyboard­

­

??104-key Windows 95/98 enhanced­

­

Mouse and Drawing Tablets­

­

??PS/2 mouse­

­

Ethernet Card­

­

??AMD PCnet-PCI II compatible­

­

Sound­

­

??Emulates Creative Labs Sound Blaster AudioPCI (MIDI input, game controllers and joysticks are not supported, except for USB devices)­

­

­

­

­

其实从根本上来说,给VMWare用的Windows CE跟普通PC或者Virtual PC的并无多大区别。因此基本做法和一些概念都可以看MSDN里对CEPC的相关介绍。这里只重点介绍一些针对VMWare的不同地方。­

给Windows CE用的VMWare虚拟机可以用DOS的。BSP可以直接copy一份Platform Builder带的CEPC BSP做为起始的BSP,然后在此基础上修改。从IDE硬盘、声卡、显卡、键盘鼠标的支持比较简单,用Platform Builder中现成的driver就行了。­

图片 ­

­

比较麻烦的是网卡和USB host controller。­

VMWare虚拟的网卡兼容AMD PCnet-PCI II,具体型号是AMD AM79C970A,这个在Windows CE下可实在不好找,自己写一个就太麻烦了。不过在google大法的强力帮助下,我花了很长时间终于找到一个编译好的driver-还是for Windows CE 2.0的(现在想不起来在哪儿找到的了,想要的直接找我吧)。相关注册表设置见附录。­

比较头疼的是USB host driver。VMWare中支持的USB host controller是USB 1.1 UHCI controller。Windows CE下有现成的driver,但是直接拿来用的话你会发现不能工作。一番研究后发现问题出在LEGACY SUPPORT REGISTER (LEGSUP)的设置上-VMWare在初始化UHCI controller的时候enable了SMI generation,而且没有把USB中断route到PIRQD上。简单说来就是VMWare对UHCI controller的初始化和Windows CE自带driver要求的不一样(其实是和UHCI spec 定义的不一致,UHCI spec定义LEGSUP寄存器默认值是2000h(见5.2.1节),VMWare中是3Bh)。为了能让UHCI controller工作,需要修改UHCI driver的初始化例程,重新编译一个版本。具体修改见附录。 ­

这样,一个支持声卡、网卡、USB设备的VMWare BSP就基本搞定了。 ­

附上两张运行时的截图:­

图片 ­

­

图片 ­

附1,网卡的注册表设置,放在platform.reg里:­

[HKEY_LOCAL_MACHINECommPCNTN4M]­

    "DisplayName"="PCNTN4M Compatible Ethernet Driver"­

    "Group"="NDIS"­

    "ImagePath"="pcntn4m.dll"­

­

[HKEY_LOCAL_MACHINECommPCNTN4MLinkage]­

    "Route"=multi_sz:"PCNTN4M1"­

­

[HKEY_LOCAL_MACHINECommPCNTN4M1]­

    "DisplayName"="PCNTN4M Compatible Ethernet Driver"­

    "Group"="NDIS"­

    "ImagePath"="pcntn4m.dll"­

­

­

[HKEY_LOCAL_MACHINECommPCNTN4M1Parms]­

;    "BusNumber"=dword:0­

;    "BusType"=dword:05­

;    "Interrupt"=dword:05­

;    "IOAddress"=dword:0300­

­

­

[HKEY_LOCAL_MACHINECommTcpipLinkage] ­

      "Bind"=multi_sz:"ppp","PCNTN4M1"­

­

    ; Registry values for the pcntn4m1 driver­

[HKEY_LOCAL_MACHINECommPCNTN4M1ParmsTcpIp]­

    ; This enable the DHCP. In Win CE 2.1 Preview version statically allocated IP address ­

       ; does not work. So we use the DHCP server to allocate the IP address. ­

    "EnableDHCP"=dword:1­

    ; This should be MULTI_SZ­

    "DefaultGateway"=""­

    ; This should be SZ... If null it means use LAN, else WAN and Interface.­

    "LLInterface"=""­

    ; Use zero for broadcast address? (or 255.255.255.255)­

    "UseZeroBroadcast"=dword:0­

    ; Thus should be MULTI_SZ, the IP address list­

    "IpAddress"="0.0.0.0"­

    ; This should be MULTI_SZ, the subnet masks for the above IP addresses­

    "Subnetmask"="0.0.0.0"­

­

; Template the PCI bus driver uses to match a AM79C970 PC-net card­

[HKEY_LOCAL_MACHINEDriversBuiltInPCITemplatePCNTN4M]­

   "Dll"="NDIS.dll"­

   "Class"=dword:02­

   "SubClass"=dword:00­

   "ProgIF"=dword:0­

   "VendorID"=multi_sz:"1022"­

   "DeviceID"=multi_sz:"2000"­

;  "Entry"="NdisPCIBusDeviceInit"­

   "Prefix"="NDS"­

   "Transceiver"=dword:3­

   "IsrDll"="giisr.dll"­

   "IsrHandler"="ISRHandler"­

   "PortIsIO"=dword:1­

   "PortOffset"=dword:C        ; TBD­

   "PortSize"=dword:2­

   "PortMask"=dword:5F00    ; TBD­

­

[HKEY_LOCAL_MACHINECommConnectionSharing]­

   "PrivateInterface"="PCI/PCNTN4M"­

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值