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