wince存储与地址映射技术
来源:互联网 发布:nodejs json 编辑:程序博客网 时间:2024/06/04 18:09
wince存储与地址映射技术
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
所有进程共享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.
1.如果是在bootloader中访问设备寄存器,可以直接操作物理地址。
2.wince启动后,硬件上ARM和X86体系的处理器启动了MMU,操作系统只能访问到虚拟地址,不能直接操作物理内存了。但是如果是X86的CPU,由于它的外设I/O端口和存储器空间分开编址,可以直接嵌入汇编或者使用宏read_port_xxx,write_port_xxx来读写设备寄存器的物理地址。
3.wince软件结构里对应MMU的是一个名为OEMAddressTable的数据结构(源文件oeminit.asm中),其中建立了物理地址和虚拟地址的静态映射关系,也可以在其中改动系统所能识别物理内存的大小,以支持大内存。
4.我们也可以在wince启动后调用CreateStaticMapping和NKCreateStaticMapping来实现OEMAddressTable中的这种物理地址和虚拟地址的静态映射关系。
5.建立了静态映射关系的虚拟地址只能由内核模式下的程序来操作,例如 ISR。除非你在定制系统时,选择了full kernal mode,使所有程序都运行在完全内核模式下,这将导致系统不稳定。
6.如果要在驱动程序中访问设备寄存器,必须建立动态虚拟地址映射,可以调用MmmapIoSpace函数来实现,或者通过VirtualAlloc和VirtualCopy函数来实现。其实MmmapIoSpace内部就调用了后者。
7.在驱动中访问虚拟地址时,必须是非缓存段(位于0xA0000000 到 0xBFFFFFFF )。
8.使用VirtualCopy函数映射物理地址时,其lpvSrc参数必须右移8位,且相应的fdwProtect参数必须带page_physical。
9.如果是ARM体系的处理器,访问挂在系统总线上的设备寄存器前,必须先把总线地址转化成CPU的地址,通过HalTranslateBusAddress实现两种物理地址的变换,然后再调用MmmapIoSpace函数作虚实地址的转换。
也可以使用 TransBusAddrToVirtual ()直接把总线上的地址转化成系统的虚拟地址。 在一般的应用程序中访问 I/O 是访问它的缓存段虚拟地址,而驱动中必须访问无缓存段虚拟地址。简单来说无缓存段虚拟地址 = 缓存段虚拟地址 +0x20000000 。
总结起来,如果是 wince 内核(如HAL)访问外部 I/O ,只需要在 OEMAddressTable 中定义物理地址到虚拟地址间的映射关系就可以了;如果是应用程序或者驱动要访问 I/O ,要做的工作包括: 1 。在 CPU 物理地址和虚拟地址间做一个动态映射, 2 。对虚拟地址进行操作。
wince5.0下可以使用CreateBusAccessHandle(总线注册表路径)+BusTransBusAddrToVirtual来实现总线物理地址到系统虚拟地址的直接变换。
0
上一篇:TOC结构体
下一篇:WINCE下string使用注意
相关热门文章
- 欢迎liuchangyin在ChinaUnix博...
- 欢迎bybvlucn在ChinaUnix博客...
- 欢迎scarlets26在ChinaUnix博...
- 注意教学实施中关注学生...
- 3、模板建站没法
- 10种启动故障解决方法(转)...
- 关于自动弹出网页的解决方法...
- Auto CAD 2007中文版 迅雷免费...
- 出现“high definition audio...
- 全国计算机一级考试试题...
- 如何编写一个C程序实现将字符...
- C程序能不能在main函数之前调...
- 看一个程序调用了哪些动态库用...
- 回复不了你啊,咋,威望值不够...
- mysql的medium.cnf在哪里?...
给主人留下些什么吧!~~
jiegekaoyan2010-01-19 11:12:24
写的好,看了真是受益匪浅
回复 | 举报
chinaunix网友2008-12-23 09:55:12
顶个
回复 | 举报
chinaunix网友2008-12-05 17:09:06
这么好的WZ看了很有收获,光看不顶太不仁道啦,版主好样的!
回复 | 举报
chinaunix网友2008-12-05 17:08:54
这么好的WZ看了很有收获,光看不顶太不仁道啦,版主好样的!
回复 | 举报
评论热议
- wince存储与地址映射技术
- wince存储与地址映射技术
- wince存储与地址映射技术
- Windows CE的存储与地址映射技术学习
- wince地址映射过程
- wince地址映射过程
- wince的存储器操作与地址映射知识点滴
- WinCE内存映射文件技术
- UrlRewrite、地址映射技术
- UrlRewrite、地址映射技术
- UrlRewrite、地址映射技术
- UrlRewrite、地址映射技术
- UrlRewrite、地址映射技术
- UrlRewrite、地址映射技术
- UrlRewrite、地址映射技术
- UrlRewrite、地址映射技术
- UrlRewrite、地址映射技术
- WinCE CEDDK之地址映射函数
- 建立根文件系统目录
- Wince bootloader和内核定制
- bootloader中USB下载的简单分析
- 关于wince文件夹下文章的声明
- TOC结构体
- wince存储与地址映射技术
- WINCE下string使用注意
- WINCE下消息传递和消息队列
- 在Windows CE增加自定义中断处理
- wince下Gpio 驱动程序
- Wince下面添加应用程序,并且自动运行
- WINCE下三串口驱动程序
- Reboooot
- 使WINCE支持INI配置文件
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
中材人工晶体研究院
中材国际怎么样
中材水泥招标网
中材水泥厂
中材地暖管
中材节能有限公司
中材国际公司
中材国际分析
中材国际600970
中材国际行情
中材科技怎么样
中材国际股吧
中材国际发行价
中材国际停牌原因
股票中材科技
中材国际股票吧
中材国际建设
中材国际有限公司
中材集团有限公司
中材集团股票代码
中材国际是蓝筹股吗
中材招标网首页
中材招标网
中材国际工程股份有限公司
中材科技行情
中材科技总裁
中材科技 增发
中材水泥公司
中材下水管
中材科技股票吧
中材国际公告
中材国际 环保
中材股份股票
中材国际装备
金风科技 中材科技
中材牌水泥
中材科技股份
中材国际股份
中材国际招聘
中材汉江水泥
中材科技刘颖