我正在尝试在Minix 3.3中创建一个新的系统调用。首先,我只想创建一个简单的printmsg()调用,它将在屏幕上写入"Hello World"。
我在网上看了各种教程,仍然找不到解决方案。
-
我在callnr.h中定义了我的sys呼叫号码,如
#define PM_PRINTMSG (PM BASE + 48)
,并增加了#define NR_PM_CALLS 49
的sys呼叫数量。 -
在table.c我增加了
CALL(PM_PRINTMSG) = doprintmsg
。 -
在 protod .h我描述了函数prototype ' int do_printmsg(void);
-
函数实现在misc.c中编写。我添加了
#include <stdio.h>
,使Hello World功能int do printmsg(){ printf("I am a system call"); return 0; }
当我在用户程序_syscall(PM_PROC_NR, PM_PRINTMSG, &m);
中测试我的系统调用时,我没有得到任何错误,但没有显示printf。
所以,是否有可能从系统调用中打印消息,因为我必须在misc.c中添加<stdio.h>
,或者我错过了一些步骤。我忘了说,我进入/usr/src/releasetools,分别输入make services
和make install
来重新编译内核。
我知道是什么问题,所以我会张贴答案,如果有人需要这个在未来。在这个例子中,我做得很好,但是我没有编译内核。
位置是正确的,即usr/src/releasetools,但需要的命令是make hdboot
。此外,我发现我的电脑不知何故不能很好地与这个虚拟机工作,我有很多错误,而编译,即使我没有改变任何东西。当我切换到笔记本电脑时,一切都很好。
我的结论是有时候你的机器出了问题所以你应该尝试在不同的机器上测试问题
在我看来,随着MINIX 3及其系列的不断发展,只直接遵循minix3.org网站中的开发人员指南将是明智的
虽然你已经自己解决了这个问题,但最新版本的MINIX3 (MINIX 3.4)将采用更先进、更合适的方法。
请访问链接了解更多信息。
许多问候。Ola