这是我的第一篇文章,涵盖了大约一年以来我一直在努力进行的工作。
从本质上讲,它可以归结为以下几点:我有一个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似乎无法工作,而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并为您的目标进行汇编和链接。
here提供了Quantum Leaps的Miro Samek撰写的有关启动和运行GNU / ARM开发的良好教程。这些示例基于Atmel AT91零件,因此您需要对NXP设备有一点了解,以适应启动代码。
here提供了用于LPC2xxx的现成的Newlib移植层,但是文件的链接似乎已损坏。 Martin Thomas的WinARM项目中使用了相同的移植层。这是GNU ARM GCC的Windows端口,但是其中包含的示例是特定于目标的,而不是特定于主机的。
您只需要修改Newlib上的移植层,并且由于它是针对目标和应用程序的,因此您不必(实际上可能不应该)将代码提交给项目。
关于embedded - 将newlib移植到自定义ARM设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4665034/