136 lines
		
	
	
	
		
			4.4 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			136 lines
		
	
	
	
		
			4.4 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
|   | 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. | ||
|  | 
 |