mips地址空间.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
mips地址空间

就是一个虚拟地址,一个物理地址。一般bootloader会连接到bfc00000,因为在MIPS上运行的程序都使用虚拟地址,而板子上的boot flash一般会被映射到物理地址1fc00000,这样上电时直接取flash的第一条指令,也就是bootloader的第一条指令。嵌入式u-boot和mips地址空间1.一个家用路由器的u-boot??address space:?? memstart = 0 memsize = 0? flashstart = 0xBF000000, flashsize = 0?images in flash:?? u-boot:0xBF000000?? ecos: 0xBF050000?? linux: 0xBF0C0000??u-boot启动信息:?????分析:?? 1.内存地址范围从0始,到0束。?? 2.u-boot被load到内存地址0x81fc0000.?? 3.启动流程:AP83上电后首先运行flash上面的cpu/mips/start.S这个汇编程序,并没有进入内存。接着,start.S把u-boot的代码段全部copy到内存地址0x81fc0000,并从该地址开始转入内存运行。2.MIPS的地址空间???1.综述:?? 一般嵌入式的hardware有两部分存贮器,一个是RAM,另一个是ROM(flash). flash用来存放code,包括操作系统本身,当然也包括bootloader(u-boot). RAM就是相当于PC的内存了,比flash速度快的多,但掉电后会丢失所有数据,所以用作动态内存。???2.MIPS的地址空间:?? 32位mips的地址空间跟PC一样,是2^32=4G字节。对于嵌入式设备来说,所有的设备的地址都存在于一个地址空间。如下图:flash的地址空间一般放在Kseg1段,而RAM的地址空间一般则放在kseg0段。???MIPS CPU地址空间简介:注:首先需要明确的是CPU物理地址空间不仅仅包括RAM物理内存的空间,还包括CPU内部的一些总线、寄存器的编址。一个MIPS CPU可以运行在两种优先级别上,用户态和核心态。MIPS CPU从核心态到用户态的变化并不是CPU工作不一样,而是对于有些操作认为是非法的。在用户态,任何一个程序地址的首位是1的话,这个地址是非法的,对其存取将会导致异常处理。另外,在用户态下,一些特殊的指令将会导致CPU进入异常状态。在32位CPU下,程序地址空间划分为4个大区域。每个区域有一个传统的名字。对于在这些区域的地址,各自有不同的属性:kuseg: 虚拟空间0x0000 0000 - 0x7FFF FFFF (低端2G):这些地址是用户态可用的地址。在有MMU的机器里,这些地址将一概被MMU作转换,除非MMU的设置被建立好,否则这2G地址是不可用的。对于没有MMU的机器,存取这2G地址的方法依具体机器相关,你的CPU具体厂商提供的手册将会告诉你关于这方面的信息。如果想要你的代码在有或没有 MMU的MIPS处理器之间有兼容性,尽量避免这块区域的存取。kseg0: 虚拟空间0x8000 0000 - 0x9FFF FFFF(512M): 这些地址映射到物理地址简单的通过把最高位清零,然后把它们映射到物理地址低段512M(0x0000 0000 - 0x1FFF FFFF)。因为这种映射是很简单的,通常称之为“非转换的”地址区域。几乎全部的对这段地址的存取都会通过快速缓存(cache)。因此在cache设置好之前,不能随便使用这段地址。通常一个没有MMU的系统会使用这段地址作为其绝大多数程序和数据的存放位置。对于有MMU的系统,操作系统核心会存放在这个区域。kseg1: 虚拟空间0xA000 0000 - 0xBFFF FFFF(512M): 这些地址通过把最高3位清零的方法来映射到相应的物理地址上,与kseg0映射的物理地址一样。但kseg1是非cache存取的。kseg1是唯一的在系统重启时能正常工作的地址空间。这也是为什么重新启动时的入口向量是0xBFC0 0000。这个向量相应的物理地址是0x1FC0 0000。你将使用这段地址空间去存取你的初始化ROM。大多数人在这段空间使用I/O寄存器。如果你的硬件工程师要把这段地址空间映射到非低段512M 空间,你得劝说他。kseg2: 虚拟空间0xC000 0000 - 0xFFFF FFFF (1G): 这段地址空间只能在核心态下使用并且要经过MMU的转换。在MMU设置好之前,不能存取这段区域。除非你在写一个真正的操作系统,一般来说你不需要使用这段地址空间。综上可以看到,MIPS32 C

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档