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