Where Grub loads your kernel.

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
rexlunae

Where Grub loads your kernel.

Post by rexlunae »

Is there a good way to know what memory your kernel image is using after grub loads it?
carbonBased

RE:Where Grub loads your kernel.

Post by carbonBased »

You should already know!

You have to tell GRUB where to load your kernel.  It's in the multiboot header you defined in order to let GRUB load your kernel.

That's the starting address, anyway.

If, by chance, you mean, how to find out how _large_ your kernel is, there's at least a few ways.

In my case, I define the whole multiboot header, with AOUT_KLUDGE set.  Even though I am using ELF, I included the kludge under the chance that I sometime in the future I use a different object/executable format.

I used a linker script to define these values, and you could to.  Just define an address at the end of the bss section, and that will be the end, or size, of your kernel.

GRUB will also include a symbol table for your AOUT or ELF binary, which can possibly be used to find the size of your kernel (I have investigated this, but I'm sure it's possible).

Also, if you plan on using kernel modules, you can get the absolute end of kernel used memory but checking the address of the last kernel module, and adding it's length.  GRUB loads the kernel modules sequentially after the kernel, and therefore the last kernel module will be the last address used by the kernel.

Cheers,
Jeff
rexlunae

RE:Where Grub loads your kernel.

Post by rexlunae »

Thanks for responding to my question.

I have to say to myself RTFM.  Upon reviewing the documentation I have on multiboot, I realized that for ELF, information on section headers is passed in the boot struct.  I thought this was just the symbol table at first, but that is only for a.out.
Post Reply