我正在为没有操作系统的定制 PowerPC 平台编译 newlib。在网上阅读信息我意识到我需要在<newplatform>
libgloss 的子目录中实现存根函数。
我的困惑是当我编译 newlib 时将如何处理它。--target
它是配置例如参数的最后一部分powerpc-ibm-<newplatform>
吗?
如果是这种情况,那么我想我应该--target
在编译 binutils 和 gcc 时使用相同的?
谢谢
我正在为没有操作系统的定制 PowerPC 平台编译 newlib。在网上阅读信息我意识到我需要在<newplatform>
libgloss 的子目录中实现存根函数。
我的困惑是当我编译 newlib 时将如何处理它。--target
它是配置例如参数的最后一部分powerpc-ibm-<newplatform>
吗?
如果是这种情况,那么我想我应该--target
在编译 binutils 和 gcc 时使用相同的?
谢谢
我自己也移植了 newlib 和 GCC。而且我记得我不需要做太多事情来使 newlib 工作(移植 GCC、gas 和 libbfd 是大部分工作)。
只需要调整一些关于浮点数的文件,关闭一些 POSIX/SomeOtherStandard 标志,使其不使用一些更复杂的功能,并为longjmp
/编写支持代码setjmp
,将寄存器状态加载和存储到跳转缓冲区中。但是您当然必须告诉它使用的目标,--target
以便它使用正确的机器子目录等等。我记得我必须添加小代码以configure.sub
使其了解我的目标并打印出完整的配置三元组(cpu-manufacturer-os 或类似)。刚刚发现我必须编辑一个名为configure.host
too 的文件,该文件为您的目标设置了一些选项(例如,操作系统是否处理上升的信号raise
,或者 newlib 本身是否应该模拟处理)。
我以 Anthony Green 的这篇博客为指导,他在其中描述了 GCC、newlib 和 binutils 的移植。我认为当您必须自己做时,这是一个很好的来源。总之读起来很有趣。总共花了 2 个月时间编译和运行一些有趣的 C 程序,这些程序只需要独立的 C(带有写入模拟器终端的虚拟读/写函数)。
所以我认为工作量肯定是可控的。让我几乎抓狂的是libgloss
的构建脚本。我当然迷失在那些 autoconf 魔法中 :) 无论如何,祝你好运!:)
查看移植 Newlib。
引用:
我决定在尝试将 newlib 移植到我自己的操作系统的艰难的一周之后,我将编写一个教程,概述移植 newlib 的要求以及如何实际去做。我假设您已经可以从某个地方加载二进制文件并且这些二进制文件是编译的 C 代码。我还假设您已经设置了系统调用接口。为什么要等?让我们开始吧!