您的位置:首页 > 其它

xv6-----system calls

2015-11-18 11:33 267 查看
本文整理于网上,非原创,,,

注:如果编译错误,请首先检查复制的代码是否包含中文字符,'"()等等。

大部分来自于洋大神哥的:http://yalongyang.com/2012/10/xv6-add-system-call/

题目一:为系统调用添加输出

在syscall.c中的,syscall函数改为

void
syscall(void){

int num;
num= proc->tf->eax;
if(num > 0 && num < NELEM(syscalls) &&syscalls[num]) {
proc->tf->eax = syscalls[num]();
char* name;
switch(num){
case 1:
name= "fork";
break;
case 2:
name= "exit";
break;
case 3:
name= "wait";
break;
case 4:
name= "pipe";
break;
case 5:
name= "read";
break;
case 6:
name= "kill";
break;
case 7:
name= "exec";
break;
case 8:
name= "fstat";
break;
case 9:
name= "chdir";
break;
case 10:
name= "dup";
break;
case 11:
name= "getpid";
break;
case 12:
name= "sbrk";
break;
case 13:
name= "sleep";
break;
case 14:
name= "uptime";
break;
case 15:
name= "open";
break;
case 16:
name= "write";
break;
case 17:
name= "mknod";
break;
case 18:
name= "unlink";
break;
case 19:
name= "link";
break;
case 20:
name= "medir";
break;
case 21:
name= "close";
break;
case 22:
name= "halt";
break;
default:
panic("Wrong");
}
cprintf("%s -> %dn", name, proc->tf->eax);
}else {
cprintf("%d %s: unknown sys call %dn",
proc->pid, proc->name, num);
proc->tf->eax = -1;
}
}


输出参数,

在fetchint和fetchStr的return正确数前

分别加入

cprintf("argu: %d\n", *ip);


cprintf("argu: %s\n", *pp);


重新编译启动xv6时,会出现下图所示



就说明说明成功了。

题目二:为系统添加halt系统调用

模仿uptime系统调用,在xv6 pdf 搜索。加入halt系统调用。

步骤:

1. syscall.h添加

#define SYS_halt 22


2. syscall.c 添加

extern int sys_halt(void);


并在static int (*syscalls[])(void)中添加

[SYS_halt]    sys_halt,


3. Makefile中的UPROGS 后添加 _halt\

 注意换行开头不能有空格,用Tab键进行缩进,否则会报错!

4. usys.S中添加SYSCALL(halt)

5. sysproc.c中添加sys_halt定义

int
sys_halt(void)
{
char *p = "Shutdown";
for( ; *p; p++)
outb(0x8900, *p);
return 0;
}


6. 添加halt.c文件,加一句 halt声明

#include"types.h"
#include"stat.h"
#include"user.h"
int halt();

int
main(int argc,char *argv[])
{
halt();
return 0;
}


大功告成!

注:重新编译运行xv6后,输入halt,有可能会出现下图所示错误



这是qemu更新版本的原因,不是实现错误,代码实现到这里就可以了,效果不必要达到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: