|
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)之上。应该属于高端映射区。 |
|