我需要在 Minix 中为家庭作业创建一个系统调用。我已经完成了大部分设置,但由于某种原因,系统调用实际调用的函数没有被正确找到。(请原谅任何不好的措辞选择,我不确定最好的词来解释这一点)。
我用以下代码创建了一个mylib.h
in /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
定义,那可能会有所帮助,因为我可能会在其中添加一些打印件以弄清楚它有多远。