]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | Taken from list archive at http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2001-July/004064.html |
2 | ||
3 | Initial definitions | |
4 | ------------------- | |
5 | ||
6 | The following symbol definitions rely on you knowing the translation that | |
7 | __virt_to_phys() does for your machine. This macro converts the passed | |
8 | virtual address to a physical address. Normally, it is simply: | |
9 | ||
10 | phys = virt - PAGE_OFFSET + PHYS_OFFSET | |
11 | ||
12 | ||
13 | Decompressor Symbols | |
14 | -------------------- | |
15 | ||
16 | ZTEXTADDR | |
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 | ||
24 | ZBSSADDR | |
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 | ||
29 | ZRELADDR | |
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 | ||
38 | INITRD_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 | ||
43 | INITRD_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 | ||
49 | PARAMS_PHYS | |
50 | Physical address of the struct param_struct or tag list, giving the | |
51 | kernel various parameters about its execution environment. | |
52 | ||
53 | ||
54 | Kernel Symbols | |
55 | -------------- | |
56 | ||
57 | PHYS_OFFSET | |
58 | Physical start address of the first bank of RAM. | |
59 | ||
60 | PAGE_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 | ||
66 | TASK_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 | ||
82 | TEXTADDR | |
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 | ||
88 | DATAADDR | |
89 | Virtual address for the kernel data segment. Must not be defined | |
90 | when using the decompressor. | |
91 | ||
92 | VMALLOC_START | |
93 | VMALLOC_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 | ||
100 | VMALLOC_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 | ||
106 | Architecture Specific Macros | |
107 | ---------------------------- | |
108 | ||
109 | BOOT_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 | ||
122 | BOOT_PARAMS | |
123 | Same as, and see PARAMS_PHYS. | |
124 | ||
125 | FIXUP(func) | |
126 | Machine specific fixups, run before memory subsystems have been | |
127 | initialised. | |
128 | ||
129 | MAPIO(func) | |
130 | Machine specific function to map IO areas (including the debug | |
131 | region above). | |
132 | ||
133 | INITIRQ(func) | |
134 | Machine specific function to initialise interrupts. | |
135 |