1Taken from list archive at http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2001-July/004064.html 2 3Initial definitions 4------------------- 5 6The following symbol definitions rely on you knowing the translation that 7__virt_to_phys() does for your machine. This macro converts the passed 8virtual address to a physical address. Normally, it is simply: 9 10 phys = virt - PAGE_OFFSET + PHYS_OFFSET 11 12 13Decompressor Symbols 14-------------------- 15 16ZTEXTADDR 17 Start address of decompressor. There's no point in talking about 18 virtual or physical addresses here, since the MMU will be off at 19 the time when you call the decompressor code. You normally call 20 the kernel at this address to start it booting. This doesn't have 21 to be located in RAM, it can be in flash or other read-only or 22 read-write addressable medium. 23 24ZBSSADDR 25 Start address of zero-initialised work area for the decompressor. 26 This must be pointing at RAM. The decompressor will zero initialise 27 this for you. Again, the MMU will be off. 28 29ZRELADDR 30 This is the address where the decompressed kernel will be written, 31 and eventually executed. The following constraint must be valid: 32 33 __virt_to_phys(TEXTADDR) == ZRELADDR 34 35 The initial part of the kernel is carefully coded to be position 36 independent. 37 38INITRD_PHYS 39 Physical address to place the initial RAM disk. Only relevant if 40 you are using the bootpImage stuff (which only works on the old 41 struct param_struct). 42 43INITRD_VIRT 44 Virtual address of the initial RAM disk. The following constraint 45 must be valid: 46 47 __virt_to_phys(INITRD_VIRT) == INITRD_PHYS 48 49PARAMS_PHYS 50 Physical address of the struct param_struct or tag list, giving the 51 kernel various parameters about its execution environment. 52 53 54Kernel Symbols 55-------------- 56 57PHYS_OFFSET 58 Physical start address of the first bank of RAM. 59 60PAGE_OFFSET 61 Virtual start address of the first bank of RAM. During the kernel 62 boot phase, virtual address PAGE_OFFSET will be mapped to physical 63 address PHYS_OFFSET, along with any other mappings you supply. 64 This should be the same value as TASK_SIZE. 65 66TASK_SIZE 67 The maximum size of a user process in bytes. Since user space 68 always starts at zero, this is the maximum address that a user 69 process can access+1. The user space stack grows down from this 70 address. 71 72 Any virtual address below TASK_SIZE is deemed to be user process 73 area, and therefore managed dynamically on a process by process 74 basis by the kernel. I'll call this the user segment. 75 76 Anything above TASK_SIZE is common to all processes. I'll call 77 this the kernel segment. 78 79 (In other words, you can't put IO mappings below TASK_SIZE, and 80 hence PAGE_OFFSET). 81 82TEXTADDR 83 Virtual start address of kernel, normally PAGE_OFFSET + 0x8000. 84 This is where the kernel image ends up. With the latest kernels, 85 it must be located at 32768 bytes into a 128MB region. Previous 86 kernels placed a restriction of 256MB here. 87 88DATAADDR 89 Virtual address for the kernel data segment. Must not be defined 90 when using the decompressor. 91 92VMALLOC_START 93VMALLOC_END 94 Virtual addresses bounding the vmalloc() area. There must not be 95 any static mappings in this area; vmalloc will overwrite them. 96 The addresses must also be in the kernel segment (see above). 97 Normally, the vmalloc() area starts VMALLOC_OFFSET bytes above the 98 last virtual RAM address (found using variable high_memory). 99 100VMALLOC_OFFSET 101 Offset normally incorporated into VMALLOC_START to provide a hole 102 between virtual RAM and the vmalloc area. We do this to allow 103 out of bounds memory accesses (eg, something writing off the end 104 of the mapped memory map) to be caught. Normally set to 8MB. 105 106Architecture Specific Macros 107---------------------------- 108 109BOOT_MEM(pram,pio,vio) 110 `pram' specifies the physical start address of RAM. Must always 111 be present, and should be the same as PHYS_OFFSET. 112 113 `pio' is the physical address of an 8MB region containing IO for 114 use with the debugging macros in arch/arm/kernel/debug-armv.S. 115 116 `vio' is the virtual address of the 8MB debugging region. 117 118 It is expected that the debugging region will be re-initialised 119 by the architecture specific code later in the code (via the 120 MAPIO function). 121 122BOOT_PARAMS 123 Same as, and see PARAMS_PHYS. 124 125FIXUP(func) 126 Machine specific fixups, run before memory subsystems have been 127 initialised. 128 129MAPIO(func) 130 Machine specific function to map IO areas (including the debug 131 region above). 132 133INITIRQ(func) 134 Machine specific function to initialise interrupts. 135 136