【发布时间】: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