compilation - 如何创建、编译和链接引导加载程序?
问题描述
我正在制作一个小型操作系统并用 c 编写了一个工作内核。但是我将如何创建一个引导加载程序来调用内核并编译和链接内核和引导加载程序。我正在使用 gcc 和 yasm。如果需要,我也可以使用 nasm。
解决方案
引导期间基本上有 2 个步骤(高度简化)(特别与基于 ARM 的嵌入式 Linux 板相关):
供电时,处理器唤醒并执行其 ROM 代码。此代码被硬编码到制造商提供的芯片中。完成基本硬件准备和健全性检查后,此 ROM 代码调用引导加载程序。您需要查看文档以了解此初始代码在哪里(哪个地址)查找引导加载程序。如果它找到引导加载程序,它将放弃其控制权并将控制权传递给引导加载程序。
引导加载程序再次为内核二进制文件(编译映像)寻找几个预先指定的内存位置。然后它(引导加载程序)放弃其控制权并将控制权传递给内核(使用很少的参数,有时还有设备树的内存位置)。
AFAIK,内核和引导加载程序通常不会“编译/链接”在一起。这是一个阶段完全放弃自己并将控制权传递给另一个阶段的过程(如上述 2 个步骤所述)。
推荐阅读
- c# - Asp.Core 中的 WebApi 1.0 动作重载
- php - Google 事件 API 返回 401 错误未授权客户端
- javascript - 达到限制时如何禁用未选中的复选框
- node.js - nodejs 客户端无法注册到基于 nodejs 护照的身份验证服务
- python - python:采用类参数的优雅方式?
- angular - 使用 if 表达式更改颜色编号
- flutter - Flutter:如何将小部件与列的右上角对齐?
- spring - 初始化构造函数并在 Quartz 中注入 Jpa 的 Repository bean
- python - 使用特定设置启动 Flask 应用程序,运行查询并存储测试响应
- mysql - 对 MySQL 中的纬度和经度数据使用 DECIMAL(17,13) 时是否对性能有影响?