裸机 printf - 没有操作系统的 C 标准库

主要观点:

  • 介绍在裸金属系统上利用 Newlib 创建紧凑 C 标准库,以实现类似printf的功能,目标平台为 RISC-V。
  • 阐述软件抽象和 C 标准库在不同系统(如典型终端系统和裸金属系统)中的差异。
  • 讨论交叉编译工具链,包括其在不同平台和标准库之间的复杂性,以及如何使用自动化的 RISC-V 工具链构建。
  • 详细说明实现内存和 UART 构建块的过程,包括相关函数的实现和与 Newlib 的结合。
  • 给出应用示例,包括裸金属应用的代码、C 运行时的设置以及链接脚本的作用。
  • 强调--with-cmodel=medany标志的作用及相关问题。
  • 介绍运行应用的Makefile,包括各种编译和链接选项。
  • 总结通过该示例在裸金属平台上实现的功能和意义,以及后续可扩展的方向。

关键信息和重要细节:

  • Newlib 可视为构建自定义紧凑 C 标准库的工具包,提供基本原语和预编译实现。
  • 交叉编译在不同平台和标准库之间存在复杂性,自动化工具链构建可简化过程。
  • UART 相关函数实现通过寄存器操作实现字符的发送和接收。
  • 应用示例中的代码涵盖输入输出、C 运行时设置和链接脚本等方面。
  • --with-cmodel=medany标志用于处理 64 位 RISC-V 机器的高地址。
  • Makefile中的各种选项用于控制编译和链接过程。
  • 最终构建的ELF文件大小约为 220K,可在裸金属环境中使用一些原本不期望的库。

总结:本文详细介绍了在裸金属系统上利用 Newlib 实现 C 标准库功能的过程,包括相关工具链、代码实现和运行方式等方面,为在裸金属环境中开发提供了一种有效的方法和工具。

阅读 10
0 条评论