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