<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > WinCE EBOOT中的Boot Args與Driver Globals

WinCE EBOOT中的Boot Args與Driver Globals

作者: 時(shí)間:2011-02-24 來(lái)源:網(wǎng)絡(luò ) 收藏

在EBOOT中包含的一個(gè)重要的緩沖區叫Driver Globals,它用于在設備驅動(dòng)和WinCE OS之間共享數據。而在EBOOT中會(huì )用到的啟動(dòng)參數結構被稱(chēng)為Boot Args,是指用于EBOOT和WinCE OS之間共享一些參數信息。一般來(lái)說(shuō)Boot Args會(huì )在EBOOT運行的時(shí)候被賦值或者更新,最常用的就是網(wǎng)絡(luò )設備的相關(guān)信息設置,比如IP地址,MAC地址,中斷等信息。


Driver Globals包含了Boot Args,也就是說(shuō)Driver Globals是一塊內存緩沖區,其中里面也包含了Boot Args的內存緩沖區。這里要說(shuō)明的是Driver Globals是一個(gè)可選用的功能,無(wú)非就是一塊內存,在EBOOT和WinCE OS之間進(jìn)行數據共享。如果你想用,你就用,不想用,也可以不用。我們在使用Driver Globals的時(shí)候,一般會(huì )在eboot.bib和config.bib文件定義一塊預留的內存區域,在這兩個(gè)文件中定義的這塊內存區域的起始地址和大小必須一致,相信這個(gè)大家都能理解,至于類(lèi)型肯定是RESERVED。這樣一來(lái),在EBOOT和WinCE運行的時(shí)候,這塊共享內存就被預留出來(lái)了。當然,我們還需要在BSP中通過(guò)宏定義來(lái)定義這塊內存的起始地址和大小,這樣就可以在BSP中訪(fǎng)問(wèn)這塊內存了。舉例:


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


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


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


然后還要在BSP中對其起始地址和大小進(jìn)行宏定義,如下:


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


這樣,EBOOT就可以通過(guò)上面的宏定義的地址來(lái)訪(fǎng)問(wèn)共享內存了。這塊共享區域是用Driver Globals結構來(lái)描述的,具體定義如下:


typedef struct _DRIVER_GLOBALS
{
//
// 之后,可以定義用于驅動(dòng)程序和WinCE OS之間的共享信息
//


BOOT_ARGS bootargs;
} DRIVER_GLOBALS, *PDRIVER_GLOBALS;


可以看出里面包含了用于描述Boot Args的BOOT_ARGS結構,當然用戶(hù)也可以在結構中添加用于驅動(dòng)和WinCE OS之間共享的數據類(lèi)型。


下面介紹一下Boot Args的BOOT_ARGS結構,定義如下:



#define BOOTARG_SIG 0x544F4F42 // "BOOT"


typedef struct BOOT_ARGS
{
DWORD dwSig;
DWORD dwLen; // BOOT_ARGS的結構長(cháng)度
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地址和以太網(wǎng)cesh的UDP端口號
EDBG_ADDR KdbgHostAddr; // IP地址和Kenel Debugger的UDP端口號


ETH_HARDWARE_SETTINGS Edbg; // 調試以太網(wǎng)卡的硬件設置信息
} BOOT_ARGS, *PBOOT_ARGS;


其中Boot loader的設置標志定義如下:



#define LDRFL_USE_EDBG 0x0001 // 設置嘗試使用調試以太網(wǎng)
//如果設置了LDRFL_USE_EDBG,下面兩個(gè)標志才會(huì )被看到
#define LDRFL_ADDR_VALID 0x0002 // 當EdbgAddr有效時(shí)設置
#define LDRFL_JUMPIMG 0x0004 // 不使用與Eshell通信



在上面的BOOT_ARGS結構中的ETH_HARDWARE_SETTINGS結構定義如下:



typedef struct _ETH_HARDWARE_SETTINGS
{
EDBG_ADAPTER Adapter; // 與Platform Builder通信的網(wǎng)卡
UCHAR ucEdbgAdapterType; // 調試以太網(wǎng)卡的類(lèi)型
UCHAR ucEdbgIRQ; // 調試以太網(wǎng)卡的IRQ
DWORD dwEdbgBaseAddr; // 調試以太網(wǎng)卡的基地址
DWORD dwEdbgDebugZone; // 調試以太網(wǎng)卡的調試域


char szPlatformString[EDBG_MAX_DEV_NAMELEN]; //一個(gè)唯一的目標板設備名


UCHAR ucCpuId; // 處理器類(lèi)型
} ETH_HARDWARE_SETTINGS, *PETH_HARDWARE_SETTINGS;


我的是2440 5.0采用的是三星08年的BSP,系統可以啟動(dòng)但是 pBSPArgs->nfsblk = -1 ,跟蹤了一下了是:pBSPArgs = ((BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START);這個(gè)參數可以該其他的嗎?nanjianhui 發(fā)表于2009年2月25日 20:45:39 IP:舉報
你是指pBSPArgs么?改是可以改,它實(shí)際上是一個(gè)共享內存的起始地址。至于為什么pBSPArgs->nfsblk = -1,我想根本原因是該變量對應的內存沒(méi)有被初始化,我想你首先要確定該變量是在哪里被初始化的。AMOROUS 發(fā)表于2009年2月26日 10:46:58 IP:舉報
大俠小弟有個(gè)關(guān)于EP9315WINCE里面PHYSICAL_EQUAL_VIRTUAL的問(wèn)題 PHYSICAL_EQUAL_VIRTUAL在oempreinit.c置了1,memorymap.h里用它來(lái)使sdram/flash/sram等虛擬地址和對應的物理地址等同起來(lái),就拿sdram來(lái)說(shuō),片選物理地址0X00000000,如果虛擬地址也等于0X00000000,是否與用戶(hù)進(jìn)程沖突?為什么要這樣做?而不是把虛擬地址映射從0X80000000開(kāi)始?還有就是OEMAddressTable和config.bib里的MEMORY設置虛擬地址是否有關(guān)?nanjianhui 發(fā)表于2009年2月27日 15:04:35 IP:舉報
在oempreinit.c中確實(shí)將PHYSICAL_EQUAL_VIRTUAL設置為1,但是它對OEMAddressTable沒(méi)有影響。OEMAddressTable會(huì )受memorymap.h中#define的影響,而memorymap.h應該包含了memorymap-9315.h。
我目前手上沒(méi)有EP93系列的BSP,不過(guò)我記得應該是這樣的。也就是說(shuō)oempreinit.c中的定義是沒(méi)有意義的,不會(huì )對OEMAddressTable產(chǎn)生影響。這屬于歷史遺留問(wèn)題。
關(guān)于OEMAddressTable和config.bib是否有關(guān)。我想應該說(shuō)OEMAddressTable是一個(gè)物理地址/虛擬地址的映射表,我專(zhuān)門(mén)有一篇blog介紹OEMAddressTable,你可以看看。而config.bib實(shí)際上是確定了在WinCE系統中RAM的分配。AMOROUS 發(fā)表于2009年2月27日 15:51:23 IP:舉報
明白大俠,還有另外一個(gè)問(wèn)題,現在在板上加了一個(gè)512k的可掉電sram,選通用cs2(主要是參考了原來(lái)BSP上OEMAddressTable也有sram的配置,不用再添加),想讓它作為硬盤(pán)用,并在系統中以盤(pán)符形式顯示,并可以實(shí)現讀寫(xiě)存儲,我拷了wince自帶的ramdisk驅動(dòng)過(guò)來(lái)進(jìn)行了修改,作為驅動(dòng)來(lái)添加,并在注冊表添加了sram的起始地址來(lái)定位(\builtin\ramdisk\address),現在燒進(jìn)去后可以在存儲屬性里看到ramdisk的信息,問(wèn)題是無(wú)法裝入分區,也就無(wú)法看到盤(pán)符,請問(wèn)這種思路是否正確,是否由于地址定位錯誤引起的呢?請大俠抽空幫小弟看看AMOROUS 發(fā)表于2009年2月27日 15:54:59 IP:舉報
還有我的config.bib也reserved了一個(gè)ramdisk,是從0x8c000000開(kāi)始的1m空間nanjianhui 發(fā)表于2009年2月28日 12:12:53 IP:舉報
這種問(wèn)題,我建議先看看WinCE的ramdisk的代碼,理解了然后進(jìn)行調試。


linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>