|
How do I get me one of those jobs?
Ok, they are all addresses in DRAM, on the G45 DDRSDRC0 is located at 0x70000000
During the boot there is a dance AT91Boot loads into SRAM, initializes SDRAM (DDR, DDR2, whatever) It loads uBoot into SDRAM uBoot loads it's environment uBoot loads the uImage into some scratch space in SDRAM uBoot examines uImage for integrity, and moves the compressed kernel to the address specified in the header uBoot calls the entry point in the header Then it expands itself to some other address, starts and sets up the MMU, and executes at some other virtual address (0xC0000000 ?)
The addresses are picked to fit in the memory map as it starts and not overlap or corrupt each other. Where they may be limited by the 32, 64, 256 MB memory used in the system. One however needs to be cognizant that the addresses are used consistently. ie that the address something is compiled to be at, is the same address it is loaded at and executed. If you change the address in one place, you need to change it in ALL places it is used.
I'm using 9260, 9261 and 9G20's, putting the uBoot at 0x020000 in NAND, uImage at 0x200000 in NAND, with the FS at 0x400000 in NAND (ie 2MB max between for uImage). uBoot is loaded at 0x23F00000, uImage is loaded at 0x22000000 and the compressed kernel moved to 0x20008000 by uBoot and executed there. From there it decompresses and runs somewhere else.
The compressed G45 kernel's I've looked at do indeed load at 0x70008000, it's decompressed somewhere else. The change from 0x20008000 of the other boards is due to the address of the primary DDR bank on the G45.
|