执行 Minix 内核调用

问题描述 投票:0回答:1

我已按照本教程 - https://wiki.minix3.org/doku.php?id=developersguide:newkernelcall 添加新的内核调用,但如何从用户空间程序调用它?我知道我应该能够使用 syscall() 函数,但是我需要向它提供哪些参数以及需要包含哪些文件?任何帮助,将不胜感激。谢谢

kernel system-calls minix
1个回答
0
投票

遵循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/

  1. su // 更改为 root
  2. cp /home/user/minix/src/minix/minix/include/minix/com.h /usr/include/minix/com.h // 在创建新内核时使用修改后的 com.h 等
  3. cp /home/user/minix/src/minix/minix/include/minix/syslib.h /usr/include/minix/syslib.h

// 制作并使用新内核

  1. cd /boot/minix_default/
  2. mv kernel kernel.20240129 // 备份原内核
  3. cd /home/user/minix/src/minix/minix/kernel
  4. 制作
  5. cp 内核 /boot/minix_default/kernel

// 制作并使用新的 libsys.a

  1. cd /usr/lib
  2. mv libsys.a libsys.a.20240129
  3. mv libsys.so.0.0 libsys.so.0.0.20240129
  4. cd /home/user/minix/src/minix/minix/lib/libsys
  5. 制作
  6. cp libsys.a /usr/lib/libsys.a
  7. cp libsys.so.0.0 /usr/lib/libsys.so.0.0

// 制作并使用新的 minix-service

  1. cd /sbin
  2. mv minix-service minix-service.20240129
  3. cd /home/user/minix/src/minix/minix/commands/minix-service
  4. 进行安装

//制作并运行测试驱动程序hello1

  1. 重新启动,然后使用选项“2”启动 Minix
  2. cd /home/user/minix/src/minix/minix/drivers/examples/hello1
  3. 清洁
  4. 进行安装
  5. minix-服务 /service/hello1
  6. minix 服务关闭 hello1

Minix 中的运行结果 虽然被拒绝了,但好像叫 Kernel Call 58

© www.soinside.com 2019 - 2024. All rights reserved.