如何制作支持VMWare的Windows CE BSP

本文详细介绍了如何创建一个支持VMWare的Windows CE板级支持包(BSP),特别是针对VMWare特有的硬件如AMD AM79C970A网卡和USB 1.1 UHCI控制器的驱动支持。通过修改Platform Builder中的CEPC BSP,并调整驱动以适应VMWare的初始化设置,实现了在VMWare环境中运行Windows CE并支持USB和网络设备。
摘要由CSDN通过智能技术生成

不知道有没有人试过在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_MACHINE Comm PCNTN4M]
    
" DisplayName " = " PCNTN4M Compatible Ethernet Driver "
    
" Group " = " NDIS "
    
" ImagePath " = " pcntn4m.dll "

[HKEY_LOCAL_MACHINE
Comm PCNTN4M Linkage]
    
" Route " = multi_sz: " PCNTN4M1 "

[HKEY_LOCAL_MACHINE
Comm PCNTN4M1]
    
" DisplayName " = " PCNTN4M Compatible Ethernet Driver "
    
" Group " = " NDIS "
    
" ImagePath " = " pcntn4m.dll "


[HKEY_LOCAL_MACHINE
Comm PCNTN4M1 Parms]
;      " BusNumber " = dword: 0
;      " BusType " = dword: 05
;      " Interrupt " = dword: 05
;      " IOAddress " = dword: 0300


[HKEY_LOCAL_MACHINE
Comm Tcpip Linkage] 
      
" Bind " = multi_sz: " ppp " , " PCNTN4M1 "

    
;  Registry values  for  the pcntn4m1 driver
[HKEY_LOCAL_MACHINE
Comm PCNTN4M1 Parms TcpIp]
    
;  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_MACHINE
Drivers BuiltIn PCI
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值