将newlib移植到自定义ARM设置

Kit*_*uzz 2 embedded libc newlib arm7

这是我的第一篇文章,它涵盖了我一直想要开发和关闭一年的东西.

基本上它归结为以下内容:我有一个newlib的副本,我正在尝试使用LPC2388(来自NXP的ARM7TDMI).这是在使用arm-elf-gcc的linux机器上

我的问题是我一直在看很多关于移植newlib的教程,他们都谈论了存根(如exit,open,read/write,sbrk),我对它有很好的了解如何实现所有这些功能.但是我应该把它们放在哪里

我有来自sources.redhat.com/pub/newlib/newlib-1.18.0.tar.gz的newlib发行版,在我找到"syscalls.c"之后(在newlib-1.18.0/newlib/libc/sys /中)手臂),它包含了所有我必须更新存根的,但是他们都填满了,而查看完代码(它似乎没有crt0.s中,其本身并不与我的工作芯片)的工作.

我应该自己消灭这些功能,然后重新编写它们吗?或者我应该把它们写在别的地方.我应该使用我的"架构"的名称在newlib/libc/sys中创建一个全新的文件夹并更改目标以匹配吗?

我也很好奇,如果在将它作为一个开源项目发布之后有适当的礼节分配这样的东西.我目前有一个下载binutils,arm-elf-gcc,newlib和gdb的脚本,并编译它们.如果我正在修改newlib目录中的文件,我应该提交一个我的脚本自动应用的补丁吗?或者我应该将修改后的newlib添加到存储库中吗?

谢谢你好好阅读!接下来是对我正在做的更详细的细分.


对于那些想要/需要有关我的设置的更多信息的人:

我正在基于Uzebox项目(http://belogic.com/uzebox/)松散地构建一个ARM视频游戏控制台.

当我试图弄明白时,我已经从各种不同的资源中做了各种各样的事情.你可以在这里阅读我的冒险开始(sparkfun论坛,没有人回应,因为我自己解决):forum.sparkfun.com/viewtopic.php?f = 11&t = 22072

我通过阅读有关移植newlib的Stackoverflow问题并查看了一些不同的教程(如wiki.osdev.org/Porting_Newlib),但他们也告诉我实现存根而不提及哪里,谁,什么,何时或如何!

Cli*_*ord 7

但是我应该把它们放在哪里?

您可以将它们放在您喜欢的位置,只要它们存在于最终链接中即可.您可以将它们合并到libc库本身,或者您可以保留该泛型,并将syscalls作为单独的目标特定对象文件或库.

您可能需要创建自己的目标特定crt0.s并为目标组装和链接它.

一个好的教程由飞跃的米罗萨梅克上得到GNU/ARM的开发和运行,请点击这里.这些示例基于Atmel AT91部分,因此您需要了解一些有关NXP设备的信息,以便调整启动代码.

对于LPC2xxx现成的Newlib移植层在这里,但链接加时赛德文件显示被打破.Martin Thomas的WinARM项目中使用了相同的移植层.这是GNU ARM GCC的Windows端口,但其中包含的示例是特定于目标但不是特定于主机的.

您应该只需要修改Newlib上的移植层,并且因为它是特定于目标应用程序的,所以您不需要(实际上可能不应该)将您的代码提交给项目.