| Taken from list archive at http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2001-July/004064.html | |
| Initial definitions | |
| ------------------- | |
| The following symbol definitions rely on you knowing the translation that | |
| __virt_to_phys() does for your machine. This macro converts the passed | |
| virtual address to a physical address. Normally, it is simply: | |
| phys = virt - PAGE_OFFSET + PHYS_OFFSET | |
| Decompressor Symbols | |
| -------------------- | |
| ZTEXTADDR | |
| Start address of decompressor. There's no point in talking about | |
| virtual or physical addresses here, since the MMU will be off at | |
| the time when you call the decompressor code. You normally call | |
| the kernel at this address to start it booting. This doesn't have | |
| to be located in RAM, it can be in flash or other read-only or | |
| read-write addressable medium. | |
| ZBSSADDR | |
| Start address of zero-initialised work area for the decompressor. | |
| This must be pointing at RAM. The decompressor will zero initialise | |
| this for you. Again, the MMU will be off. | |
| ZRELADDR | |
| This is the address where the decompressed kernel will be written, | |
| and eventually executed. The following constraint must be valid: | |
| __virt_to_phys(TEXTADDR) == ZRELADDR | |
| The initial part of the kernel is carefully coded to be position | |
| independent. | |
| INITRD_PHYS | |
| Physical address to place the initial RAM disk. Only relevant if | |
| you are using the bootpImage stuff (which only works on the old | |
| struct param_struct). | |
| INITRD_VIRT | |
| Virtual address of the initial RAM disk. The following constraint | |
| must be valid: | |
| __virt_to_phys(INITRD_VIRT) == INITRD_PHYS | |
| PARAMS_PHYS | |
| Physical address of the struct param_struct or tag list, giving the | |
| kernel various parameters about its execution environment. | |
| Kernel Symbols | |
| -------------- | |
| PHYS_OFFSET | |
| Physical start address of the first bank of RAM. | |
| PAGE_OFFSET | |
| Virtual start address of the first bank of RAM. During the kernel | |
| boot phase, virtual address PAGE_OFFSET will be mapped to physical | |
| address PHYS_OFFSET, along with any other mappings you supply. | |
| This should be the same value as TASK_SIZE. | |
| TASK_SIZE | |
| The maximum size of a user process in bytes. Since user space | |
| always starts at zero, this is the maximum address that a user | |
| process can access+1. The user space stack grows down from this | |
| address. | |
| Any virtual address below TASK_SIZE is deemed to be user process | |
| area, and therefore managed dynamically on a process by process | |
| basis by the kernel. I'll call this the user segment. | |
| Anything above TASK_SIZE is common to all processes. I'll call | |
| this the kernel segment. | |
| (In other words, you can't put IO mappings below TASK_SIZE, and | |
| hence PAGE_OFFSET). | |
| TEXTADDR | |
| Virtual start address of kernel, normally PAGE_OFFSET + 0x8000. | |
| This is where the kernel image ends up. With the latest kernels, | |
| it must be located at 32768 bytes into a 128MB region. Previous | |
| kernels placed a restriction of 256MB here. | |
| DATAADDR | |
| Virtual address for the kernel data segment. Must not be defined | |
| when using the decompressor. | |
| VMALLOC_START | |
| VMALLOC_END | |
| Virtual addresses bounding the vmalloc() area. There must not be | |
| any static mappings in this area; vmalloc will overwrite them. | |
| The addresses must also be in the kernel segment (see above). | |
| Normally, the vmalloc() area starts VMALLOC_OFFSET bytes above the | |
| last virtual RAM address (found using variable high_memory). | |
| VMALLOC_OFFSET | |
| Offset normally incorporated into VMALLOC_START to provide a hole | |
| between virtual RAM and the vmalloc area. We do this to allow | |
| out of bounds memory accesses (eg, something writing off the end | |
| of the mapped memory map) to be caught. Normally set to 8MB. | |
| Architecture Specific Macros | |
| ---------------------------- | |
| BOOT_MEM(pram,pio,vio) | |
| `pram' specifies the physical start address of RAM. Must always | |
| be present, and should be the same as PHYS_OFFSET. | |
| `pio' is the physical address of an 8MB region containing IO for | |
| use with the debugging macros in arch/arm/kernel/debug-armv.S. | |
| `vio' is the virtual address of the 8MB debugging region. | |
| It is expected that the debugging region will be re-initialised | |
| by the architecture specific code later in the code (via the | |
| MAPIO function). | |
| BOOT_PARAMS | |
| Same as, and see PARAMS_PHYS. | |
| FIXUP(func) | |
| Machine specific fixups, run before memory subsystems have been | |
| initialised. | |
| MAPIO(func) | |
| Machine specific function to map IO areas (including the debug | |
| region above). | |
| INITIRQ(func) | |
| Machine specific function to initialise interrupts. | |