Skip to content

Latest commit

 

History

History
98 lines (74 loc) · 3.48 KB

memory.rst

File metadata and controls

98 lines (74 loc) · 3.48 KB

Kernel Memory Layout on ARM Linux

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

ache flush area. This is used

to flush the whole data

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()

apping region. Addresses provided

will be located here.

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().