如何创建,编译和链接引导加载程序?

时间:2019-03-01 01:09:42

标签: compilation linker operating-system kernel bootloader

我正在制作一个小型操作系统,并为此在c中编写了一个可工作的内核。但是我将如何创建一个引导加载程序来调用内核,并编译和链接内核与引导加载程序。 我正在使用gcc和yasm。如果需要,我还可以使用nasm。

1 个答案:

答案 0 :(得分:0)

引导过程中(基本上与基于ARM的嵌入式Linux板有关)有两个步骤(高度简化):

  1. 接通电源后,处理器将唤醒并执行其ROM代码。此代码被硬编码到制造商提供的芯片中。在完成基本的硬件准备和健全性检查之后,此ROM代码将调用引导加载程序。您需要查看有关此初始代码在何处(哪个地址)查找引导加载程序的文档。如果找到引导加载程序,它将放弃其控制权,并将控制权移交给引导加载程序。

  2. 同样,引导程序会为内核二进制文件(编译的映像)寻找一些预先指定的内存位置。然后,它(引导程序)放弃了控制权,并将控制权传递给内核(带有很少的参数,有时还有设备树的内存位置)。

AFAIK,内核和引导程序通常不会“编译/链接”在一起。这是一个阶段,它完全放弃自身并将控制权传递给另一阶段的过程(如以上两个步骤所述)。