【问题标题】:Minix - System call not correctly calling function?Minix - 系统调用没有正确调用函数?
【发布时间】:2013-02-05 05:35:33
【问题描述】:

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

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

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

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

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

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

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

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

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

我在/usr/src/servers/pm//usr/src/include 中表演了make,在/usr/src/releasetools 中表演了make includes

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

我添加了一些打印,我可以看出mylib.h 中的函数正在被调用,并且MYCALL 被正确定义为table.h 中的索引,并且table.h 中的索引应该do_mycall 行正确放置(尽管我真的不知道如何测试它在执行时是否存在)。所以,我只能说在_syscall 中,do_mycall 没有正确映射到它的功能。

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

谁能帮我找出造成这种情况的原因,或者我如何缩小断开连接的位置?

如果有人知道_syscall 是在哪里定义的,那可能会有所帮助,因为我可能会在其中添加一些打印来确定它的距离。

【问题讨论】:

  • _syscall/usr/src/lib/libc/sys-minix/syscall.c 中实现。

标签: c operating-system minix


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 2015-12-07
    • 2020-02-22
    • 2020-04-22
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多