WinCE EBOOT中的Boot Args与Driver Globals (转)
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 (转)相关推荐
- WinCE EBOOT中的BootPart分析
应该说BootPart算是微软提供的一个用于分区的模块,可以在EBOOT中使用.不过说实话,我很少使用它,知道有些厂商的BSP里面支持这个功能,而且也算是EBOOT的一部分,所以还是介绍一下.先看一下 ...
- WinCE Eboot中的BLCOMMON
作者:ARM-WinCE 在EBOOT中,从Startup.s跳转到C程序入口以后,程序就可以用C语言来编写了,这样感觉就好多了.一般C语言的入口就是一个Main函数,也可能叫其他的名字.在这个Mai ...
- Eboot 中给nandflash分区实现
提到分区就不得不提到MBR,不得不提到分区表. 什么是MBR 硬盘的0柱面.0磁头.1扇区称为主引导扇区,NANDFLASH由BLOCK和Sector组成,所以NANDFLASH的第0 BLOCK,第 ...
- Wince6 Eboot中加入开机画面
昨天研究了一下wince开机时加入个性化的画面,折腾了一上午,不是花屏就是CE起不来--终于搞定,分享一下经验吧... Wince加入开机画面方法一般有以下两种: 1. 在文件中下定义一个常量大数组, ...
- 因为BIOS中Secure boot开启导致的Nvidia驱动无法安装
楼主安装完ubuntu系统之后, 更新了nvidia驱动,然后出现个各种驱动相关问题,包括无法双屏幕显示,wifi驱动消失,鼠标驱动没了,等等,原因是因为nvidia驱动安装不成功导致的一系列问题,然 ...
- python中args1是什么意思_理解Python中的*,*args
1.*在函数调用中的作用 首先定义一个函数,并调用 deffun(a, b, c):printa, b, c fun(1,2,3) 则该函数的输出为 1 2 3 传递3个参数调用该函数,则该函数会打印 ...
- 解读main()方法中的String[] args
字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段. public class Hello{public static void main(String[] args){for(i ...
- [转载]windows7中没用boot.ini文件而是改用BCDEDIT来配置了
原文地址:windows7中没用boot.ini文件而是改用BCDEDIT来配置了作者:开心骝哥 本人安装的Win7,因为机上有两个系统,一个dos系统,一个win7系统,开机时总是会在系统选择的界面 ...
- WINCE BSP中source文件中的宏定义
在WinCE BSP中会看到很多sources文件,一般会和源代码放在同一个目录,当然不是绝对的.这些sources文件里面就是定义了一些宏,主要用于告诉Build.exe在编译源代码的时候应该如何编 ...
最新文章
- VC++ 鼠标非显示区域命中测试消息WM_NCHITTEST和相关编程问题学习1
- 事件查看器ID 1041
- junit5和junit4_JUnit 5 –下一代JUnit的初步了解
- 推荐:26种NLP练手项目(代码+数据)
- C语言:斗地主发牌程序
- android drawable转bitmap_Android 内存泄漏优化汇总
- 十条有用的 Go 技术
- CentOS添加新角色(新增一个具有root权限的新用户)
- [徐培成系列实战课程]-docker篇-前序
- Thinkphp 5.0 仿百度糯米开发多商家电商平台
- html导出excel
- springboot 中的 文件、短信、邮件、token 工具类
- egret与php相连,JavaScript_Mac OS X 系统下安装和部署Egret引擎开发环境, 概述
Egret基于TypeScript开 - phpStudy...
- Spring实战4—面向切面编程
- 04 【eCharts样式定制系列】矩形树图自定义颜色
- 最近Oracle Cloud甲骨文上线了免费云套餐.
- PBR流程常用的几种贴图类型
- 带来高效照片扫描体验 佳能Lide400扫描仪试用
- BoCloud博云稳居中国容器软件市场份额TOP 5
- FMC子卡:4 路 SFP+万兆光纤网络 FMC 子卡
热门文章
- Java如何将指定字符串转化为指定日期格式
- php安装了openssl扩展,php如何安装openssl扩展?
- Unity uGui RawImage 渲染小地图
- 3D 机器视觉 01 - 格雷码在3D视觉中的运用和码位选择原则
- 【源码分析】微信小程序 - 01表单组件 - 01button - 实践
- 封装属性_「Python基础学习」之封装大法
- python量化交易策略实例_Python量化实例 – 基于股票的金融数据量化分析
- java swt text 回车事件,Java SWT事件
- 微信小程序 android内存暂用,微信小程序与手机APP占用内存 流量消耗对比介绍
- datetime 比较_Python 字典中key命中取值的两种方法性能比较!