这是我的第一篇文章,它涵盖了我一直试图在大约一年内开发和关闭的东西。

从本质上讲,它归结为以下内容:我有一个Newlib的副本,我正在尝试在LPC2388(来自NXP的ARM7TDDMI)上工作。这是在Linux盒上使用ARM-ELF-GCC

我遇到的问题是,我一直在看许多关于移植纽里布的教程,他们都在谈论存根(例如退出,打开,读/写,sbrk),我对如何实施所有这些功能。但 在哪里 我应该把它们放吗?

我从sources.redhat.com/pub/newlib/newlib/newlib-1.18.0.tar.gz上发行了newlib发行,然后在poking之后,我找到了“ syscalls.c”(在newlib-1.18.0/newlib/newlib/libc/libc/sys/sys/sys/sys/sys/sys/sys/sys/sys/sys/sys/sys/sys/ ARM)包含我必须更新的所有存根 不是 似乎没有CRT0.S工作,它本身不适用于我的芯片)。

我应该自己删除这些功能,然后重写它们吗?还是我应该在其他地方写它们。我应该在Newlib/libc/sys中使用我的“架构”名称制作一个全新的文件夹,然后更改目标?

我也很好奇是否有适当的礼节在将其发布为开源项目之后的分发。我目前有一个脚本,可以下载Binutils,Arm-Felf-GCC,Newlib和GDB,并将其编译。如果我正在修改Newlib目录中的文件,我应该将脚本自动应用程序的补丁发送给吗?还是我应该将修改后的newlib添加到存储库中?

感谢您打扰阅读!遵循这是我正在做的事情的更详细的细分。


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

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

当我试图弄清楚它时,我一直在做各种各样的事情。您可以在此处阅读有关我冒险的开始(Sparkfun论坛,没有人会回应我自己的回应):forum.sparkfun.com/viewtopic.php?f=11&t=22072

我通过阅读有关移植Newlib的Stackoverflow的问题,并看到了一些不同的教程(例如Wiki.osdev.org/porting_newlib),但他们也遭受了告诉我的苦难,而无需提及谁,谁,谁,什么,什么,什么,什么时候或如何!

有帮助吗?

解决方案

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

只要它们存在于最终链接中,您就可以将它们放在自己喜欢的地方。您可以将它们合并到LIBC库本身中,也可以保留该通用,并将SYSCALL作为单独的目标特定对象文件或库。

您可能需要创建自己的目标特定CRT0.S并将其链接到目标。

Miro samek的良好教程Quantum跃升为获得GNU/ARM开发的启动和运行 这里. 。这些示例基于ATMEL AT91零件,因此您需要了解一些NXP设备以调整启动代码。

lpc2xxx的现成的newlib移植层 曾是 可用的 这里, ,但是ot teh文件的链接似乎已损坏。马丁·托马斯(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 i /O功能在ROM/RAM中的数据中链接。基本上,没有替换或修改Newlib中的任何其他文件,我都取得了相当大的成功,因此您处于正确的道路上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top