编写并测试子功能

时间:2009-12-01 01:05:48

标签: c++ kernel nachos

我正在尝试为nachOS编写子功能,但是当我结合它时它不起作用。不知道原因。 细节: 在../userprog/syscall.h 添加:

#define SC_Sub 11
int Sub(int a, int b);

../test/

 .globl Sub
 .ent Sub
Sub: 
 addiu $2,$0,SC_Sub
 syscall
 j  $31
 .end Sub

之后我写了一个sub.c:

#include "syscall.h"
int main()
{
   int result;
   result = Sub(100,99);
   Halt();
}
在exception.cc中

: 我试图捕捉异常:

case SC_Sub:
   op1 = machine->ReadRegister(4);
   op2 = machine->ReadRegister(5);
   result = op1 - op2;
   printf("op1:%d\n",op1);
   printf("op2:%d\n",op2);   
   printf("result:%d\n",result);
   machine->WriteRegister(2,result);
   machine->WriteRegister(PCReg,machine->ReadRegister(PCReg)+4);  
   break;

要结合我转到/code/gmake all 我有错误:(

../../../gnu-decstation-ultrix/decstation-ultrix/2.95.3/gcc -B../../../gnu-decstation-ultrix/ -T script -N  sub.o   -o sub
../../../gnu-decstation-ultrix/decstation-ultrix/2.95.3/ld: cannot open crt0.o: No such file or directory
make[1]: *** [sub] Error 1
make[1]: Leaving directory `/home/nxqd/Desktop/nachos-3.4/code/test'
gmake: *** [all] Error 2

这是玉米片的文件夹。它不包含我写的“bug”Sub func。

http://www.mediafire.com/?g3mnjxz4wdc
enter code here

1 个答案:

答案 0 :(得分:0)

嗯..嗯,我对NachOS一无所知,但我已经开发了一些操作系统。

cannot open crt0.o: No such file or directory

您是否正在发送正确的链接器命令?让我们看看你的链接器脚本。

我假设你已经构建了一个MIPS交叉编译器。您是否将其配置为使用标准库。如果没有标准库,您是否将其配置为使用默认的crt0?

请注意,crt0是一个“bootstrap”对象。它包含__main,这是操作系统执行的第一件事。然后,此引导对象解析命令行参数和其他初始化内容,然后调用main函数。我不确定NachOS中有多少内容,但您甚至可能必须创建自己的crt0并将其作为启动图像链接到链接器脚本(无法记住确切的名称)