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

Compilation 如何创建、编译和链接引导加载程序?,compilation,linker,operating-system,kernel,bootloader,Compilation,Linker,Operating System,Kernel,Bootloader,我正在制作一个小型操作系统,并用c语言为其编写了一个工作内核。但是我如何创建一个引导加载程序来调用内核并编译和链接内核和引导加载程序呢。 我正在使用gcc和yasm。如果需要,我也可以使用nasm。基本上,在引导过程中有两个步骤高度简化,特别是与基于ARM的嵌入式Linux板相关的步骤: 当电源接通时,处理器将唤醒并执行其ROM代码。该代码硬编码到制造商提供的芯片中。此ROM代码在完成基本的硬件准备和健全性检查后调用引导加载程序。您需要查看文档,以确定此初始代码在哪里查找引导加载程序。如果它找到

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

基本上,在引导过程中有两个步骤高度简化,特别是与基于ARM的嵌入式Linux板相关的步骤:

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

同样,引导加载程序为内核二进制编译映像查找几个预先指定的内存位置。它引导加载程序然后放弃它的控制权,并将控制权传递给内核,只需几个参数,有时还包括设备树的内存位置


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

您好!请遵守这里的提问规则:我想我已经遵守了这些规则!如果您将内核转换为二进制输出文件,并将其重命名为stage2.bin,并将C代码从内存位置0x7e00开始,那么您可以使用下面的答案。这是假设您在x86上,并且具有旧版BIOS支持。您没有向我们提供足够的详细信息,说明您的目标平台是什么?x86?手臂等