Minix - 系统调用没有正确调用函数?

时间:2013-02-05 05:35:34

标签: c operating-system minix

我需要在Minix中创建一个系统调用来完成家庭作业。我已经完成了大部分设置,但由于某种原因,系统调用的实际调用的函数没有被正确找到。 (原谅任何不好的措辞选择,我不确定最好的解释这个词)。

我在mylib.h(和/usr/include)中创建了/usr/src/include,其代码如下:

#include <lib.h>
#include <unistd.h>
#include <stdio.h>

int mycall(){
    message m;
    return (_syscall(PM_PROC_NR, MYCALL, &m));
}

我还将mylib.h添加到相应的Makefile

我在MYCALL中定义了/usr/src/include/minix/callnr.h,我已将do_mycall添加到/usr/src/servers/pm/table.h中的相应广告位。

我已将int do_mycall(void);添加到/usr/src/servers/pm/proto.h,我在misc.c中添加了一个简单的函数声明。

int do_mycall(void){
    printf("I've been called");
    return 0;
}

我也尝试将它放在它自己的.c文件中,我将其添加到该目录中的Makefile

我在make/usr/src/servers/pm/以及/usr/src/include中的make includes中执行了/usr/src/releasetools

但是,当我调用mycall()并捕获返回值时,它为-1。

我添加了一些打印件,我可以告诉mylib.h中的函数被调用,并且MYCALL被正确定义为table.h中的索引,table.h 应该正确地do_mycall行(虽然我真的不知道如何在执行时测试它)。所以,我只能说_syscalldo_mycall没有正确映射到它的函数。

我尝试使用photo.h中的代码替换misc.c中的原型(因此原型会丢失),但没有任何不同之处,make没有抱怨。

任何人都可以帮我弄清楚造成这种情况的原因,或者我如何缩小断开连接的位置?

如果有人知道_syscall的定义在哪里,那可能会有所帮助,因为我可能会在其中添加一些打印件以确定它到底有多远。

1 个答案:

答案 0 :(得分:1)

我无法找到具体原因,但在耗尽了我能找到的所有选项后,问题似乎与我的虚拟机有关。我重复了我在VMware Player上设置系统调用所做的一切,而不是VirtualBox,一切正常。