我想编写自己的内核,但我一直坚持为我的交叉编译器移植 newlib。
newlib 是哪个版本我要下载吗?
系统调用stubs放在哪里?最少的实现就足够了吗?如果我决定稍后编辑系统调用,是否必须重建 newlib?
我的内核在中断 0x80 (128d) 上公开了所有系统调用,因此我只需在每个 stub 中放入一些内联汇编即可完成我需要它执行的操作。如何根据您的内核来实现它们取决于您。
我该怎么做?
最佳答案
有什么理由不下载最新版本吗?
查看
newlib/libc/sys/*/syscall.c
以及libgloss
(它包含在 newlib 源代码中)。事实上,你可以把它们放在任何你喜欢的地方,只要链接器能找到它们,但这些地方是保留其他端口的地方。 Newlib 期望找到具有特定名称的函数,而您所要做的就是实现它们(我依稀记得有 13 个基本函数,再加上像fork
这样的其他函数,您只需返回一个错误代码即可)。是的,您只需将您喜欢的任何代码插入系统调用 stub 即可。
您还需要提供crt0.o
;这为程序提供了真正的入口点,初始化内存(特别是 bss
),从操作系统保存的位置获取 argv
,并调用 main
>。在 main
返回后,通常会有一些内容来调用 atexit
处理程序,并将退出代码传递回操作系统。
关于c - 如何移植 newlib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25683597/