Specifications
This is the Title of the Book, eMatter Edition
Copyright © 2005 O’Reilly & Associates, Inc. All rights reserved.
414
|
Chapter 15: Memory Mapping and DMA
physical addresses differ only by a constant offset. Logical addresses use the
hardware’s native pointer size and, therefore, may be unable to address all of
physical memory on heavily equipped 32-bit systems. Logical addresses are usu-
ally stored in variables of type
unsigned long or void *. Memory returned from
kmalloc has a kernel logical address.
Kernel virtual addresses
Kernel virtual addresses are similar to logical addresses in that they are a map-
ping from a kernel-space address to a physical address. Kernel virtual addresses
do not necessarily have the linear, one-to-one mapping to physical addresses that
characterize the logical address space, however. All logical addresses are kernel
virtual addresses, but many kernel virtual addresses are not logical addresses.
For example, memory allocated by vmalloc has a virtual address (but no direct
physical mapping). The kmap function (described later in this chapter) also
returns virtual addresses. Virtual addresses are usually stored in pointer variables.
If you have a logical address, the macro __pa( ) (defined in <asm/page.h>) returns its
associated physical address. Physical addresses can be mapped back to logical
addresses with __va( ), but only for low-memory pages.
Figure 15-1. Address types used in Linux
kernel virtual
addresses
kernel logical
addresses
high memory
low memory
user process
user process
Key
physical memory address space
page mapping
,ch15.13676 Page 414 Friday, January 21, 2005 11:04 AM