Combuster wrote:
- you use qemu's -kernel option. That means qemu does the ELF loading for you and puts the various parts of the binary in the locations they belong. However, on a real ARM execution doesn't automagically begin at _start, but at some fixed address. What/how's the task of the bios performed on real hardware? How do you run your kernel on a real integrator board?
I'm currently working on that, I'm reading through the Integrator-CP docs as write this. AFAICT the top 256KiB of the flash memory is reserved for system boot code. This boot code is mapped to address 0x20000000, and the rest of the flash memory is mapped to 0x24000000.
EDIT: The boot code actually starts at an address depending on the size of the flash memory, e.g if your flash memory is 16MiB, then your boot code will start at 0x24FC0000. (0x24000000 + (16MiB - 256KiB))
Combuster wrote:
- You fix the stack at 64k growing downward. Please comment on that as it will probably end up in your data section once the kernel grows to some size.
Fixed, I've changed the kernel starting address to 0x10000, just above the stack, which has been change to start at 0xFFFC, growing downward. This is subject to further change, as I'm planning on writing the boot code and moving the kernel to 0x24000000.
pcmattman wrote:
You may also want to clarify that the tutorial is for the Integrator/CP boards that QEMU emulates, rather than promoting it as a complete generic ARM barebones.
The title of the thread and article have been, changed to ARM Integrator-CP Bare Bones.