gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:56 27 4
gpt4 key购买 nike

我需要在 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);,并在 杂项.c

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

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

我在/usr/src/servers/pm//usr/src/include中执行了make,并且make在 /usr/src/releasetools 中包含

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

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

我尝试用 misc.c 中的代码替换 photo.h 中的原型(prototype)(这样原型(prototype)就会丢失),但没有发生任何不同,并且 make 没有提示。

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

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

最佳答案

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

关于c - Minix - 系统调用没有正确调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14700829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com