About main() in bootloader

dsr at tao.merseine.nu dsr at tao.merseine.nu
Tue Nov 30 08:47:04 EST 2004


On Tue, Nov 30, 2004 at 09:17:24PM +0800, George Wong wrote:
> 
>  
> I am studying bootloaders in embedded system.
> Generally speaking, there are two stages in a bootloader.
> The first stage, which is usually written in assembler, does some necessary settings.
> The second stage, which is usually written in C, provides more complex functions,such as setting specific devices, loading kernel image.
> My questions occurs on the moment that bootloader jumps from stage 1 to the entrance of C of stage 2. The most comman method is to consider the address of main() function as the entrance of executable of code of stage2. It, however, may cause two problems: the one is that we cannot pass arguments by main() fuction and the other is that we cannot deal with the situation which main function return value. But the problem can be fixed by a skillful method that is using a "trampoline" which is usually a piece of assembler. Following is an example:

Please wrap your lines.

If I understand your question properly, you have failed to
notice an important distinction between the first and second
stage of the bootloader: the first stage exists only to pull the
second stage from storage into memory, and start it running.
Since the first stage is truly tiny -- often less than 512 bytes
-- it can't do *anything* else, including read configuration
data or pass it along. So the second stage cannot expect to
receive any arguments, and the first stage is irrelevant after
execution, and it could not process any results anyway.

The trampoline is to catch any errors in the only suitable
fashion -- by restarting the second stage.

Reading through the GRUB sourcecode should help.

-dsr-



More information about the Discuss mailing list