在EBOOT中包含的一个重要的缓冲区叫Driver Globals,它用于在设备驱动和WinCE OS之间共享数据。而在EBOOT中会用到的启动参数结构被称为Boot Args,是指用于EBOOT和WinCE OS之间共享一些参数信息。一般来说Boot Args会在EBOOT运行的时候被赋值或者更新,最常用的就是网络设备的相关信息设置,比如IP地址,MAC地址,中断等信息。

  Driver Globals包含了Boot Args,也就是说Driver Globals是一块内存缓冲区,其中里面也包含了Boot Args的内存缓冲区。这里要说明的是Driver Globals是一个可选用的功能,无非就是一块内存,在EBOOT和WinCE OS之间进行数据共享。如果你想用,你就用,不想用,也可以不用。我们在使用Driver Globals的时候,一般会在eboot.bib和config.bib文件定义一块预留的内存区域,在这两个文件中定义的这块内存区域的起始地址和大小必须一致,相信这个大家都能理解,至于类型肯定是RESERVED。这样一来,在EBOOT和WinCE运行的时候,这块共享内存就被预留出来了。当然,我们还需要在BSP中通过宏定义来定义这块内存的起始地址和大小,这样就可以在BSP中访问这块内存了。举例:

  首先在eboot.bib和config.bib都要有下面的定义:

MEMORY
;  Name   Start   Size   Type
;  ------- -------- -------- ----
  ARGS   80020800 00000800 RESERVED

  上面的描述表示Driver Globals的共享内存的起始地址是0x80020800,大小是0x800。

  然后还要在BSP中对其起始地址和大小进行宏定义,如下:

#define IMAGE_SHARE_ARGS_UA_START    0xA0020000
#define IMAGE_SHARE_ARGS_CA_START    0x80020800
#define IMAGE_SHARE_ARGS_SIZE      0x00000800

  这样,EBOOT就可以通过上面的宏定义的地址来访问共享内存了。这块共享区域是用Driver Globals结构来描述的,具体定义如下:

typedef struct _DRIVER_GLOBALS
{
  //
  // 之后,可以定义用于驱动程序和WinCE OS之间的共享信息
  //
  
  BOOT_ARGS    bootargs;
} DRIVER_GLOBALS, *PDRIVER_GLOBALS; 

  可以看出里面包含了用于描述Boot Args的BOOT_ARGS结构,当然用户也可以在结构中添加用于驱动和WinCE OS之间共享的数据类型。

  下面介绍一下Boot Args的BOOT_ARGS结构,定义如下:

#define BOOTARG_SIG 0x544F4F42 // "BOOT"
  
typedef struct BOOT_ARGS
{
  DWORD  dwSig;
  DWORD  dwLen;        // BOOT_ARGS的结构长度
  UCHAR  ucLoaderFlags;    // Boot loader设定的标志
  UCHAR  ucEshellFlags;    // EShell标志
  DWORD  dwEdbgDebugZone;   // 调试域Debug Zone的定义
  
  EDBG_ADDR EshellHostAddr;   // Host端的IP地址和EShell的UDP端口号
  EDBG_ADDR DbgHostAddr;    // IP地址和接收Debug信息的UDP端口号
  EDBG_ADDR CeshHostAddr;    // IP地址和以太网cesh的UDP端口号
  EDBG_ADDR KdbgHostAddr;    // IP地址和Kenel Debugger的UDP端口号
  
  ETH_HARDWARE_SETTINGS  Edbg; // 调试以太网卡的硬件设置信息
} BOOT_ARGS, *PBOOT_ARGS;

  其中Boot loader的设置标志定义如下:

#define  LDRFL_USE_EDBG   0x0001 // 设置尝试使用调试以太网
//如果设置了LDRFL_USE_EDBG,下面两个标志才会被看到
#define  LDRFL_ADDR_VALID 0x0002 // 当EdbgAddr有效时设置
#define  LDRFL_JUMPIMG   0x0004 // 不使用与Eshell通信

  在上面的BOOT_ARGS结构中的ETH_HARDWARE_SETTINGS结构定义如下:

typedef struct _ETH_HARDWARE_SETTINGS
{
  EDBG_ADAPTER  Adapter;       // 与Platform Builder通信的网卡
  UCHAR      ucEdbgAdapterType;  // 调试以太网卡的类型
  UCHAR      ucEdbgIRQ;      // 调试以太网卡的IRQ
  DWORD      dwEdbgBaseAddr;   // 调试以太网卡的基地址
  DWORD      dwEdbgDebugZone;   // 调试以太网卡的调试域
  
  char szPlatformString[EDBG_MAX_DEV_NAMELEN];  //一个唯一的目标板设备名
  
  UCHAR      ucCpuId;       // 处理器类型
} ETH_HARDWARE_SETTINGS, *PETH_HARDWARE_SETTINGS;

  可以看出,最终这块在EBOOT和WinCE之间的共享内存是使用Driver Globals的数据结构来描述的,并事先在eboot.bib和config.bib中预留了这块内存。最终达到相互共享数据的目的。

转载于:https://www.cnblogs.com/smart_qiang/archive/2009/02/03/1383496.html

WinCE EBOOT中的Boot Args与Driver Globals (转)相关推荐

  1. WinCE EBOOT中的BootPart分析

    应该说BootPart算是微软提供的一个用于分区的模块,可以在EBOOT中使用.不过说实话,我很少使用它,知道有些厂商的BSP里面支持这个功能,而且也算是EBOOT的一部分,所以还是介绍一下.先看一下 ...

  2. WinCE Eboot中的BLCOMMON

    作者:ARM-WinCE 在EBOOT中,从Startup.s跳转到C程序入口以后,程序就可以用C语言来编写了,这样感觉就好多了.一般C语言的入口就是一个Main函数,也可能叫其他的名字.在这个Mai ...

  3. Eboot 中给nandflash分区实现

    提到分区就不得不提到MBR,不得不提到分区表. 什么是MBR 硬盘的0柱面.0磁头.1扇区称为主引导扇区,NANDFLASH由BLOCK和Sector组成,所以NANDFLASH的第0 BLOCK,第 ...

  4. Wince6 Eboot中加入开机画面

    昨天研究了一下wince开机时加入个性化的画面,折腾了一上午,不是花屏就是CE起不来--终于搞定,分享一下经验吧... Wince加入开机画面方法一般有以下两种: 1. 在文件中下定义一个常量大数组, ...

  5. 因为BIOS中Secure boot开启导致的Nvidia驱动无法安装

    楼主安装完ubuntu系统之后, 更新了nvidia驱动,然后出现个各种驱动相关问题,包括无法双屏幕显示,wifi驱动消失,鼠标驱动没了,等等,原因是因为nvidia驱动安装不成功导致的一系列问题,然 ...

  6. python中args1是什么意思_理解Python中的*,*args

    1.*在函数调用中的作用 首先定义一个函数,并调用 deffun(a, b, c):printa, b, c fun(1,2,3) 则该函数的输出为 1 2 3 传递3个参数调用该函数,则该函数会打印 ...

  7. 解读main()方法中的String[] args

    字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段. public class Hello{public static void main(String[] args){for(i ...

  8. [转载]windows7中没用boot.ini文件而是改用BCDEDIT来配置了

    原文地址:windows7中没用boot.ini文件而是改用BCDEDIT来配置了作者:开心骝哥 本人安装的Win7,因为机上有两个系统,一个dos系统,一个win7系统,开机时总是会在系统选择的界面 ...

  9. WINCE BSP中source文件中的宏定义

    在WinCE BSP中会看到很多sources文件,一般会和源代码放在同一个目录,当然不是绝对的.这些sources文件里面就是定义了一些宏,主要用于告诉Build.exe在编译源代码的时候应该如何编 ...

最新文章

  1. VC++ 鼠标非显示区域命中测试消息WM_NCHITTEST和相关编程问题学习1
  2. 事件查看器ID 1041
  3. junit5和junit4_JUnit 5 –下一代JUnit的初步了解
  4. 推荐:26种NLP练手项目(代码+数据)
  5. C语言:斗地主发牌程序
  6. android drawable转bitmap_Android 内存泄漏优化汇总
  7. 十条有用的 Go 技术
  8. CentOS添加新角色(新增一个具有root权限的新用户)
  9. [徐培成系列实战课程]-docker篇-前序
  10. Thinkphp 5.0 仿百度糯米开发多商家电商平台
  11. html导出excel
  12. springboot 中的 文件、短信、邮件、token 工具类
  13. egret与php相连,JavaScript_Mac OS X 系统下安装和部署Egret引擎开发环境, 概述 Egret基于TypeScript开 - phpStudy...
  14. Spring实战4—面向切面编程
  15. 04 【eCharts样式定制系列】矩形树图自定义颜色
  16. 最近Oracle Cloud甲骨文上线了免费云套餐.
  17. PBR流程常用的几种贴图类型
  18. 带来高效照片扫描体验 佳能Lide400扫描仪试用
  19. BoCloud博云稳居中国容器软件市场份额TOP 5
  20. FMC子卡:4 路 SFP+万兆光纤网络 FMC 子卡

热门文章

  1. Java如何将指定字符串转化为指定日期格式
  2. php安装了openssl扩展,php如何安装openssl扩展?
  3. Unity uGui RawImage 渲染小地图
  4. 3D 机器视觉 01 - 格雷码在3D视觉中的运用和码位选择原则
  5. 【源码分析】微信小程序 - 01表单组件 - 01button - 实践
  6. 封装属性_「Python基础学习」之封装大法
  7. python量化交易策略实例_Python量化实例 – 基于股票的金融数据量化分析
  8. java swt text 回车事件,Java SWT事件
  9. 微信小程序 android内存暂用,微信小程序与手机APP占用内存 流量消耗对比介绍
  10. datetime 比较_Python 字典中key命中取值的两种方法性能比较!