在 Minix 中添加新的系统调用
Adding new System Call in Minix
我正在尝试在 Minix 3.3 中创建一个新的系统调用。起初我只想创建简单的 printmsg() 调用,它将在屏幕上写入 "Hello World"。
我在互联网上查看了各种教程,但仍然找不到解决方案。
我在 callnr.h 中定义了我的系统调用编号 #define PM_PRINTMSG (PM BASE + 48)
并且我增加了系统调用的数量 #define NR_PM_CALLS 49
.
在table.c中添加了CALL(PM_PRINTMSG) = doprintmsg
。
在proto.h中我描述了函数原型`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
来重新编译内核。
我知道问题出在哪里了,所以如果以后有人需要这个,我会post回答。我在这个例子中做得很好,但我未能编译内核。
位置是正确的 usr/src/releasetools,但需要的命令是 make hdboot
。我还发现我的 PC 在某种程度上不能很好地与这个虚拟机一起工作,即使我没有改变任何东西,我在编译时也有很多错误。当我切换到笔记本电脑时一切正常。
我的结论是有时你的机器上有问题所以你应该尝试在不同的机器上测试问题
在我看来,随着 MINIX 3 及其系列的不断发展,明智的做法是直接从 minix3.org 网站 here
直接遵循开发者指南
虽然您自己设法解决了问题,但最新版本的 MINIX3 (MINIX 3.4) 将遵循更高级和更合适的方法。
请访问 link 了解更多信息。
此致。
奥拉
我正在尝试在 Minix 3.3 中创建一个新的系统调用。起初我只想创建简单的 printmsg() 调用,它将在屏幕上写入 "Hello World"。
我在互联网上查看了各种教程,但仍然找不到解决方案。
我在 callnr.h 中定义了我的系统调用编号
#define PM_PRINTMSG (PM BASE + 48)
并且我增加了系统调用的数量#define NR_PM_CALLS 49
.在table.c中添加了
CALL(PM_PRINTMSG) = doprintmsg
。在proto.h中我描述了函数原型`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
来重新编译内核。
我知道问题出在哪里了,所以如果以后有人需要这个,我会post回答。我在这个例子中做得很好,但我未能编译内核。
位置是正确的 usr/src/releasetools,但需要的命令是 make hdboot
。我还发现我的 PC 在某种程度上不能很好地与这个虚拟机一起工作,即使我没有改变任何东西,我在编译时也有很多错误。当我切换到笔记本电脑时一切正常。
我的结论是有时你的机器上有问题所以你应该尝试在不同的机器上测试问题
在我看来,随着 MINIX 3 及其系列的不断发展,明智的做法是直接从 minix3.org 网站 here
直接遵循开发者指南虽然您自己设法解决了问题,但最新版本的 MINIX3 (MINIX 3.4) 将遵循更高级和更合适的方法。
请访问 link 了解更多信息。
此致。
奥拉