龙芯2F地址空间讲解

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

江苏中科龙梦科技有限公司

龙芯2F地址空间讲解

修 订 记 录

项 次 修订日期版 本修订內容修订者 审 核

1 2009‐05‐200.1 初版发行胡洪兵

2 2009‐11‐200.2 添加地址

说明,修

改部分图

胡洪兵

DISCLAIMER

THIS DOCUMENTATION IS PROVIDED FOR USE WITH LEMOTE PRODUCTS. NO LICENSE TO LEMOTE PROPERTY RIGHTS IS GRANTED. LEMOTE ASSUMES NO LIABILITY, PROVIDES NO WARRANTY EITHER EXPRESSED OR IMPLIED RELATING TO THE USAGE, OR INTELLECTUAL PROPERTY RIGHT INFRINGEMENT EXCEPT AS PROVIDED FOR BY LEMOTE TERMS AND CONDITIONS OF SALE. LEMOTE PRODUCTS ARE NOT DESIGNED FOR AND SHOULD NOT BE USED IN ANY MEDICAL OR LIFE SUSTAINING OR SUPPORTING EQUIPMENT.

ALL INFORMATION IN THIS DOCUMENT SHOULD BE TREATED AS PRELIMINARY. LEMOTE MAY MAKE CHANGES TO THIS DOCUMENT WITHOUT NOTICE. ANYONE RELYING ON THIS DOCUMENTATION SHOULD CONTACT LEMOTE FOR THE CURRENT DOCUMENTATION AND ERRATA.

JIANGSU LEMOTE TECHNOLOGY CORPORATION LIMITED

MENGLAN INDUSTRIAL PARK,YUSHAN,CHANGSHU CITY,JIANGSU PROVINCE,CHINA

Tel: 0512‐52308661

Fax: 0512‐52308688

Http: //

目录

1地址空间说明 (4)

1.1虚拟地址空间 (4)

1.2物理地址空间 (7)

1.3总线地址空间 (8)

2 地址空间的转换 (9)

2.1 CPU到DDR2以及PCI/LocalIO的地址转换 (10)

2.1.1 CPU到DDR2以及PCI/LocalIO的详细说明 (10)

2.1.1.1 CPU内部地址转换 (10)

2.1.1.2从Crossbar到DDR2以及IO Controller (12)

2.1.1.3 IO Controller内部地址路由 (14)

2.1.2例子说明 (15)

2.2 PCI设备到DDR2的地址转换 (17)

2.2.1设备到DDR2的详细过程 (17)

2.2.1.1设备到Crossbar (17)

2.2.1.2 Crossbar到DDR2 (19)

本文档介绍了龙芯平台的地址空间包括虚拟地址空间,物理地址空间,总线地址空间以及他们之间的转换。

1地址空间说明

1.1虚拟地址空间

虚拟地址空间也叫程序地址空间,包括了用户虚拟地址空间以及内核虚拟地址空间。该地址段在程序编译的时候由编译器和链接脚本进行安排,程序运行时加载器会对这些地址进行重定位。objdump 这类工具可以查看这些信息。

用户虚拟地址:这是在用户空间程序所能看到的常规地址。用户地址或者是32位的,或者是64位的,这取决与硬件的体系结构以及软件配置。每个进程都有自己的虚拟地址空间。在loongosn 平台上如果使用32位内核只有最大2G 的用户地址空间,如果使用64位内核以及N64这样的系统可以支持高达1T 的用户地址空间。

内核虚拟地址:将内核空间的地址映射到物理地址上,内核虚拟地址与物理地址的映射不必是线性的和一对一的。在内核虚拟地址中有一类内核逻辑地址组成的内核的常规地址空间。该地址映射了部分(或者全部)内存,并经常被视为物理地址。在大多数体系架构中,逻辑地址和其关联的物理地址的不同,仅仅是在它们之间存在一个固定的偏移量。逻辑地址使用使用硬件内建的指针大小,因此在安装了大量内存的32位系统中,它无法寻址全部的物理地址。在内核中使用kmalloc 返回的内存就是内核逻辑地址,而使用kmap ,vmalloc 返回的是虚拟地址。

32bit 下,mips 的虚拟地址空间如下图所示

0x0000 000000x80000000

0xA0000000

0xC0000000

0xFFFF FFFF

图三

在mips 平台上,在不同的工作模式下具有不同的可使用的虚拟地址空间,工作模式由status 寄存器来确定, 为用户态, 管理态,核心态

程序地址空间划分为4个大区域。每个区域有一个传统的名字。对於在这些区域的地址,各自有不同的属性:

kuseg: 0×000 0000 - 0×7FFF FFFF (低端2G):这些地址是用户态可用的地址即所谓的用户虚拟地址空间。在有MMU的机器里,这些地址将一概被MMU作转换。除非MMU的设置被建

立好,这2G地址是不可用的。对於没有MMU的机器,存取这2G地址的后依具体机器

相关。你的CPU具体厂商提供的手册将会告诉你关于这方面的信息。如果想要你的代码

在有或没有MMU的MIPS处理器之间有兼容性,尽量避免这块区域的存取。

kseg0: 0×8000 0000 - 0×9FFF FFFF(512M): 这些地址映射到物理地址简单的通过把最三位清零,然后把它们映射到物理地址低段512M(0×0000 0000 - 0×1FFF FFFF)。因为这种映射是很简

单的,通常称之为“非转换的“地址区域。这段地址的存取都会通过快速缓存(cache)。因此

在cache设置好之前,不能随便使用这段地址。通常一个没有MMU的系统会使用这段地

址作为其绝大多数程序和数据的存放位置。对於有MMU的系统,操作系统核心会存放在

这个区域。

kseg1: 0xA000 0000 - 0xBFFF FFFF(512M): 这些地址通过把最高三位清零的方法来映射到相应的物理地址上,与kseg0映射的物理地址一样。但kseg1是非cache存取的。

kseg1是唯一的在系统重启时能正常工作的地址空间。这也是为什么重新启动时的入口向

量是0xBFC0 0000。这个向量相应的物理地址是0×1FC0 0000。你将使用这段地址空间去

存取你的初始化ROM。大多数人在这段空间使用I/O寄存器。如果你的硬件工程师要把

这段地址空间映射到非低段512M空间,你得劝说他。

kseg2: 0xC000 0000 - 0xFFFF FFFF (1G): 这段地址空间只能在核心态下使用并且要经过MMU 的转换。在MMU设置好之前,不能存取这段区域。除非你在写一个真正的操作系统,

一般来说你不需要使用这段地址空间。模块的加载使用到这个地址范围。

能够看到kseg0与kseg1转换后刚好会重合,在这里将低256M物理地址空间划分给kseg0来映射内存,高256M空间划分给kseg1来映射设备。也就是虚拟地址0x8000 0000-0x8fff ffff用于内存的访问,而0xb000 0000-0xbfff ffff用于设备访问。

相关文档
最新文档