天嵌 ARM开发社区

 找回密码
 注册
查看: 2521|回复: 1

Liunx内存映射学习及问题

[复制链接]
gilbert0571 发表于 2010-3-14 10:41:36 | 显示全部楼层 |阅读模式
1.使用的源代码版本为linux 2.6.30.4,来源:官网.

2.空间划分:用户空间和内核空间。

2.1用户空间:
(1)虚拟地址范围:0~PAGE_OFFSET.
在我的TQ2440内核源码2.6.30.4中:
<asm/memory.h>
#define PAGE_OFFSET                UL(CONFIG_PAGE_OFFSET)
#define CONFIG_PAGE_OFFSET  0xC0000000
#define UL(x)     _AC(x, UL)
#define _AC(X,Y)         __AC(X,Y)
#define __AC(X,Y)        (X##Y)
展开得到: PAGE_OFFSET = UL(0xC0000000)= 0xC0000000 UL = 3G
因此 用户空间地址范围: 0 ~ 3G

2.2. 内核空间(PAGE_OFFSET~4G)
内核空间从地址到高地址划分为划分为:
(1)        物理映射区---(2)下隔离带—(3)vmalloc虚拟内存分配区---(4)上隔离带---(5)高端映射区--(6)专用页面映射区---(7)保留区

保留区 : FIXADDR_TOP ~ 4G
在<asm/fixmap.h>中有:
#define  FIXADDR_TOP                0xfffe0000UL
因此保留区地址范围: 0xfffe0000UL ~ 4G 共128K
/*
* Nothing too fancy for now.
*
* On ARM we already have well known fixed virtual addresses imposed by
* the architecture such as the vector page which is located at 0xffff0000,
* therefore a second level page table is already allocated covering
* 0xfff00000 upwards.
*
* The cache flushing code in proc-xscale.S uses the virtual area between
* 0xfffe0000 and 0xfffeffff.
*/
由此可知 在保留区的用途。
(1)0xfff00000 之上有2级页表,在0xffff0000开始出有中断向量表(启动时有管脚决定向量表在0x0处还是0xffff0000处)
( 2)缓冲冲洗代码(proc-xscale.S中)使用地址0xfffe0000 ~ 0xfffeffff。

专用页面映射区:FIXADDR_START ~ FIXADDR_TOP
#define FIXADDR_START                0xfff00000UL
#define FIXADDR_TOP                0xfffe0000UL
因此保留区地址范围: 0xfff00000UL ~ 0xfffe0000UL 共896K

高端映射区:
<asm/Highmem.h>
#define PKMAP_BASE                (PAGE_OFFSET - PMD_SIZE)
  这里有点问题按照上面的定义高端映射区的底部已经在用户空间了(<PAGE_OFFSET)!!!.要是系统配置了高端内存可能就要出问题了!(有谁知道TQ2440有没配置,在哪配置告诉我一下.)

物理映射区: PAGE_OFFSET ~ high_memory
变量high_memory在系统启动时确定,板子的SDRAM=64M.
所以物理映射区:3G ~ 3G+64M

Vmalooc 映射区: VMALLOC_START ~VMALLOC_END
<asm/pgtable.h>
#define  VMALLOC_OFFSET                (8*1024*1024)
#define  VMALLOC_START                (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
(arch/arm/plat-s3c/include/mach/vmalloc.h)
#define VMALLOC_END          (0xE0000000)
所以Vmalooc 映射区: 3G+72M ~ 3G+512M

总结:系统内存64M
物理映射区(可变):            3G ~ 3G+64M                                     共64M
下隔离带:                       3G+64M ~ 3G+72M                             共8M
Vmalooc 映射区(可变):    3G+72M ~ 3G+512M                           共440M
高端映射区:             ????                                                    ???
上隔离带:                        ???                                                      ???
专用页面映射区(固定):    3G+1023M ~ 3G+1023M+896K           共896K
保留区(固定):                 3G+1023M+896K ~ 4G                         共128K

注意:所有寄存器被静态映射到0xF4000000(3G+832M)之上。应该属于高端映射区。
 楼主| gilbert0571 发表于 2010-3-14 10:43:50 | 显示全部楼层
管理员帮忙解答一下疑问吧~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-20 00:44 , Processed in 1.015625 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表