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