将newlib移植到自定义ARM设置

这是我的第一篇文章,它涵盖了我一直想要开发和关闭一年的东西。 基本上它归结为以下内容:我有一个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 /中) arm)包含我必须更新的所有存根,但是它们都填写了相当完整的代码(如果没有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),但他们也告诉我实现存根而不提及哪里,谁,什么,何时或如何!     
已邀请:
  但是我应该把它们放在哪里? 您可以将它们放在您喜欢的位置,只要它们存在于最终链接中即可。您可以将它们合并到libc库本身,或者您可以保留该泛型,并将syscalls作为单独的目标特定对象文件或库。 您可能需要创建自己的目标特定crt0.s并为目标组装和链接它。 这里有一个关于使用GNU / ARM开发并运行的Quantum Leaps的Miro Samek的精彩教程。这些示例基于Atmel AT91部分,因此您需要了解一些有关NXP设备的信息,以便调整启动代码。 这里有一个现成的用于LPC2xxx的Newlib移植层,但链接文件似乎已被破坏。 Martin Thomas的WinARM项目中使用了相同的移植层。这是GNU ARM GCC的Windows端口,但其中包含的示例是特定于目标但不是特定于主机的。 您应该只需要修改Newlib上的移植层,并且因为它是特定于目标和应用程序的,所以您不需要(实际上可能不应该)将您的代码提交给项目。     
当我使用newlib时,正是我所做的,吹走了crt0.s,syscalls.c和libcfunc.c。我个人的偏好是基于嵌入式应用程序链接crt0.s和syscalls.c的替换(将libcfunc中的少数函数转换为syscalls.c替换)。 我从来没有兴趣将任何工作推回发行版,所以无法帮助你。 虽然你在正确的道路上,crt0.S和syscalls.c是你想要为你的目标定制的地方。我个人对C库(和printf)感兴趣,主要是中性所有函数返回0或1,或者只是让函数正常工作而不妨碍链接,定期制作文件I / O函数在rom / ram中的数据链接中运行。基本上没有替换或修改newlib中的任何其他文件我取得了相当大的成功,所以你走的是正确的道路。     

要回复问题请先登录注册