首页 > 解决方案 > 如何创建、编译和链接引导加载程序?

问题描述

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

标签: compilationlinkeroperating-systemkernelbootloader

解决方案


引导期间基本上有 2 个步骤(高度简化)(特别与基于 ARM 的嵌入式 Linux 板相关):

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

  2. 引导加载程序再次为内核二进制文件(编译映像)寻找几个预先指定的内存位置。然后它(引导加载程序)放弃其控制权并将控制权传递给内核(使用很少的参数,有时还有设备树的内存位置)。

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


推荐阅读