Russell King <rmk@arm.linux.org.uk>
November 17, 2005 (2.6.15)
This document describes the virtual memory layout which the Linux kernel uses for ARM processors. It indicates which regions are free for platforms to use, and which are used by generic code.
The ARM CPU is capable of addressing a maximum of 4GB virtual memory space, and this must be shared between user space processes, the kernel, and hardware devices.
As the ARM architecture matures, it becomes necessary to reserve certain regions of VM space for use for new facilities; therefore this document may reserve more VM space over time.
Start End | Use | |
---|---|---|
ffff8000 ffff |
ffff copy_use For SA11xx and X setup a minicach |
r_page / clear_user_page use. scale, this is used to e mapping. |
ffff4000 ffff |
ffff cache al |
iasing on ARMv6 and later CPUs. |
ffff1000 ffff |
7fff Reserved Platforms must n |
. ot use this address range. |
ffff0000 ffff |
0fff CPU vect The CPU vectors CPU supports vec register V bit.) |
or page. are mapped here if the tor relocation (control |
fffe0000 fffe |
ffff XScale c in proc-xscale.S cache. (XScale d |
oes not have TCM.) |
fffe8000 fffe |
ffff DTCM map DTCM mounted ins |
ping area for platforms with ide the CPU. |
fffe0000 fffe |
7fff ITCM map ITCM mounted ins |
ping area for platforms with ide the CPU. |
ffc80000 ffef |
ffff Fixmap m by fix_to_virt() |
|
ffc00000 ffc7 |
ffff Guard re |
gion |
ff800000 ffbf |
ffff Permanen firmware provide |
t, fixed read-only mapping of the d DT blob |
fee00000 feff |
ffff Mapping mapping within t |
of PCI I/O space. This is a static he vmalloc space. |
VMALLOC_START |
VMALLOC_END-1 Memory returned be dynamically p Machine specific located here thr VMALLOC_START is of the high_memo is equal to 0xff |
vmalloc() / ioremap() space. by vmalloc/ioremap will laced in this region. static mappings are also ough iotable_init(). based upon the value ry variable, and VMALLOC_END 800000. |
PAGE_OFFSET high |
_memory-1 Kern This maps the pl maps all platfor |
el direct-mapped RAM region. atforms RAM, and typically m RAM in a 1:1 relationship. |
PKMAP_BASE PAGE |
_OFFSET-1 Perm One way of mappi space. |
anent kernel mappings ng HIGHMEM pages into kernel |
MODULES_VADDR |
MODULES_END-1 Kernel modules i placed here usin |
Kernel module space nserted via insmod are g dynamic mappings. |
00001000 TASK |
_SIZE-1 User spa Per-thread mappi the mmap() syste |
ce mappings ngs are placed here via m call. |
00000000 0000 |
0fff CPU vect CPUs which do no place their vect dereferences by space are also c |
or page / null pointer trap t support vector remapping or page here. NULL pointer both the kernel and user aught via this mapping. |
Please note that mappings which collide with the above areas may result in a non-bootable kernel, or may cause the kernel to (eventually) panic at run time.
Since future CPUs may impact the kernel mapping layout, user programs must not access any memory which is not mapped inside their 0x0001000 to TASK_SIZE address range. If they wish to access these areas, they must set up their own mappings using open() and mmap().