使用 AXD 调试 MMU 地址映射程序手记(一)
黄振华 aquarius.cublog.cn
实验背景:
使用 PXA270 处理器,目标平台为 XSBASE270(06 年嵌入式竞赛平台)。由于 PXA270
的存储空间分配是相对固定的,例如 0x0 地址开始的 384MB 空间固定为静态存储区,而
SDRAM 空间为 0xa0000000 开始的 256MB 或以 0x80000000 开始的 1GB 地址范围,因此,
如果在对速度以及实时性要求较高的嵌入式应用中,要把应用程序搬到 SDRAM 中运行,
另外还要把中断向量表 Copy 到 SDRAM 中,而中断向量表必须存放在 0 地址处(有些处理
器也可以使用 0xffff0000 高地址中断向量表),这时就必须要对地址空间进行重映射,将
SDRAM 空间映射到 0x0 地址开始的地方,而把 FLASH 空间映射到别处。
进行地址空间或说存储器重映射的办法,一般有如下几种:一 是 设置目标处理器自带的
专用 remap 寄存器,通过硬件逻辑来完成重映射;二是有些处理器设计了 Bank 寄存器,可
以用来修改存储器的起始地址;三 是 带 有 MMU 的处理器,可以使用 MMU 来将物理地址映
射到虚拟地址,完成地址空间的重映射。
对于 PXA270 处理器,可使用 MMU 来进行地址重映射。
实验平台使用 32MB 的 Intel NOR 型 FLASH 存储器,64MB 的 SDRAM。
MMU 的地址映射过程本身并不复杂,但在编程时如果不注意一些细节,加上又要使用
Cache、Write-Buffer、BTB 以及 TLB 时,很容易造成存储器内容一致性上的问题而导致混
乱。建议在编写或改写 MMU 的程序前,一定要对 MMU 的地址映射过程有比较清楚的认识,
对可能影响到 MMU 的操作和其他处理单元如 Cache 等要有一定了解,对 MMU 的控制单元
CP15 的相关处理器也有大概的认识,然后在实际的程序调试过程中,进一步加深理解和认
识。
由于是第一次调试 MMU 的地址映射的程序,应 尽 可 能 地 避免其他干扰因素,使用最简
单的地址映射方式,目的在于清楚理解 MMU 地址映射过程,以及在程序中为 MMU 构建页
表和描述符的过程,实现最简单的 MMU 的地址映射功能。
本实验首先选取一个最简单的已经调试通过的 LED 流水灯的 ADS 工程( 不带 MMU 地
址映射操作), 然后参考一些 bootloader 以及示例程序,往该工程中加入 MMU 地址映射的
功能,使用虚拟地址来点亮 LED。采用一级段描述符进行地址映射,不使用 Cache 和
Write-Buffer。
调试过程:
工程中,设置 ro-base = 0xa0000000,即下载到 SDRAM 中进行调试。预定的地址空间
映射关系如下:
aquarius.cublog.cn
PDF created with pdfFactory Pro trial version www.pdffactory.com
评论0