在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中预留了这块内存。最终达到相互共享数据的目的。
如果喜欢wince eboot中的boot args与driver globals请收藏或告诉您的好朋友.
阅读(232) | 评论(0) | 转发(0) |