博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

      首先需要说明的是WINCE启动并不一定需要先启动MSDOS,然后再Load内核。但是在X86下先启动MSDOS会比较方便,尤其是可以利用Config.SYS和AutoExec.Bat来配置多重启动菜单,某些时候这对于开发者来说会有好处。

      X86下启动的基本模式是先用MSDOS boot系统,然后运行LoadCepc.exe Load内核,内核成功Load到内存后,LoadExec将控制权交给内核(如果使用LoadExec /v参数加载,那么可以看到Load完成后有一个跳转语句jumping to 0xnnnnnnnn)。

  LoadExec.exe可以从本地磁盘,Lan以及串口将内核文件NK.Bin加载到内存。下面我们分别来讨论三种模式及需要注意的地方。

  1.本地磁盘

  本地磁盘有多种,主要的是NAND,我使用过的是ICOP提供的DOM(电子盘),接驳在IDE接口上使用,从原理上讲使用其他IDE接口的硬盘也是可以的。但我并未去尝试,而且据说系统启动时会去检查这个设备,且有人指出,容量越大需要检查的时间也就越长。

  常用命令为loadcepc,它隐式的表示将当前目录下的nk.bin加载到内存。在多重启动配置下,如果有需要根据选项选择不同的内核文件。可以使用:Loadcepc filename.bin指令来显示的将内核文件filename.bin加载到内存。

  一个常用的参数是/v,打开此开关后,加载到内存的过程会输出到显示器,并在加载完成后显示跳转到内核执行的语句jumping to 0xnnnnnnnn。一个例子为:loadcepc /v filename.bin。

 

  2.Ethernet

  使用以太网Load Os比较适合于的PB调试阶段,而且也不用U盘搞来搞去的比较方便。使用以太网启动需要注意的几个地方是:开发机和设备之间应设置在一个网段,如192.168.1.3和192.168.1.240等,当然也可以用DHCP,但是我个人是不太喜欢的。WINCE以太网启动的原理是,先用Eboot.bin这个文件初始化设备的网卡,然后设备在局域网(网段内?)广播Bootme这个信号。开发机收到这个信号后,通过以太网向设备传输内核文件(一般为nk.bin)并直接加载到内存。传输加载完成后同本地启动一样,将控制权交给WinCE核心。相关命令行为:

  loadcepc /e:%NET_IOBASE%:%NET_IRQ%:%NET_IP% eboot.bin,其中:%NET_IOBASE%和:%NET_IRQ%可以设为0。%NET_IP%设为指定的IP,如果不设置即为DHCP。

  一个例子为:loadcepc /e:0:0:192.168.1.3  eboot.bin

  需要注意的是既然eboot.bin是用来初始化网卡的,那么不同的Device eboot.bin当然就不同。即使是一样的网卡也不一定能相互通用。一个基本的例子是,ICOP的Ebox3300和一些Vdx系列的产品都是用的同一种CPU和同一种网卡,但是它们的eboot.bin并不通用。设备专属的eboot.bin一般在BSP的安装目录中可以找到,大部分情况下是在:

   \WinCE600\Platform\xxxxx\SRC\BootLoader\Eboot\Bin这个目录下。如果不是默认位置安装,就在

   \安装位置\SRC\BootLoader\Eboot\Bin这个目录下去找。

 

  3.Serial Port

  使用串口和使用以太网没什么原理上的区别,就是内核文件(一般为nk.bin)的传输使用的是串口,串口的速率这里最多能设置为115.2kb,比以太网传慢很多,而一个内核文件一般有15-30M所以不太建议使用串口,除非设备本身不带网卡或其他内核部署手段。相关命令行为:

  loadcepc sboot.bin

  如果有多个串口,个人估计应该是第一个,另外sboot.bin似乎是通用的(未证实)。

     Note:从以太网和串口启动,内核文件直接传入到内存,是易失性的。必须将对应的内核文件nk.bin copy到启动目录下才能用loadexec.exe从本地加载该文件内核。