EBoot是WinCE一種默認的Bootloader,用來引導WinCE,升級WinCE,及各種調試工具。在EBoot中打開一些全局變量從而控制WinCE中的功能,比如USB的模式等(就是與WinCE約定了一個內存區(qū)域存放這種標志),還有在
EBOOT中包含的一個重要的緩沖區(qū)叫Driver Globals,它用于在設備驅動和WinCE OS之間共享數據。而在EBOOT中會用到的啟動參數結構被稱為Boot Args,是指用于EBOOT和WinCE OS之間共享一些參數信息。一般來說Boot Args會
在EBOOT運行的時候被賦值或者更新,常用的就是網絡設備的相關信息設置,比如IP地址,MAC地址,中斷等信息。
Driver Globals包含了Boot Args,也就是說Driver Globals是一塊內存緩沖區(qū),其中里面也包含了Boot Args的內存緩沖區(qū)。這里要說明的是Driver Globals是一個可選用的功能,無非就是一塊內存,在EBOOT和WinCE OS之
間進行數據共享。如果你想用,你就用,不想用,也可以不用。我們在使用Driver Globals的時候,一般會在eboot.bib和config.bib文件定義一塊預留的內存區(qū)域,在這兩個文件中定義的這塊內存區(qū)域的起始地址和大小必須一致,相
信這個大家都能理解,至于類型肯定是RESERVED。這樣一來,在EBOOT和WinCE運行的時候,這塊共享內存就被預留出來了。當然,我們還需要在BSP中通過宏定義來定義這塊內存的起始地址和大小,這樣就可以在BSP中訪問這塊內存了。
舉例:
首先在eboot.bib和config.bib都要有下面的定義:
; ------- -------- -------- ----
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就可以通過上面的宏定義的地址來訪問共享內存了。這塊共享區(qū)域是用Driver Globals結構來描述的,具體定義如下:
typedef struct _DRIVER_GLOBALS
// 之后,可以定義用于驅動程序和WinCE OS之間的共享信息
} DRIVER_GLOBALS, *PDRIVER_GLOBALS;
可以看出里面包含了用于描述Boot Args的BOOT_ARGS結構,當然用戶也可以在結構中添加用于驅動和WinCE OS之間共享的數據類型。
下面介紹一下Boot Args的BOOT_ARGS結構,定義如下:
#define BOOTARG_SIG 0x544F4F42 // "BOOT"
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;
#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]; //一個的目標板設備名
} ETH_HARDWARE_SETTINGS, *PETH_HARDWARE_SETTINGS;
相關發(fā)表
1.nanjianhui 發(fā)表于2009年2月25日 20:45:39
我的是2440 5.0采用的是三星08年的BSP,系統可以啟動但是 pBSPArgs->nfsblk = -1 ,跟蹤了一下了是:pBSPArgs = ((BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START);這個參數可以該其他的嗎?I
2.AMOROUS 發(fā)表于2009年2月26日 10:46:58
你是指pBSPArgs么?改是可以改,它實際上是一個共享內存的起始地址。至于為什么pBSPArgs->nfsblk = -1,我想根本原因是該變量對應的內存沒有被初始化,我想你首先要確定該變量是在哪里被初始化的。
3.nanjianhui 發(fā)表于2009年2月27日 15:04:35
大俠小弟有個關于EP9315WINCE里面PHYSICAL_EQUAL_VIRTUAL的問題 PHYSICAL_EQUAL_VIRTUAL在oempreinit.c置了1,memorymap.h里用它來使sdram/flash/sram等虛擬地址和對應的物理地址等同起來,就拿sdram來說,片選物理地址0X00000000,
如果虛擬地址也等于0X00000000,是否與用戶進程沖突?為什么要這樣做?而不是把虛擬地址映射從0X80000000開始?還有就是OEMAddressTable和config.bib里的MEMORY設置虛擬地址是否有關?
4.AMOROUS 發(fā)表于2009年2月27日 15:51:23
在oempreinit.c中確實將PHYSICAL_EQUAL_VIRTUAL設置為1,但是它對OEMAddressTable沒有影響。OEMAddressTable會受memorymap.h中#define的影響,而memorymap.h應該包含了memorymap-9315.h。
我目前手上沒有EP93系列的BSP,不過我記得應該是這樣的。也就是說oempreinit.c中的定義是沒有意義的,不會對OEMAddressTable產生影響。這屬于歷史遺留問題。
關于OEMAddressTable和config.bib是否有關。我想應該說OEMAddressTable是一個物理地址/虛擬地址的映射表,我專門有一篇blog介紹OEMAddressTable,你可以看看。而config.bib實際上是確定了在WinCE系統中RAM的分配。
5.AMOROUS 發(fā)表于2009年2月27日 15:54:59
明白大俠,還有另外一個問題,現在在板上加了一個512k的可掉電sram,選通用cs2(主要是參考了原來BSP上OEMAddressTable也有sram的配置,不用再添加),想讓它作為硬盤用,并在系統中以盤符形式顯示,并可以實現讀寫存儲,
我拷了wince自帶的ramdisk驅動過來進行了修改,作為驅動來添加,并在注冊表添加了sram的起始地址來定位(\\builtin\\ramdisk\\address),現在燒進去后可以在存儲屬性里看到ramdisk的信息,問題是無法裝入分區(qū),也就無法看到盤符,請問這種思路是否正確,
是否由于地址定位錯誤引起的呢?請大俠抽空幫小弟看看。
6.nanjianhui 發(fā)表于2009年2月28日 12:12:53
還有我的config.bib也reserved了一個ramdisk,是從0x8c000000開始的1m空間這種問題,我建議先看看WinCE的ramdisk的代碼,理解了然后進行調試。
關于Windows CE概述
Windows CE作業(yè)系統是Windows家族中的成員,專門設計給掌上型電腦(HPCs)所使用的電腦環(huán)境。這樣的作業(yè)系統可使完整的可攜式技術與現有的Windows桌面技術整合工作。 Windows CE 被設計成針對小型設備(它是典型的擁有有限內存的無磁盤系統)的通用操作系統,
Windows CE 可以通過設計一層位于內核和硬件之間代碼來用設定硬件平臺,這即是眾所周知的硬件抽象層(HAL)(在以前解釋時,這被稱為 OEMC (原始設備制造)適應層,即 OAL; 內核壓縮層,即 KAL。 以免與微軟的 Windows NT 操作系統 HAL 混淆) 。
關于WinCE 開發(fā)體系結構
WinCE 是微軟推出的面向移動和手持設備的嵌入式實時操作系統,為了適應嵌入式系
統多變、靈活的硬件構成,WinCE 也采用可定制的組件模型。
總的說來,WinCE 的開發(fā)分為以下幾個層次
在操作系統底層,響應硬件事件及讀寫硬件的工作由OEM 適配層(OAL)完成,設備
定制系統組件的工作在Platform Builder 中完成,配套光盤中提供了針對PB 5.0 的BSP。
需要注意的是,我們并不提供正版的Platform Builder,如果需要,請到微軟網站上試用
系統建立起來以后,經過編譯生成名為NK.Bin 的操作系統鏡像,將此鏡像到ARM9
開發(fā)板上,就可以在平臺上運行Windows CE。此時也可以在此系統上運行相關的應用程序。
開發(fā)應用程序有幾種工具可供選擇,其中包括EVC(with SP4 )和VS2005 。配合由PB 導
出的SDK,我們就可以編譯出針對特定平臺的應用程序。
Platform Builder、WinCE、BSP 與 SDK 的關系
Platform Builder:定制WinCE 操作系統的工具,借助此工具的幫助,我們可以定制出
滿足自己需要的WinCE 操作系統。一般來講,Platform Builder 的版本號和由它定制出的
WinCE 操作系統的版本號是一致的。例如,Platform Builder 5.0 定制出Windows CE.NET 5.0;
Platform Builder 5.0 定制出Windows CE 5.0;Platform Builder 6.0 定制出Windows Embedded
WinCE 5.0:Windows CE.NET 5.0 的簡寫,由PB 編譯出來。是針對嵌入式平臺的實時
操作系統,提供了與桌面Windows 類似的圖形界面以及幾乎相同的應用程序接口。
BSP 針對特定的硬件平臺對WinCE 操作系統提供支持。一個BSP 只能針對特定版本的Platform Builder。
SDK:Software Development Kit,軟件開發(fā)包。是編寫基于WinCE 的應用程序的必備
工具,可以在Platform Builder 中導出。SDK 針對特定的操作系統對WinCE 應用程序提供支
持。一般來講,在PB 中定制的操作系統針對特定的BSP,針對此特定操作系統的應用程序
需要特定的 SDK 支持。需要指出,基于。NET Framework 的應用程序不需要SDK 支持。
PB,WinCE,BSP 和 SDK 是不同層面的不同含義的名詞。