WINCE的内存配置

合集下载

Windows+CE操作系统介绍

Windows+CE操作系统介绍

Pocket PC2000
Pocket Pocket PC2002 PC2003
Mobile 5.0
Mobile 6.0
Mobile7
2000年4月2001年10月 2003年6月 2005年5月 2007年2月
2008年底
WinCE1.0
WINCE1.0是一种基于Windows95的操作系 统,其实就是单色的Windows95简化版本。90 年代中期卡西欧推出第一款采用WinCE1.0操作 系统的蛤壳式PDA,算是第一家推出真正称得 上手掌尺寸的掌上电脑厂商。作为第一代的 WinCE1.0于1996年问世,不过它最初的发展并 不顺利。当时Paim操作系统在PDA市场上非常 成功,几乎成为了整个PDA产品的代名词,在 这种情况下,微软公司被迫为最初WinCE的不 断改进的同时,微软公司也通过游说、技术支 持、直接资助等手段聚集了大量合作厂商,使 WinCE类的PDA阵容越来越强大。
驱动程序开发
(USB Host、Smart Card 、 Serial 、 PC Card 、 Audio 、 Networking……)
机顶盒 瘦客户机
数字媒ห้องสมุดไป่ตู้适配器
IP 语音(VoIP)电话 导航设备 医疗设备 便携式媒体播放器 家庭网关 数码相机 网络数字电视 PDA
Windows CE支持CPU类型
• • • • ARM X86 SH4 MIPS
Win CE和Windows Mobile关系
wince6.0
wince 6.0是微软于06年11月份推出的,也 是目前wince的最高版本。微软在wince 6.0 推出时宣布完全公开内核源代码,这是微 软难得的大动作,主要是迎击Linux、Wind River阵营长期以来对其定制化不足的攻击。 微软硬件合作伙伴可以修改源代码开发定 制化的文件系统、设备驱动程序与其他元 件,而不需分享他们的最终设计给微软或 第三方。

wince6.0_开发环境搭建

wince6.0_开发环境搭建

Window CE6.0开发平台搭建详解2011年08月29日Windows CE6.0的开发无非两大方面:操作系统开发和应用程序开发,操作系统开发包括系统的定制,驱动开发和其他需要完成的底层工作。

应用程序开发主要是与实际应用结合紧密的程序开发。

要搭建这样的开发环境,至少要包括两部分,一个是硬件平台,一个是软件平台,在Windows CE6.0的开发中,微软公司把这些开发软件集成到了vs2005中。

Windows CE6.0开发环境需要安装的软件比较多、比较大,至少要10GB的空间,而且有着严格的安装顺序要求,一旦其中某一个环节出错,都会导致软件运行出现故障,为确保安装顺利,请仔细阅读本文,按照步骤一步一步进行安装。

一、所需安装软件1、Visual Studio 20052、Visual Studio 2005 Service Pack 13、MSDN4、platform builder for Windows Embedded CE6.05、Windows Embedded CE 6.0 Platform Builder Service Pack 16、Windows mobile 6的sdk二、所用磁盘空间在安装之前,请检查电脑的磁盘空间,VS2005和Windows Embedded CE6.0均是比较大的软件,要占硬盘好10G多的空间,建议不要装在C盘,但是我装Windows Embedded CE6.0的时候,发现不能更改安装路径,没办法,只能把Windows Embedded CE6.0装在C盘。

三、安装顺序1.安装Visual Studio 2005最好选择自定义安装方式,把不用的一些组件都删掉,这样会节省不少的磁盘空间。

WINCE6.0的Platform Builder不像WINCE5.0是独立的,而是作为VS2005的插件,以后建立和定制OS、编译调试全部在VS2005里完成。

wince内存直接读写

wince内存直接读写

2.对物理内存的直接读写在PC环境下,Windows是不允许用户态进程直接访问内存的,任何对内存的访问都会引起程序的异常。

而在嵌入式设备中,需要直接对内存进行读写,以此来提高处理速度,此外,在ARM体系中,I/O被映射到高端的地址进行访问,只有读写物理地址,I/O的驱动才能高效地运行。

Windows CE中有一些API提供了对物理内存的“直接”访问。

不过,在访问之前,必须把物理内存映射到虚拟地址中,通过虚拟地址才能读写物理内存。

PHYSICAL_ADDRESS描述了Windows CE的物理内存结构体,Windows CE在ceddk.h中定义了PHYSICAL_ADDRESS,其定义如下:n 在ceddk.h中typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;n 在winnt.h中typedef union _LARGE_INTEGER{struct{DWORD LowPart;LONG HighPart;};LONGLONG QuadPart;} LARGE_INTEGER;可见,Windows CE中用64位来代表物理地址,对于大多数32位的CPU而言,只需要把它的HighPart设置为0就可以了。

VirtualAlloc()函数是Windows CE中分配连续虚拟地址的API,VirtualCopy()函数将一段物理内存映射到虚拟地址。

因此,在进程中访问物理地址,就像访问虚拟地址一样方便,当然,如何选择虚拟地址是需要研究的。

// 申请虚拟内存LPVOID VirtualAlloc(LPVOID lpAddress, // 希望的虚拟内存起始地址DWORD dwSize, // 以字节为单位的大小DWORD flAllocationType, // 申请类型,分为Reserve和Commit DWORD flProtect // 访问权限);// 把物理内存绑定到虚拟地址空间BOOL VirtualCopy(LPVOID lpvDest, // 虚拟内存的目标地址LPVOID lpvSrc, // 物理内存地址DWORD cbSize, // 要绑定的大小DWORD fdwProtect // 访问权限);VirtualAlloc对虚拟内存的申请分为两步,保留MEM_RESERVE和提交MEM_COMMIT。

Windows配置虚拟内存-SDCServer

Windows配置虚拟内存-SDCServer

赛题
前言
1、设置虚拟内存
赛题
6.虚拟内存
在 SDCServer 上设置虚拟内存初始大小为 600MB,最大为 1200MB。

前言
虚拟内存是文件数据交叉链接的活动文件,它会在硬盘上生成一个pagefile.sys文件。

电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。

为解决该问题,Windows中运用了虚拟内存技术,即匀出一
部分硬盘空间来充当内存使用。

当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。

优点:可以弥补物理内存大小的不足;一定程度的提高反映速度;减少对物理内存的读取从而保护内存延长内存使用寿命;
缺点:占用一定的物理硬盘空间;加大了对硬盘的读写;设置不得当会影响整机稳定性与速度
1、设置虚拟内存
设置虚拟内存的方法是:计算机→右键→属性→高级系统设置→高级→性能框→设
置→高级→虚拟内存框→更改。

winCE5.0 6.0使用教程

winCE5.0   6.0使用教程

Windows ce6.0模拟器可用于车载导航系统(凯立德导航地图、道道通导航地图、城际通导航地图及其它Windows CE软件模拟测试)。

本次分享的是Wince6.0模拟器,喜欢折腾的朋友抓紧下载了!Windows ce6.0模拟器使用方法:1. 解压下载好的Windows ce6.0程序压缩包。

2. 运行文件夹内“连接加载.bat”注册Windows ce6.0。

3. 按需求运行文件夹内各分辨率“800x480.BAT”“7寸.bat”“4.3寸.bat”运行文件,启动CE6.0模拟器。

480*272 4.3寸 CE6.0模拟器演示480*234 7寸 CE6.0模拟器演示800*480 CE6.0模拟器演示windows ce6.0模拟器运行凯立德导航地图(其他导航系统运行方法一致):1、点击win CE6.0模拟器顶部文件选项>>>配置>>常规>>共享文件夹2、点击共享文件夹"..."后,选择凯立德导航地图文件夹,选择完毕点击确定。

3、点击win CE6.0模拟器桌面上的“我的设备”图标。

4、打开“SDMMC”5、打开“SDMMC”后,运行Navione.exe 运行凯立德导航系统。

windows ce6.0模拟器运行凯立德导航系统全屏设置:1、单击windows ce6.0模拟器开始菜单>>>设置>>>任务栏和开始栏菜单2、在任务栏和开始栏菜单属性>>>常规里勾选自动隐藏,点击OK,凯立德导航地图全屏显示了。

15.jpg(122.8 KB, 下载次数: 5)下载附件设置成功,凯立德导航地图全屏显示2012-11-8 11:23 上传Windows ce6.0模拟器下载:下载地址:本帖隐藏的内容/share/link?shareid=104534&uk=2569674654。

WinCE5.0中VirtualAlloc内存分配的试验代码

WinCE5.0中VirtualAlloc内存分配的试验代码

WinCE5.0中VirtualAlloc内存分配的试验代码⼀、引WINCE HELP中对VirtualAlloc的说明⾥,对第⼀个参数pAddress描述⾥写到“If the memory is being reserved, the specified address is rounded down to the next 64-KB boundary. If the memory is reserved and is being committed, the address is rounded down to the next page boundary. ” 如果不是上⾯提到这篇⽂章,我根本就不会注意到这句,因为TCPMP⾥的⽤法是:p = VirtualAlloc(NULL,n,MEM_COMMIT,PAGE_READWRITE);这第⼀个参数根本就忽略过去了。

下⾯的代码试验是基于这篇⽂章的。

其中我最担⼼的⼀点,就是⽂章是针对的,⽽⽬前我⽤的版本是5.0,⽂中所提到的⼀些限制,是否已经有所改进了呢。

⼆、测试64KB对齐的直接分配⽅式写个测试代码验证⼀下#include "stdafx.h"#include "Winbase.h"#include "stdlib.h"int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){// TODO: Place code here.int i = 0;void* pMem = NULL;SYSTEM_INFO SystemInfo;GetSystemInfo(&SystemInfo);printf("SystemInfo.dwPageSize = %d \n", SystemInfo.dwPageSize);printf("SystemInfo.lpMinimumApplicationAddress = 0x%x \n", (int)SystemInfo.lpMinimumApplicationAddress);printf("SystemInfo.lpMaximumApplicationAddress = 0x%x \n", (int)SystemInfo.lpMaximumApplicationAddress);GlobalMemoryStatus(&MemStatus);printf("MemStatus.dwTotalPhys = %d \n", MemStatus.dwTotalPhys);printf("MemStatus. dwAvailPhys = %d \n", MemStatus.dwAvailPhys);printf("MemStatus.dwTotalVirtual = %d \n", MemStatus.dwTotalVirtual);printf("MemStatus.dwAvailVirtual = %d \n", MemStatus.dwAvailVirtual);while(1){pMem = VirtualAlloc (0, 512, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);if(!pMem){printf("alloc %d times, failed, end",i+1);break;}else{printf("0x%X ",(int)pMem);}i++;}GlobalMemoryStatus(&MemStatus);printf("MemStatus.dwTotalPhys = %d \n", MemStatus.dwTotalPhys);printf("MemStatus. dwAvailPhys = %d \n", MemStatus.dwAvailPhys);printf("MemStatus.dwTotalVirtual = %d \n", MemStatus.dwTotalVirtual);printf("MemStatus.dwAvailVirtual = %d \n", MemStatus.dwAvailVirtual);return 1;}运⾏结果:SystemInfo.dwPageSize = 4096SystemInfo.lpMinimumApplicationAddress = 0x10000SystemInfo.lpMaximumApplicationAddress = 0x7fffffffMemStatus.dwTotalPhys = 55,656,448MemStatus.dwAvailPhys = 40,923,136MemStatus.dwTotalVirtual = 33,554,4320x60000 0x70000 0x80000 0x900000xA0000 0xB0000 0xC0000 0xD0000......0x1E40000 0x1E50000 0x1E60000 0x1E700000x1E80000 0x1E90000 0x1EA0000 0x1EB0000alloc 487 times to failed, ENDMemStatus.dwTotalPhys = 55,656,448MemStatus.dwAvailPhys = 38,903,808MemStatus.dwTotalVirtual = 33,554,432MemStatus.dwAvailVirtual = 0很好,和⾼级内存管理⼀⽂描述的情况⼀样, 不过还是有些意外的发现. 我们再来仔细看⼀下(1) 所谓的next 64-KB boundary,换算成16进制也就是0x10000, 上⾯测试代码所得到的结果,的确是每次分配按0x10000递增的(2) 的确在分配不⾜512次后,内存就⽤光了,分配失败停⽌了。

WINCE5.0 6.0开发环境配置与SDK下载

WINCE5.0 6.0开发环境配置与SDK下载

WINCE5.0 6.0开发环境配置与SDK下载WinCE5.0 模拟器配置与SDK下载WinCE5.0中文模拟器SDK的安装过程不细说了,一路默认即可,下面主要介绍如何配置,使其能在VS2005中正常使用。

安装完成后,打开VS2005,点击菜单“工具”——“选项”——“设备工具”——“设备”,选择“Windows CE 5.0 ARMV4I Emulator”,点击“属性”按钮,如下图所示。

在弹出的对话框中,点击“仿真器选项”,如下图所示。

在弹出的对话框中,设置“Flash Memory File”和RAM Size如下图所示。

在Display下,设置显示属性,如下图所示,点击“OK”——“确定”——“确定”保存设置。

打开Device Emulator Manager,连接“Windows CE 5.0 ARMV4I Emulator”,启动模拟器。

如果需要保存文件及注册表设置,点击菜单“Flash”——“Save”即可,如下图所示。

该SDK的下载地址:/source/1846785/source/1846812WinCE6.0 模拟器配置与SDK下载1、先装Visual Studio 2005, 我拿到的是Professional Edition。

最好别用DEFAULT安装,把组件CUSTOM一下,不然会花很多冤枉的磁盘空间。

WINCE600的Platform Builder不像WINCE500是独立的,而是作为VS2005的插件,以后建立和定制OS、编译调试全部在VS2005里完成2、安装Visual Studio 2005 Service Pack 1, 发布的地址/zh-cn/vstudio/bb265237.aspx这是必须的装的,Release Note里面提到SP1提供了Windows Embedded 6.0 platform and tools support。

不同的VS2005版本(Standard / Professional / Tem Edition) 会对应到不同的下载上,不过简单点就用这个下载/downloads/details.aspx?familyid=BB4A75AB-E2D4-4C96-B39 D-37BAF6B5B1DC&displaylang=en 430多兆,通吃所有版本。

Windows CE内存管理(CE5.0&CE6.0)

Windows CE内存管理(CE5.0&CE6.0)

物理地址

虚拟内存模型(2)-CE5.0
FFFF FFFF
Kernel Space
Kernel Addresses: KPAGE, Trap Area, Others Unused
Total 4 GB Virtual Space 2 GB Kernel Space
User Space
Slots 63 – resources dll
Logical Memory (Heap, stack) Virtual Memory Physical Memory * Storage Device
Windows CE采用层次化的结构
内存结构(2)

物理内存


在内部或外部总线上可访问的实际的 RAM/ROM RAM分为对象存储区域(object store)和应 用程序内存区域(program memory)。 ROM中存放的内容可以是压缩的,也可以是 不压缩的(可本地执行--XIP,executed in place)。 Windows CE只能管理512MB的物理内存
WinCE 6的虚拟内存模型(5)
内核空间





低1G:静态虚拟地址 0xC0000000–0xC7FF FFFF: 内核加载的(XIP) DLL 0xC8000000–0xCFFFFFFF:文 件系统的对象存储区 0xD0000000–0xDFFFFFFF:内 核模式的程序执行区。如 GWES.DLL,系统DLL,内核驱 动等。 0xE0000000–0xEFFFFFFF:同 上。除了SH4架构的CPU。 0xF0000000–0xFFFFFFFF:捕 获系统调用,包含核心数据页。
FFFF FFFF

WINCE5.0和WINCE6.0的主要差别

WINCE5.0和WINCE6.0的主要差别

WINCE5.0和WINCE6.0的内存与系统架构********************************LoongEmbedded************************ 作者:LoongEmbedded(kandi)时间:2010.07.21类别:WINCE嵌入式操作系统********************************LoongEmbedded************************ 1.WINCE5.01.1 WINCE5.0的内存架构因为WINCE是32位的嵌入式操作系统,所以WINCE的虚拟寻址能力可达4GB(为什呢,2^32=4GB),但是WINCE5.0和XP操作系统的每个进程独享4GB虚拟地址空间不同,WINCE5.0中所有的进程共享一个4GB的虚拟地址空间。

这4GB的虚拟地址空间被分为两个2GB的区域,其中低地址的那2GB区域(0x00000000 ~ 0x7FFFFFFF)是用户虚拟空间,这块虚拟空间由应用程序的共用,也就是说应用程序申请的内存都会从低2GB虚拟内存空间分配的;而高2GB区域(0x80000000 ~ 0xFFFFFFFF)是操作系统的内核虚拟空间,供WINCE操作系统本身使用。

我们知道WINCE5.0的进程数量最多只能达到32个,而且每个进程只能独享32MB的虚拟空间(这个32MB的空间也叫一个slot),这33个进程(32+1,这个1就是指slot0,因为slot0用于映射当前在处理器上执行的线程所在的进程)占用的虚拟空间0x00000000~0x41FFFFFF(slot0~slot32),slot33~slot63对应的虚拟地址空间是0x42000000~0x7FFFFFFF,这块虚拟地址空间是由所有的进程共享的,如果每个进程独享的32MB虚拟地址空间不够用,那么进程可以在这个范围申请虚拟地址空间,这个范围包括对象存储和内存映射文件(.map文件,每个进程都有自己的map文件)。

WindowsCE5.0与6.0的主要差别

WindowsCE5.0与6.0的主要差别

Window‎s CE 5.0和Wind‎o ws CE 6.0的内存与系‎统架构1.Window‎s CE 5.01.1 Window‎s CE 5.0的系统架构‎1.2 Window‎s CE 5.0的内存架构‎因为WINC‎E是32位的‎嵌入式操作系‎统,所以WINC‎E的虚拟寻址‎能力可达4G‎B(为什呢,2^32=4GB),但是WINC‎E5.0和XP操作‎系统的每个进‎程独享4GB‎虚拟地址空间‎不同,WINCE5‎.0中所有的进‎程共享一个4‎G B的虚拟地‎址空间。

这4GB 的虚‎拟地址空间被‎分为两个2G‎B的区域,其中低地址的‎那2GB区域‎(0x0000‎0000 ~ 0x7FFF‎F FFF)是用户虚拟空‎间,这块虚拟空间‎由应用程序的‎共用,也就是说应用‎程序申请的内‎存都会从低2‎G B虚拟内存‎空间分配的;而高2GB区‎域(0x8000‎0000 ~0xFFFF‎F FFF)是操作系统的‎内核虚拟空间‎,供WINCE‎操作系统本身‎使用。

我们知道WI‎N CE5.0的进程数量‎最多只能达到‎32个,而且每个进程‎只能独享32‎MB的虚拟空‎间(这个32MB‎的空间也叫一‎个sl ot),这33个进程‎(32+1,这个1就是指‎s l ot0,因为slot‎0用于映射当‎前在处理器上‎执行的线程所‎在的进程)占用的虚拟空‎间0x000‎00000~0x41FF‎FFFF(slot0~slot32‎),slot33‎~slot63‎对应的虚拟地‎址空间是0x‎420000‎00~0x7FFF‎FFFF,这块虚拟地址‎空间是由所有‎的进程共享的‎,如果每个进程‎独享的32M‎B虚拟地址空‎间不够用,那么进程可以‎在这个范围申‎请虚拟地址空‎间,这个范围包括‎对象存储和内‎存映射文件(.map文件,每个进程都有‎自己的map‎文件)。

此范围的最后‎一个slot‎(slot63‎)从0x7E0‎00000~0x7FFF‎FFFF用来‎存放纯资源D‎LL。

系统的运行环境配置及安装说明书

系统的运行环境配置及安装说明书

系统运行环境配置及安装说明一、系统运行环境配置本系统为网络版,在服务器上安装后,局域网内所有计算机都可以连接使用。

安装后系统的数据库和应用程序分别存放在Microsoft SQL Server中和用户指定的磁盘上。

1.硬件环境1.1网络环境本系统需要运行在单位局域网上,要求服务器、客户端(档案室)计算机连接在此网络上。

建议配置100M网络速度。

1.2满足系统运行的客户机、服务器的基本配置CPU: PⅣ1.6G以上内存:256M以上,建议512M硬盘:40G以上VGA:分辨率800*600或者更高网卡:100M以上其他:光驱、3.5英寸软驱、鼠标2.软件环境2.1服务器操作系统配置: Windows 2000 Server 或Windows 2000 Advanced Server 。

2.2服务器数据库配置: Microsoft SQL Server 7.0 或 Microsoft SQL Server 2000 。

第一次在服务器上安装Microsoft SQL Server,在安装过程中会出现提示输入“连接客户端数”的窗口,请增加100个客户端。

服务器上已经安装了Microsoft SQL Server,请运行“开始”-->“程序”-->“管理工具”-->“授权”检查Microsoft SQL Server的许可连接数,如果其连接数为0或不足100,请设置为100个客户端连接。

2.3客户端浏览器配置:IE5.0以上。

二、系统安装说明请插入“中国科学院院属单位综合档案管理系统”光盘,双击SETUP[2.50].EXE。

按照系统提示的步骤安装到PC机或服务器上。

用户只能将本系统安装在计算机的根目录下,如:C:\ 。

安装完成后请重新启动服务器。

三、数据库软件安装说明本系统需要安装SQL SERVER 7.0或者SQL SERVER 2000数据库软件,安装具体步骤如下。

1.SQL SERVER 7.0的安装把SQL SERVER 7.0数据库安装光盘放到光驱中,双击光盘盘符,进入光盘内容。

WRITE_REGISTER_ULONG

WRITE_REGISTER_ULONG

Windows CE采用了四层内存管理结构,从下到上依次为:物理内存,虚拟内存,逻辑内存和C/C++运行时库.其中物理内存包括:RAM(为OS和程序提供运行和缓冲空间),ROM(存储程序,包括OS和一些文件),Flash(可擦写).CE支持最大物理内存为512M.所有进程共享4G的虚拟存储空间,它是通过以页为单位管理的,不同处理器支持页大小不同(ARM支持1K,4K,64K,1M;X86支持4K与4M).虚拟内存的申请分成保留和提交两个过程(reserve and commit).虚拟内存要求硬件上具有MMU的支持,MMU负责把虚拟地址映射到物理地址,并提供内存保护.CE把4G的虚拟内存分成两部分:低2G为用户空间,由应用程序使用;高2G为内核空间,由OS使用.所谓逻辑内存分成堆(64K)和栈(60K).而C/C++运行时库提供了一系列内存管理函数,比如malloc,new,delete等等.在PB的帮助中指出WINCE有两种地址:物理地址和虚拟地址.在不同架构的CPU下,概念有所区别.MIPS和SHx处理器,内核操作1G的存储(512M缓存,512M非缓存);而X86和ARM在OEMAddressTable中划分物理存储.相应的地址映射方法也分成两种:MIPS和SHx处理器,不采用MMU,直接在CPU和内核里定义;X86和ARM在OEMAddressTable中定义映射关系或者是OS启动后调用CreateStaticMapping和NKCreateStaticMapping来实现从虚拟地址到物理地址的映射.另一种分类是映射虚拟地址的形式可以分成静态虚拟地址映射和动态虚拟地址映射.所谓静态,就是在OEMAddressTable中定义映射关系或者是OS启动后调用CreateStaticMapping和NKCreateStaticMapping来实现从虚拟地址到物理地址的映射;动态则是通过VirtualAlloc和VirtualCopy(或者调用MmmapIoSpace函数).这两种映射虚拟地址的形式区别在于静态虚拟地址只能由内核使用,用于ISR访问外设存储.而动态虚拟地址可以在应用程序里访问物理地址(比如在驱动中操作寄存器).在X86和ARM体系的CPU里,有一个数据结构对于地址映射技术尤其重要:OEMAddressTable.这个数组定义了外设从4G的虚拟地址到512M物理地址的映射关系.它位于public\common\oak\csp\x86\oal目录下的oeminit.asm中,格式为Virtual Address, Physical Address, Size在X86下大小必须是4M的倍数,ARM下为1M的倍数.内核建立了两个范围的虚拟地址:从0x80000000到0x9FFFFFFF是带缓存的物理地址映射,而0xA0000000 到0xBFFFFFFF 是不带缓存的物理地址映射.驱动访问外设时,应该用不带缓存段的虚拟地址. 要注意的一点是,如果改动了OEMAddressTable,相应要改动config.bib.//**************************************************************//在不同CPU下对I/O的编址方式不同.比如X86下是存储器和I/O端口分开编址,ARM下是把I/O端口映射到存储器的。

Microsoft Windows CE 的内存使用

Microsoft Windows CE 的内存使用

Microsoft Windows CE 的内存使用John Murray1997.9介绍Microsoft®Windows® CE是组件化的操作系统,它可根据目标设备或平台的不同特点进行定制。

原始设备制造商(OEM)或嵌入系统开发者可以选择所需的系统模块和组件,将其提供给用于目标平台的操作系统。

所选择的模块和组件确定了它的内存需求情况。

一个模块表示一个完整的功能区域,在系统软件中可将其表示出也可以不将其表示出。

如果不需要该功能,那么可以将整个模块忽略。

例如,用一个名为“serial”的简单的模块提供出所有串行端口的功能,可以将其包括在系统中也可以不包括。

一些大的模块可以进一步分成几个组件。

这使得OEM厂商可以通过仅仅包含OEM设备的需要的组件,定制出这些模块更小的版本。

例如,文件系统模块包括RAM文件系统、ROM文件系统、注册表和数据库几个组件。

OEM可以(按照一定的限制)组合这些文件系统的组件使之满足目标系统的需要。

为了帮助OEM和嵌入系统开发者做决定,这对于了解给定模块或组件的内存耗费情况是十分有用的。

本文将讲述Windows CE 2.0操作系统是如何使用内存的,并列出对于所选的Windows CE系统配置中主要系统模块和组件的内存需求情况。

同时也将讲述如何使用Windows CE工具查看其他配置情况下的内存需求情况。

对于Windows CE 2.0版,微软已经创建并测试了这些模块和组件的几种基本配置。

这些配置代表了不同的几组系统性能,从仅带有最小用户输入并且没有显示能力的基本系统,到用于手持PC(H/PC)上的具有Microsoft Windows全部外观和感觉的完整系统。

每个配置都是建立在前一个配置的基础上的。

下列表格列出了在本文中被讨论到的被测试过的配置。

系统内存的使用典型的Windows CE设备包括ROM和RAM内存。

当设备被关闭时,设备也可以通过使用充电的后备电池而继续维持RAM中的内容。

Windowsserver各版本区别及对内存的支持

Windowsserver各版本区别及对内存的支持

Windowsserver各版本区别及对内存的支持Windows server各版本区别及对内存的支持一、windows server 各版本对内存的支持:1、windows 2000操作系统:windows 2000 Professional 4GB 1cpu操作系统:windows 2000 Server 4GB 2cpu操作系统:windows 2000 Advanced Server 8GB 8CPU2、Windows server 2003/2008A、win svr 2003标准版:可支持1-4颗cpu,不可以集群,可以支持的内存:32位支持4GB的内存,64位支持32GB内存。

企业版:可支持1-8颗cpu,可以集群, 可以支持1TB的内存.支持的内存:32位支持32GB 的内存,64位支持1TB内存。

B、win svr 2008标准版:可支持1-4颗cpu,不可以集群,支持的内存:32位支持4GB的内存,64位支持32GB内存。

企业版:可支持1-8颗cpu,可以集群,支持的内存:32位支持64GB的内存,64位支持1TB 内存。

备注:03与08的界面不同,08的系统比较稳定,08支持热插拔,08支持虚拟化。

二、window server 版本功能区别1)Windows Server , Standard Edition (标准版)针对中小型企业的核心产品。

它除了具备Windows ServerWeb Edition 所有功能外,还支持像证书服务、UDDI服务、传真服务、IAS因特网验证服务、可移动存储、RIS、智能卡、终端服务、WMS 和Services for Macintosh。

支持文件和打印机共享。

提供安全的网络联接。

2)Windows Server , Enterprise Edition (企业版)这个产品被定义为新一带高端产品,它最多能够支持8路处理器,和28个节点的集群。

Windows CE5.0与6.0的主要差别

Windows CE5.0与6.0的主要差别

Windows CE 5.0和Windows CE 6.0的内存与系统架构1.Windows CE 5.01.1 Windows CE 5.0的系统架构1.2 Windows CE 5.0的内存架构因为WINCE是32位的嵌入式操作系统,所以WINCE的虚拟寻址能力可达4GB(为什呢,2^32=4GB),但是WINCE5.0和XP操作系统的每个进程独享4GB 虚拟地址空间不同,WINCE5.0中所有的进程共享一个4GB的虚拟地址空间。

这4GB的虚拟地址空间被分为两个2GB的区域,其中低地址的那2GB区域(0x00000000 ~ 0x7FFFFFFF)是用户虚拟空间,这块虚拟空间由应用程序的共用,也就是说应用程序申请的内存都会从低2GB虚拟内存空间分配的;而高2GB区域(0x80000000 ~ 0xFFFFFFFF)是操作系统的内核虚拟空间,供WINCE操作系统本身使用。

我们知道WINCE5.0的进程数量最多只能达到32个,而且每个进程只能独享32MB的虚拟空间(这个32MB的空间也叫一个slot),这33个进程(32+1,这个1就是指slot0,因为slot0用于映射当前在处理器上执行的线程所在的进程)占用的虚拟空间0x00000000~0x41FFFFFF(slot0~slot32),slot33~slot63对应的虚拟地址空间是0x42000000~0x7FFFFFFF,这块虚拟地址空间是由所有的进程共享的,如果每个进程独享的32MB虚拟地址空间不够用,那么进程可以在这个范围申请虚拟地址空间,这个范围包括对象存储和内存映射文件(.map文件,每个进程都有自己的map文件)。

此范围的最后一个slot(slot63)从0x7E000000~0x7FFFFFFF用来存放纯资源DLL。

如果某个DLL里面只有资源信息(比如图标、位图、对话框及字符串表灯),这个DLL就会被加载到这个空间内。

从0x80000000开始是WINCE内核使用的虚拟内存空间,其中0x80000000~0x9FFFFFFF(512MB)这段用来静态所有的物理地址,也就是说WINCE会把所有的物理内存1:1地址映射到这段虚拟内存上,这也就是WINCE最大支持的物理内存是512MB的由来。

windows规格参数

windows规格参数

windows规格参数
Windows的规格参数主要包括以下部分:
1. 处理器(CPU):至少需要1GHz的32位(x86)或64位(x64)处理器,或更快。

2. 内存(RAM):至少需要1GB的RAM(32位)或2GB的RAM(64位)。

3. 硬盘空间:至少需要16GB的可用硬盘空间(32位)或20GB的可用硬盘空间(64位)。

4. 显卡:需要支持Microsoft DirectX 9或更高版本的图形设备。

5. 分辨率:若要访问Windows应用商店并下载和运行程序,需要有效的Internet连接及至少1024x768的屏幕分辨率。

若要拖拽程序,需要至少1366x768的屏幕分辨率。

6. 其他:若要使用触控,需要支持多点触控的平板电脑或显示器。

以上是Windows操作系统运行所需的基本规格参数,具体硬件配置要求可能会根据不同版本的系统或应用软件而有所差异。

建议根据自己的实际需求和预算选择合适的硬件配置。

windowsserver2021各版本之间对内存的支持大小

windowsserver2021各版本之间对内存的支持大小

windows server 2021 各版本之间对内存的支持大小2021年03月20日礼拜六17:27Windows Server 2021有多种版本,每种都适合不同的商业需求:Windows Server 2021 Web版Windows Server 2021 标准版Windows Server 2021 企业版Windows Server 2021 数据中心版Windows Server 2021 Web版(标准的英文名称:Windows Server 2021 Web Edition)用于构建和寄放Web应用程序、网页和XML Web Services。

它要紧利用IIS Web效劳器并提供快速开发和部署利用技术的XML Web services和应用程序。

支持双处置器,最低支持256MB的内存.它最高支持2GB的内存。

Windows Server 2021 标准版(标准的英文名称:Windows Server 2021 Standard Edition)销售目标是中小型企业,支持文件和打印机共享,提供平安的Internet连接,许诺集中的应用程序部署。

支持4个处置器;最低支持256MB的内存,最高支持4GB的内存。

Windows Server 2021 企业版(标准的英文名称:Windows Server 2021 Enterprise Edition)Windows Server 2021 企业版与Windows Server 2021 标准版的要紧区别在于:Windows Server 2021 企业版支持高性能效劳器,而且能够群集效劳器,以便处置更大的负荷。

通过这些功能实现了靠得住性,有助于确保系统即便在显现问题时仍可用。

在一个系统或分区中最多支持八个处置器,八节点群集,最高支持32GB的内存。

Windows Server 2021 数据中心版(标准的英文名称:Windows 2021 Datacenter Edition)针对要求最高级别的可伸缩性、可用性和靠得住性的大型企业或国家机构等而设计的。

基于AM335X与WinCE7.0平台的内存配置方法及应用

基于AM335X与WinCE7.0平台的内存配置方法及应用

基于AM335X与WinCE7.0平台的内存配置方法及应用袁霞;李泽银【期刊名称】《软件导刊》【年(卷),期】2018(017)006【摘要】在嵌入式领域,时常需针对应用调整存储设备大小及更换型号,如何保证更换后系统正常运行,是各BSP移植调试的核心。

以运行Windows CE7.0操作系统的AM3352主板为开发平台,详细介绍了更换存储芯片型号和大小后,WinCE7.0系统下的地址参数配置及修改虚拟地址映射关系的原理和方法。

将DDR3 SDRAM 芯片从H5TQ2G83DFR-G7C更换为H5TQ2G83DFR-H9C,NANDFlash芯片从H27U4G8F2DTR-BC更换为H27U1G8F2BTRBC,通过测试验证了该方法可行,主板能够正常启动进入操作系统桌面,系统各应用程序能正常运行。

该方法可为不同物理内存大小和型号的SDRAM及NANDFlash芯片在WinCE7.0上移植与参数配置提供参考。

【总页数】6页(P39-44)【作者】袁霞;李泽银【作者单位】中国兵器装备集团自动化研究所四川绵阳621000;中国兵器装备集团自动化研究所四川绵阳621000【正文语种】中文【中图分类】TP301【相关文献】1.基于AM335X的北斗导航应用开发 [J], 金龙;缪峰;路振民;梁征2.基于AM335X与WinCE7.0平台的内存配置方法及应用 [J], 袁霞;李泽银3.基于AM3359和WinCE7.0平台的RTC时钟设计与实现 [J], 袁霞;蒲实4.基于EVC平台的内存映射文件技术研究与应用 [J], 赵小建;方康玲5.基于AM3359和WinCE7.0平台的RTC时钟设计与实现 [J], 袁霞;蒲实因版权原因,仅展示原文概要,查看原文内容请购买。

ce内存映射的点点滴滴

ce内存映射的点点滴滴

ce内存映射的面面滴滴之阳早格格创做OEMAddressTable里定义的映射闭系是给ARM MMU用的,是正在KernelStart(source code参照wince420private目录)时修坐的,只消WINCE还正在跑,便没有会排除. OEMAddressTable里的Virtual Addr战Physical Addr是对付ARM去道的.本去对付于WINCE,只可考察它的Virtual address. 也便是道,OEMAddressTable里的Virtual address对付WINCE 系统去道才是Physical Address. 通过OEMAddressTable映射后的系统的物理天面,正在0x80000000~0x9FFF FFFF之间.是caching and buffering的天面,那个天面加上0x20000000,便是它的cache & buffering disabled天面.所有硬件寄存器的天面皆正在那个天面段上,受MMU呵护. 上头道的系统的物理天面,从0x80000000~0x BFFF FFFF,正在Kernel Mode下皆不妨曲交考察. ISR是正在KERNEL里,也便不妨曲交考察那些系统的物理天面.无所谓"果为ISR只可考察固态映射的假造天面". 对付于ARM去道,有假造天面战物理天面之分,对付于WINCE去道,也有假造天面战物理天面之分. 不妨那样道,ARM的假造天面便是WINCE系统的物理天面.32位的OS总同有4G的假造天面空间,WINCE也没有例中. 其中,0x00000000~0x80000000是Application Space;0x80000000~0x FFFF FFFF是System Reserved.系统的物理天面便正在System Reserved的那段,只可用KERNEL MODE考察. 那么,当APPLICATION战DRIVER(皆是运止正在USER MODE)要考察那些正在System Reserved天面段的硬件寄存器或者MEMORY怎么办呢?只佳再修坐一层映射闭系,正在Application Space里调配一段空间,把它映射到System Reserved里的天面上,那便是VirtualAlloc/VirtualCopy战MmMapIoSpace搞的事务.如果天面的声明是那样: #define RTC_COUNTER *((volatile unsigned *)0x91000000) 那么曲交读写便不妨了: int nRtc =RTC_COUNTER; RTC_COUNTER = nRtc; 可则,不妨用: int nRtc = READ_REGISTER_ULONG(0x91000000);WRITE_REGISTER_ULONG(0X91000000, nRtc); 本去那二种办法的真量是一般的,皆是把天面声明成某个数据典型,而后便不妨曲交读写了.底下是READ_REGISTER_ULONG()战WRITE_REGISTER_ULONG()的定义: #defineREAD_REGISTER_ULONG(reg) (*(volatile unsigned long * const)(reg)) #define WRITE_REGISTER_ULONG(reg, val)(*(volatile unsigned long * const)(reg)) = (val)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

WINCE的内存配置朋友给的一个学习WINCE内存的配置文件,引自一个达人的博客,名字未知,在这里向他致敬!WINCE的内存(包括SDRAM及FLASH)的配置包含两个方面:源代码(包括C和汇编)中的定义,及系统配置文件CONFIG.BIB中的定义。

源代码中需要定义内存的物理及虚拟地址,大小,并初始化名为OEMAddressTable的结构数组,以告知系统物理地址与虚拟地址的对应关系,系统根据其设置生成MMU页表。

而CONFIG.BIB中一般会将内存定义成不同的段,各段用作不同的用途。

CONFIG.BIB文件CONFIG.BIB文件分两个部分,我们且称之为段,MEMORY 段和CONFIG段。

MEMORY段定义内存的分片方法,CONFIG段定义系统其它的一些属性。

以下是一个CONFIG.BIB文件MEMORY段的例子:MEMORY;名称起始地址大小属性RESERVED 80000000 00008000 RESERVEDDRV_GLB 80008000 00001000 RESERVEDCS8900 80010000 00030000 RESERVEDEDBG 80040000 00080000 RESERVEDNK 800C0000 00740000 RAMIMAGERAM 81000000 00800000 RAM名称原则上可以取任意字符串,ROMIMAGE通过一个内存片的属性来判断它的用途。

RESERVE属性表明该片内存是BSP自己使用的,系统不必关心其用途;RAMIMAGE说明它是一片存放OS IMAGE的内存;而RAM则表示些片内存为RAM,系统可以在其中分配空间,运行程序。

但存放ROM的这片内存的名称,即NK一般不要改动。

因为BIB文件中定义将一个文件加入到哪个ROM片(WINCE 支持将ROM IMAGE存放在不连续的几个内存片中)中时会用到这个名称,如下现这行BIB文件项就定义将touch.dll 放在名称为NK这片ROM中,touch.dll $(_FLATRELEASEDIR)/touch.dll NK SH因而,如果将NK改为其它名称,则系统中所有的BIB文件中的这个NK串都需要改动。

注意:保证各片内存不要重叠;而且中间不要留空洞,以节约内存;两种设备如果不能同时被加载,就应该只为其保留一片从而节约内存,例如,本例中的CS8950是为网卡驱动程序保留的,EDBG是为网卡作调试(KITL)用时保留的,而系统设计成这两个程序不会同时加载(CS8950在启动时判断如果EDBG在运行就会自动退出),这样为这两个驱动程序各保留一片内存实在浪费而且也没有必要。

RAM片必须在物理上是连续的,如果系统的物理内存被分成了几片,则在RAM片只能声明一片,其它的内存在启动阶段由OEMGetExtensionDRAM报告给系统,如果有多于一个的内存片,应该用OEMEnumExtensionDRAM报告。

NK 片则没有此限制,只是NK跨越两个以上物理内存片时,系统启动时会显示这个OS包跨越了多个物理内存片,认为是个错误,但并不影响系统的执行与稳定性,因为系统启动之时便会打开MMU而使用虚拟地址,从而看到连续的内存空间。

当然,如果内核自己都被放在了两个内存片上,那系统应该就无法启动了。

而其它保留起来的内存片是一般是给驱动程序DMA用,应该保证它们在物理上的连续性,因为DMA是直接用物理地址的。

CONFIG段中以下几个需要格外注意:ROMSTART,它定义ROM的起始位置,应该和NK片的起始位置相同。

ROMSIZE,定义ROM的大小,应该和NK片的大小相同。

如果不需要NK。

BIN文件,则可以不设这两个值。

ROMWIDTH,它只是定义ROMIMAG生成ROM包时如何组织文件,而非其字面含义:ROM的宽度,所以一般都应该为32COMPRESSION,一般定义为ON,以打开压缩功能,从而减小BIN文件的尺寸。

AUTOSIZE,一般应该设为ON,以使系统将定义给ROM但没有用掉的内存当做RAM使用,而提高RAM的使用率。

注意,如果ROM是FLASH,则不能设为ON,因为FLASH 不能当作RAM使用。

ROMOFFSET,它定义OS起始位置(即ROMSTART)的物理地址和虚拟地址的差值,有些BSP中并没有使用这个定义。

OEMAddressTable及其它OEMAddressTable用来初始化系统中各种设备的虚拟地址与物理地址的对映关系。

在我使用的BSP中,它是这样定义并初始化的:typedef struct{ULONG ulVirtualAddress;ULONG ulPhysicalAddress;ULONG ulSizeInMegs;} AddressTableStruct;#define MEG(A) (((A - 1)>>20) + 1)const AddressTableStruct OEMAddressTable[] ={{ SDRAM_VIRTUAL_MEMORY, //虚拟地址PHYSICAL_ADDR_SDRAM_MAIN, //物理地址MEG(SDRAM_MAIN_BLOCK_SIZE) //这段空间的大小,以M计},………………………{0,0,}};如例子所示,OEMAddressTable为一个结构数组,每项的第一个成员为虚拟地址,第二个成员为对应的物理地址,最后一个成员为该段空间的大小。

这个数组的最后一项必须全部为0,以示整个数组的结束。

内核启动时会读取这个数组的内容以初始化MMU页表,启用MMU,从尔使程序可以用虚拟地址来访问设备。

当然,OEMAddressTable中所用到的每个物理地址及虚拟地址都需要在头文件中定义,每个BSP 中定义这些值的文件不尽相同,所以,在此不能说明具体在哪个文件,读者朋友可以参考具体BSP的文档及代码。

不连续内存的处理如果内存在物理上是连续的,则OEMAddressTable中只需要一项就可以完成对内存的地址映射。

但如果BSP运行在SDRAM物理上不连续的系统上时,OEMAddressTable中需要更多的项来将SDRAM映射到连续的虚拟地址上,当然也可以将它们映射到不连续的虚拟地址上,但似乎没有理由那么做。

而且,当其物理地址不连续时系统需要做更多的工作。

例如,我有这样一个系统:32M SDRAM,16M FLASH,SDRAM在物理上不连续,被分成了4个8M的内存块,我的SDRAM的使用情况如下图所示:CONFIG。

BIB文件的MEMORY段如下所示:MEMORYRESERVED 80000000 00008000 RESERVEDDRV_GLB 80008000 00001000 RESERVEDCS8900 80010000 00030000 RESERVEDEDBG 80040000 00080000 RESERVEDNK 800C0000 00940000 RAMIMAGERAM 81800000 00800000 RAM在这32M的空间中,BSP保留了前0x80000字节,接下来是NK,它占用了0x940000字节,而且它跨越了两个内存片,这些和其它BSP的设置都没有多大差别,接下来看RAM片,它只占用了最后的8M空间,前面说过,在这种物理内存不连续的系统中,RAM片不能跨越两个物理内存块,所以它被设计成只占用该系统中的最后一个物理内存片,而其它两片则由OEMEnumExtensionDRAM在运行时刻报告给系统,该函数的内容如下:pMemSections[0].dwFlags=0;pMemSections[0].dwStart=(SDRAM_VIRTUAL_MEMORY +0x1000000);pMemSections[0].dwLen=0x800000;pMemSections[1].dwFlags =0;pMemSections[1].dwStart=(SDRAM_VIRTUAL_MEMORY + 0x0A00000);pMemSections[1].dwLen=0x600000;return 2;这样,系统所有的内存都被激活,系统可用内存就变成了8+8+6=24M,可以将RAM定义为这三片中的任意一片,而在OEMEnumExtensionDRAM中报告其它两片。

但把RAM 放在最后一片物理内存上有一个很大的好处,即如果NK变大,例如编译一个DEBUG 版的系统时,这时,只需要将OEMEnumExtensionDRAM中的内容注释掉,CONFIG.BIB 文件不用做任何改动,系统就可运行,只是在MAKEIMG 时会有一个警告说系统包太大,可能无法运行,但实际不会影响系统的执行与稳定性,因为NK之后的那段内存并没有被使用,正好被涨大的系统占用,这在调试时极其方便。

而如果系统物理内存是连续的,那将变得简单的多,还以上面的设置为例,如果这32M的SDRAM是物理上连续的,内存的使用情况就可以表示如下图:所有者系统可用内存都可以定义在RAM片中。

对硬件知识了解不多的朋友请注意:SDRAM是否在物理上连续,与我们的板上有几片SDRAM没有关系,应该向硬件工程师了解SDRAM的地址分布情况。

Understanding Memory Sections in config.bib, boot.bib, and OEMAddressTable in Windows CE 5.0 and 6.0IntroductionWindows CE uses .bib (binary image builder) files to track, among other things, the memory layout of bootloaders as well as OS images. If you’re writing a new BSP, you’ll definitely need a config.bib file for your OS, and you’ll likely need a boot.bib file for your bootloader.Let’s take a few minutes to understand how .bib files relate to memory usage. I t’s going to be muddy at the beginning, but I promise if you stick with me through the end you’ll be glad that you did. Well, maybe you won’t be glad but you’ll know more about .bib files. Let’s get to it!OEMAddressTableBefore we look at the .bib file s themselves, it’s important to understand the OEMAddressTable. This table defines themappings between physical and virtual addresses. For MIPS and SH processors, this table is hard coded into the processor. For x86 and ARM, the mapping is defined in a variable called OEMAddressTable. Since .bib files operate largely on virtual addresses, we need to remember to reference the OEMAddressTable to address any confusion about what is happening at a particular physical address.The table’s layout is quite s imple. Each line creates a mapping of virtual addresses to physical addresses. The syntax is: Base virtual address, base physical address, size. Let’s take an example from the Mainstone BSP:DCD 0x80000000, 0xA0000000, 64 ; MAINSTONEII: SDRAM (64MB).DCD 0x88000000, 0x5C000000, 1 ; BULVERDE: Internal SRAM (64KB bank 0).DCD 0x88100000, 0x58000000, 1 ; BULVERDE: Internal memory PM registers.DCD 0x88200000, 0x4C000000, 1 ; BULVERDE: USB host controller.So in the first line, we are mapping the 64MB of RAM at physical address 0xA0000000 to the virtual address 0x80000000. Since 64MB = 0x04000000 this means that the physicaladdresses 0xA000000-0xA4000000 are now mapped to virtual addresses 0x80000000-0x84000000. Lik ewise, we’ve mapped the USB host controller which resides at physical addresses0x4C000000-0x4C100000 to virtual addresses0x88200000-0x88300000.Inside Windows CE, memory access is virtual by default. So when we access memory at 0x81005000, we’ll be acc essing some physical memory in the Mainstone’s 64MB SDRAM bank. If we access memory at 0x88201000, we’ll be accessing the USB host controller, physically. If we access memory at0x86001000, we’ll get a page fault because this virtual address has no corresponding physical address.Now that we understand the OEMAddressTable, let’s talk about the .bib files.Config.bib – this contains a lot of configuration info for a CE OS image. The MEMORY section is what we’ll focus on – it defines the memory blueprint for the CE image. Here are the important terms:RAMIMAGE – This is the virtual address region that the kernel and any other components you select for your image will be placed in. This can be RAM or linearly addressable flash. Your config.bib file should have exactly one RAMIMAGEsection. It needs to be virtually contiguous, and it needs to be large enough to hold whatever components you’ve selected. RAM – This is the virtual address region of RAM that the kernel can allocate to applications and RAM-based file systems. It needs to be virtually contiguous. (If you need anon-contiguous section, you can allocate another,non-virtually-contiguous section at run-time by implementing the OEMGetExtensionDRAM function, but that’s outside our scope)RESERVED – These are virtual address regions that are set aside –the kernel won’t allocate memory in these addresses and components won’t be placed in these addresses.AUTOSIZE - In the CONFIG section, we have the AUTOSIZE=ON (or OFF) variable. If this variable is on, it will treat the RAMIMAGE and RAM regions as a single region, allocating just enough space to hold all of the components to the RAMIMAGE section and making the rest of the space available as RAM. This is a pretty convenient and easy way to make sure you’re getting maximal use out of your RAM. One thing autosize won’t do is interfere with reserved or unallocated regions.Eboot.bib (sometimes known as boot.bib) – this worksidentically to config.bib, except we’re building a bootloader image as opposed to one with a full kernel. All of the terminology is exactly the same. The only difference is, in the case where we’re not using an MMU in the bootloader (CEPC is an example of these), the addresses will be physical as opposed to virtual. Otherwise, the layout is identical.Bringing it togetherIn almost all cases, the bootloader and OS use the same OEMAddressTable. Thus, they have the same virtual address space.This is especially useful when it comes to RESERVED regions. Since nothing will be allocated or placed in these addresses, only components that refer directly to the address will have access. That means we can use these regions for special buffers (say, DMA) or passing arguments passed in from the bootloader to the OS. It also means that, if you want, you can leave the bootloader in RAM.Keep in mind that while RESERVED means that we won’t allocate/place components in those virtual addresses, by default if an area isn’t specified in a .bib file then we won’tallocate/place in it. This means RESERVED is really more of a comment then anything. However, it is useful in our .bibfiles because it helps us identify the location of special buffers and arguments so that we know not to overwrite them in other modules.An ExampleLet’s take a look at a simplified example in the CEPC BSP: Here’s our OEMAddressTable(platform/common/src/x86/common/startup/startup.asm):_OEMAddressTable:dd 80000000h, 0, 04000000hThis means that we’re mapping physical addresses0x00000000-0x04000000 to virtual addresses0x80000000-0x84000000. That’s 64MB of RAM.Here’s our boot.bib(platform/CEPC/src/bootloader/eboot/boot.bib):MEMORY; Name Start Size Type; ------- -------- -------- ----EBOOT 00130000 00020000 RAMIMAGERAM 00150000 00070000 RAMETHDMA 00200000 00020000 RESERVED Remember the CEPC bootloader uses physical addresses. So in virtual address terms, our bootloader code is living at0x80130000-0x80150000, with RAM available from0x80150000-0x801C0000. We’re reserving a buffer for our Ethernet card from 0x80200000-0x80220000.And a condensed version of config.bib(platform/CEPC/files/config.bib):MEMORY; Name Start Size Type; ------- -------- -------- ----; 64 MB of RAM (note: AUTOSIZE will adjust boundary) NK 80220000 009E0000 RAMIMAGERAM 80C00000 03400000 RAMDMA 80100000 00030000 RESERVED ; Native DMA reserved.BOOTARGS 801FFF00 00000100 RESERVED ; Boot argumentsEDBG_DMA 80200000 00020000 RESERVED ; EDBG DMA bufferThere are several interesting things going on here:First, our OS image (NK) starts at 0x80220000, and RAM resides directly above it. That means we’re not allowing any components or allocation to write below 0x80220000, and thusour bootloader code is protected.Second, note that we have also reserved some regions. The EDBG_DMA corresponds to the same addresses that the bootloader reserved. This way we can make a smooth transition from bootloader to kernel without worrying about the contents of this memory being tampered with.Another region has been reserved from0x80100000-0x80130000. This is very close to the start of our bootloader. If we reserved even a byte more, we would not expect our bootloader to continue to be executable after we boot the OS. However, since the bootloader’s address space isn’t referenced by any region in config.bib, we know that it will remain untouched by the OS. This way we can jump back to the bootloader code during a warm reset, if desired.We’re not required to keep our bootloader in memory, though. We could easily place the bootloader (in boot.bib) at the end of the RAM space (in config.bib). This way after the image was successfully downloaded we could allocate memory over the top of the bootloader and make full use of all of our system RAM. What you don’t want to do is intersect the bootloader with the RAMIMAGE part of config.bib –this means you’ll overwrite the code you’re running to down load, during download!Finally, notice we have a special reserved region called “boot arguments”. If we at the CEPC’s bootloader we will see that it writes explicitly to the (physical) 0x001FFF00-0x002000000. You’ll also notice this isn’t used anywhere i n the boot.bib layout. That means we can be assured it will be untouched (unless, of course, something else in the bootloader writes explicitly to that address range).This is how we pass arguments from the bootloader to the OS –the OS can read directly from 0x801FFF00 and be assured that the kernel won’t tamper with it because it is RESERVED. Technically, we could have indicated that area as RESERVED in the bootloader as well.Hopefully this has given you some insight into .bib memory layouts.update: In response to a comment generated by this entry I'd like to point out that the virtual addresses used in both OEMAddressTable and config.bib must fall between0x80000000 and 0xA0000000 - the kernel virtual memory space reserved for cachable access.。

相关文档
最新文档