将我们的自定义操作系统连接到标准库 - Stephen Marz

主要观点:标准库包含大量无需自己编写的代码,如printfscanf等数学函数,要确保操作系统能链接到该库且正常工作,此文展示如何将操作系统链接到标准库newlib及过程中的困难。
关键信息:

  • 库能让程序员在更高层次开始编写程序,一般是编译和汇编源代码的目标文件,共享对象可按需加载。
  • 低级库的工作是确保参数位置正确、系统调用号在正确寄存器且实际发出系统调用,如RISC-Vecall指令。
  • 内核要能处理库发出的系统调用,不同系统调用遵循UNIX SYSV约定。
  • C++标准包含标准库信息,包括复杂度保证和内存占用等。
  • 程序运行的真正入口是_start,会设置一些环境后调用int main,最后通过exit结束。
  • 动态链接需要更稳健地解析ELF格式,文中操作系统因无法处理动态链接而需将标准库静态链接到程序,导致程序大小增加。
    重要细节:
  • printf为例,它会构建字符串并通过write系统调用输出到stdout
  • 内核中open系统调用要找到应用在虚拟内存中的位置并转换为物理内存。
  • C++2011标准规定了被视为C++标准的不同标准函数。
  • crt0.S汇编文件中的_start例程会在调用main前进行一些初始化工作。
  • 可通过readelf -l查看可执行文件的动态链接信息及所需的动态链接器。
阅读 8
0 条评论