我如何移植newlib?

时间:2014-09-05 10:16:35

标签: c newlib

我想编写自己的内核,但我仍然坚持为我的交叉编译器移植newlib。

  1. 我下载哪个版本的newlib

  2. 我在哪里拨打电话stubs?最小的实施是否足够?如果我决定稍后编辑系统调用,是否必须重建newlib?

  3. 我的内核暴露了中断0x80(128d)上的所有系统调用,所以我只需要在每个存根中放入一些内联汇编来完成我需要它做的事情。由您决定如何与内核相关地实现它们。

  4. 我该怎么做?

1 个答案:

答案 0 :(得分:2)

  1. 有没有理由不下载最新版本?

  2. 查看newlib/libc/sys/*/syscall.c,通常是libgloss(它包含在newlib来源中)。实际上,只要链接器可以找到它们,您就可以将它们放在任何您喜欢的位置,但这些位置是保留其他端口的位置。 Newlib希望找到具有特定名称的函数,你所要做的就是实现它们(我依旧记得有13个基本函数,还有像fork这样的函数,你可以只返回错误代码)。

  3. 是的,您只需将您喜欢的任何代码插入到系统调用存根中。

  4. 您还需要提供crt0.o;这为程序提供了真正的入口点,初始化内存(特别是bss),从操作系统保存的地方获取argv,并调用main。在atexit返回后,通常会有一些调用main处理程序,并将退出代码传递回操作系统。