我已按照本教程 - https://wiki.minix3.org/doku.php?id=developersguide:newkernelcall 添加新的内核调用,但如何从用户空间程序调用它?我知道我应该能够使用 syscall() 函数,但是我需要向它提供哪些参数以及需要包含哪些文件?任何帮助,将不胜感激。谢谢
遵循https://wiki.minix3.org/doku.php?id=developersguide:newkernelcall在Minix 3.4.0 rc6中添加内核调用(SYS_SAMPLE 58), 我使用下面的代码基本上来自 https://wiki.minix3.org/doku.php?id=developersguide:driverprogramming 的示例 1 来测试此内核调用 58
#include <stdio.h>
#include <stdlib.h>
#include <minix/syslib.h>
int main(int argc, char **argv)
{
sef_startup();
endpoint_t et;
unsigned flag;
int r = sys_sample( flag, et);
printf("Hello, World!\n");
return EXIT_SUCCESS;
}
流程:
minix 代码位于 /home/user/minix/src/minix/
- su // 更改为 root
- cp /home/user/minix/src/minix/minix/include/minix/com.h /usr/include/minix/com.h // 在创建新内核时使用修改后的 com.h 等
- cp /home/user/minix/src/minix/minix/include/minix/syslib.h /usr/include/minix/syslib.h
// 制作并使用新内核
- cd /boot/minix_default/
- mv kernel kernel.20240129 // 备份原内核
- cd /home/user/minix/src/minix/minix/kernel
- 制作
- cp 内核 /boot/minix_default/kernel
// 制作并使用新的 libsys.a
- cd /usr/lib
- mv libsys.a libsys.a.20240129
- mv libsys.so.0.0 libsys.so.0.0.20240129
- cd /home/user/minix/src/minix/minix/lib/libsys
- 制作
- cp libsys.a /usr/lib/libsys.a
- cp libsys.so.0.0 /usr/lib/libsys.so.0.0
// 制作并使用新的 minix-service
- cd /sbin
- mv minix-service minix-service.20240129
- cd /home/user/minix/src/minix/minix/commands/minix-service
- 进行安装
//制作并运行测试驱动程序hello1
- 重新启动,然后使用选项“2”启动 Minix
- cd /home/user/minix/src/minix/minix/drivers/examples/hello1
- 清洁
- 进行安装
- minix-服务 /service/hello1
- minix 服务关闭 hello1