Operating system 如何在xv6中添加系统调用/实用程序
有人能告诉我/告诉我如何在XV6中添加系统调用/实用程序吗 在谷歌上进行彻底的搜索是徒劳的,艰难的黑客攻击到目前为止也没有效果 这本参考书也没有任何hello world的例子 非常感谢您的帮助请阅读以下内容:Operating system 如何在xv6中添加系统调用/实用程序,operating-system,system-calls,xv6,Operating System,System Calls,Xv6,有人能告诉我/告诉我如何在XV6中添加系统调用/实用程序吗 在谷歌上进行彻底的搜索是徒劳的,艰难的黑客攻击到目前为止也没有效果 这本参考书也没有任何hello world的例子 非常感谢您的帮助请阅读以下内容: 它很好地解释了添加一个可以在xv6的shell中调用的系统调用, 你应该用这五个文件做点什么 sysproc.c在此处添加方法的实际实现 syscall.h定义连接到实现的系统调用向量的位置 user.h定义可以通过shell调用的函数 syscall.c外部定义连接shell和内核的
它很好地解释了添加一个可以在xv6的shell中调用的系统调用, 你应该用这五个文件做点什么
- sysproc.c在此处添加方法的实际实现
- syscall.h定义连接到实现的系统调用向量的位置
- user.h定义可以通过shell调用的函数
- syscall.c外部定义连接shell和内核的函数,使用syscall.h中定义的位置将函数添加到系统调用向量中
- usys.S使用宏定义将用户调用连接到系统调用函数
- defs.h为新系统调用添加转发声明
- sysfunc.h将新的系统调用处理程序添加到此文件中,类似于“int sys\u newsystemcall(void)”
#include "types.h"
#include "stat.h"
#include "user.h"
int main(void){
printf(1,"The size of my address space is %d bytes\n", getmysize());
exit();
}
本程序仅用于演示系统调用的工作情况
现在,我们将向xv6添加系统调用
首先在文件syscall.h的末尾添加以下行
#define SYS_getmysize 23
请注意,此处的23可能会根据要添加到文件中的行之前给定的数字而改变。也就是说,如果您要添加的行之前的行中的系统呼叫号码是22,则您的行应具有号码23。就这么简单
现在将以下行添加到syscall.c文件中
extern int sys_getmysize(void);
在syscalls数组中,在中追加以下行
[SYS_getmysize] sys_getmysize,
在文件sysproc.c中,如果系统调用是与进程处理或内存管理相关的系统调用,那么系统调用的实现就是在该文件中进行的,请按如下方式放置系统调用的实现
int
sys_getmysize(void)
{
return proc->sz;
}
现在在usys.S文件中,添加行
SYSCALL(getmysize)
然后在user.h文件中添加以下内容。这是用户程序如何看待系统调用的
int getmysize(void);
嗯。现在,您已经准备好运行用户程序,并查看系统调用如何运行
当您运行调用系统调用的myprog.c时,同一程序的地址空间大小将根据我们在此处实现的内容返回。没错,您是Reut,还需要defs.h。您也可以在sysfile.c中实现系统调用。