1

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

我用以下代码创建了一个mylib.hin /usr/include(and /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正在调用 in 的函数,并且 MYCALL 被正确定义为 in 的索引table.h,并且table.h 应该正确放置该do_mycall行(尽管我真的不知道如何测试它是执行时在那里)。所以,我只能说 in _syscall,do_mycall没有正确映射到它的功能。

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

谁能帮我弄清楚是什么原因造成的,或者我如何缩小断开连接的位置?

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

4

1 回答 1

1

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

于 2013-02-28T01:36:46.050 回答