Creating Physical to Virtual Mappings (Windows Embedded CE 6.0)

1/5/2010

After the kernel has defined physical memory, it must create a physical-to-virtual mapping so that all physical memory is accessible to applications and interrupt service routines (ISRs).

The physical-to-virtual mapping is a mapping from the physical address location of the RAM, or other types of memory, to a statically mapped virtual address that is used by applications and ISRs.

In the 4-GB address space, the statically mapped virtual addresses live in the 3-GB range 0x80000000 to 0xc0000000.

Note

There is a limit to the amount of virtual memory that can be mapped: 1024 MB - (4*32 MB) = 896 MB.

On MIPS-based and SHx-based hardware platforms, this mapping is defined by the CPU but is not mapped through the memory management unit (MMU).

On x86 and ARM processors, you must create an OEMAddressTable and pass it to the kernel. Each entry in the table specifies a physical location in memory, the size of the memory, and the static virtual memory address to which to map it.

The static virtual address is specified in the cached memory range and the kernel can then create the uncached address that points to the same physical address.

After the kernel creates the original mapping during the boot process, an application or the OAL can add to the statically mapped virtual address pool by calling CreateStaticMapping or NKCreateStaticMapping. Memory mapped in this way is located in range C400 0000 to E000 0000 and is created as uncached memory only.

See Also

Concepts

Customizing Memory