mm/init.c

Francois-Rene Rideau fare@tunes.org
Sun May 2 18:48:05 CEST 2004


On Sun, May 02, 2004 at 06:03:25PM +0200, Oleg Gusev wrote:
> It's about the reserved memory.
What about it?

> If it is 
> //galmasi way 
> then the kernel works.
> If it is 
> //fare way
> the kernel works.

> If i put 0x100000 instead of 0x200000, the kernel can't boot.
Where would you put that?
Have you also changed the j820 TEXTADDR in arch/arm/Makefile?
The galmasi way makes all memory from 0xc000000 to there unused by linux.
The fare way makes just the page @ 0xc005c000 unused;
but if you disable the USB soon enough,
even this shouldn't be needed, should it?

> Can you write a README, where and what is loaded and
> executed and in what sequence ? IMHO we should make
> this more transparent.

As far as I understand, the boot sequence is as follows:
(1) hpcboot maps everything to where is specified in
	arch/arm/boot/Makefile
	ZTEXTADDR=0xc0800000
 that is, at 8MiB in RAM bank 0
(2) the code in arch/arm/boot/j820/init.S does some initialization
 and chains into arch/arm/boot/j820/compressed/head.S
 which does more initializations, decompressed the kernel into
 the location in arch/arm/Makefile ZRELADDR=0xc0208000
 (with the constraint that ZRELADDR==virt_to_phys(TEXTADDR),
 with trivial mapping in our case)
 (2MiB+128KiB into RAM bank 0 -- notice the required 128KiB alignment)
 Also in arch/arm/boot/Makefile are other parameters:
 ZRELADDR=0xc0208000 where the uncompressor uncompresses the image
 ZTEXTADDR=0xc0800000 where the uncompressor relocates itself
 ZBSSADDR=0xc0600000 where the uncompressor puts temporary stuff
 PARAMS_PHYS=0xc0200100 where the bootloader stores kernel parameter
			(in our case, it's actually j820/init.S that does)
 INITRD_PHYS=0xc0A00000 physical address where to relocate initrd
 INITRD_VIRT=0xc0A00000 virtual address where relocated initrd is seen
(3) the main arch-specific kernel is initialized from
	arch/arm/kernel/head-armv.S
 as now available on TEXTADDR (or actually ZRELADDR until vm is setup).
 somewhere around there, j820 fixup is called,
 some basic kernel parameters are parsed,
 the virtual memory is setup (including our 5c080 trick if any),
 the I/O subsystem is setup,
 j820 initialization is called,
 and a whole slew of low-level initializations are done.
(4) the main arch-undep kernel is initialized from
	init/main.c
 which mounts the initrd, rootfs, runs init, etc.

[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ]
[  TUNES project for a Free Reflective Computing System  | http://tunes.org  ]
Having good original ideas is no excuse for not knowing good established ideas.
Your supra-fast turbo engine won't be much good when attached to square wheels.


More information about the Jornada820 mailing list