Chinaunix首页 | 论坛 | 博客
  • 博客访问: 317141
  • 博文数量: 720
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 8080
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-17 23:09
文章分类

全部博文(720)

文章存档

2010年(720)

我的朋友

分类:

2010-10-21 02:21:18

  在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) |
给主人留下些什么吧!~~