我想编写自己的内核,但我坚持为我的交叉编译器移植 newlib。
我要下载哪个版本的newlib?
我在哪里放置系统调用存根?最小的实现是否足够?如果我决定在以后编辑系统调用,是否必须重新构建 newlib?
我的内核在中断 0x80 (128d) 上公开了所有系统调用,所以我只需要在每个存根中放入一些内联汇编来完成我需要它做的事情。如何根据内核实现它们取决于您。
我该怎么做呢?
有什么理由不下载最新版本吗?
查看newlib/libc/sys/*/syscall.c
并大致查看libgloss
(它包含在 newlib 源代码中)。事实上你可以把它们放在你喜欢的任何地方,只要链接器能找到它们,但那些地方是保存其他端口的地方。Newlib 期望找到具有特定名称的函数,而您所要做的就是实现它们(我隐约记得有 13 个基本函数,还有其他类似fork
的函数,您可以只返回一个错误代码)。
是的,您只需将任何您喜欢的代码插入到系统调用存根中。
您还需要提供crt0.o
;这提供了程序的真正入口点,初始化内存(bss
特别argv
是main
. 返回后通常有一些调用atexit
处理程序main
,并将退出代码传递回操作系统。