c - 如何移植 newlib?

标签 c newlib

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

  1. newlib 是哪个版本我要下载吗?

  2. 系统调用stubs放在哪里?最少的实现就足够了吗?如果我决定稍后编辑系统调用,是否必须重建 newlib?

  3. 我的内核在中断 0x80 (128d) 上公开了所有系统调用,因此我只需在每个 stub 中放入一些内联汇编即可完成我需要它执行的操作。如何根据您的内核来实现它们取决于您。

我该怎么做?

最佳答案

  1. 有什么理由不下载最新版本吗?

  2. 查看 newlib/libc/sys/*/syscall.c 以及 libgloss(它包含在 newlib 源代码中)。事实上,你可以把它们放在任何你喜欢的地方,只要链接器能找到它们,但这些地方是保留其他端口的地方。 Newlib 期望找到具有特定名称的函数,而您所要做的就是实现它们(我依稀记得有 13 个基本函数,再加上像 fork 这样的其他函数,您只需返回一个错误代码即可)。

  3. 是的,您只需将您喜欢的任何代码插入系统调用 stub 即可。

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

关于c - 如何移植 newlib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25683597/

相关文章:

c - ANTLR C目标和XMLLib

c - C语言中的newlib是什么?

c++ - 为 C++ chrono 重定向 newlib

c - STM32 CubeMX/GNU/Eclipse-工具链重定向(newlib 和 libgloss)

gcc - ARM + gcc : global destructors not called after main() returns, 但构造函数是

C 宏扩展命令

c - 有和没有辅助变量的变量交换——哪个更快?

c - 如何使用 printf() 格式化字符串以在输出中获得相等的长度

linker - 了解 ARM Cortex-M 微 Controller 的链接描述文件

c - 没有错误,但为什么我们没有得到第二个 scanf() 语句的输入