minix添加系统调用

简介: <p>环境minix3.1.8</p> <p>打印进程的vm信息:</p> <p>添加系统调用分为三个部分:</p> <p>1,库函数向用户提供接口;</p> <p>2,pm接受消息处理信息;</p> <p>3,vm接收消息处理信息。</p> <p> </p> <p>1库函数添加:</p> <p>  1.1 posix/下添加print_vmmap函数,文件名命名为_print

环境minix3.1.8

打印进程的vm信息:

添加系统调用分为三个部分:

1,库函数向用户提供接口;

2,pm接受消息处理信息;

3,vm接收消息处理信息。

 

1库函数添加:

  1.1 posix/下添加print_vmmap函数,文件名命名为_print_vmmap.c:

#include<lib.h>
#define print_vmmap _print_vmmap
#include<unistd.h>
PUBLIC int print_vmmap()
{
 message m;
 return(_syscall(PM_PROC_NR, PM_PRINTVMMAP, &m));
}

  1.2 修改posix下边的makefile.inc文件,按照格式添加

  1.3在include/unistd.h下添加函数原型:_PROTOTYPE( int  print_vmmap, (void));

  1.4libc/syscall下添加print_vmmap.s文件:

#include <machine/asm.h>

IMPORT(_print_vmmap)
ENTRY(print_vmmap)
 jmp _C_LABEL(_print_vmmap)

  1.5修改syscall下边的makefile

 

2:pm的处理

    2.1修改callnr.h:

          把NCALLS加1;

          添加#define PM_PRINTVMMAP 113;

   2.2修改pm/proto.h

          添加do_pmprintvmmap的原型:_PROTOTYPE( int do_pmprintvmap, (void)      );

   2.3在pm/getset.c(也可以是其他的c文件)中添加处理函数:

  int do_pmprintvmap()
{
 int result;
 message m;
 printf("pm debug/n");
 result=1;
 m.m1_i1=mp->mp_endpoint;
 result=_taskcall(VM_PROC_NR, VM_PM_PRINTMAP,&m);
 return result;
}

   2.4修改pm/table.c添加消息处理函数:do_pmprintvmap,/*113= print vmmap*/

   2.5修改vfs/table.c:no_sys,   /*113= print vm map*/(此处必须添加。)

 

 

3vm的处理:

 3.1修改include/minix/com.h定义vm的新消息。

        #define VM_PM_PRINTMAP     (VM_RQ_BASE+43)

        /* Total. */
        #define NR_VM_CALLS    44

 3.2在mmap.c(也可以是其他的c文件)中添加函数:

      PUBLIC int do_printvmmap(message *m)
{
 int result=1;
 int proc;
 struct vmproc * vmp;
 struct vir_region * vir_r;
 printf("start-addr end-addr permission /n");
 if(vm_isokendpt(m->m1_i1, &proc) != OK) {
     printf("VM: bogus endpoint VM_print vm map %d/n", m->m1_i1);
  
  return EINVAL;
   }
 vmp=&vmproc[proc];
 vir_r=vmp->vm_regions;
 
 while(vir_r!=NULL){
  printf("%lu %lu r",vir_r->vaddr,vir_r->length+vir_r->vaddr);
  if(vir_r->flags&VR_WRITABLE)
   printf("w");
  else
   printf("-");
  printf("/n");
  vir_r=vir_r->next;
 }
 return result; 
}
 3.3在vm/proto.h中添加声明:

      _PROTOTYPE(int do_printvmmap, (message *m)                            );
  3.4在vm/main.c中添加CALLMAP处理消息:

            CALLMAP(VM_PM_PRINTMAP,do_printvmmap);

  3.5在vm/main.c中做处理,躲避权限检查:

          if (msg.m_type == VM_PAGEFAULT) {
  if (!IPC_STATUS_FLAGS_TEST(rcv_sts, IPC_FLG_MSG_FROM_KERNEL)) {
    }
 } else if(c < 0 || !vm_calls[c].vmc_func) {
   } else {
  if (msg.m_type != VM_PM_PRINTMAP &&
   vm_acl_ok(who_e, c) != OK) {
  } else {
  }
 }

 

4编译和安装新的内核。

  4.1在是src/lib文件夹make install;

  4.2在src/servers下边make install;

  4.3在src/tools文件夹make install

  4.4重启系统

5编写测试文件:

#include<stdio.h>

#include<unistd.h>
int main()
{
  print_vmmap();
 }

用cc命令编译该文件,注意不能用gcc命令。

 

目录
相关文章
|
传感器 Linux
在Linux中使用libmodbus库进行Modbus RTU主从机通信
Modbus RTU是一种常见的工业通信协议,用于在自动化系统中传输数据。libmodbus是一个流行的C库,用于在Linux系统上实现Modbus通信。本文将介绍如何使用libmodbus库在Linux上创建Modbus RTU主从机通信的示例代码。
6175 0
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch应用实战六:利用LSTM实现文本情感分类
PyTorch应用实战六:利用LSTM实现文本情感分类
678 0
|
机器学习/深度学习 JSON 前端开发
RESTful API接口设计规范
近年来移动互联网的发展,前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…),因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信,于是RESTful诞生了,它可以通过一套统一的接口为 Web,iOS和Android提供服务。
4025 1
RESTful API接口设计规范
|
1月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
8月前
|
机器学习/深度学习 人工智能 监控
阿里通义开源全模态大语言模型 R1-Omni:情感分析成绩新标杆!推理过程全程透明,准确率飙升200%
R1-Omni 是阿里通义开源的全模态大语言模型,专注于情感识别任务,结合视觉和音频信息,提供可解释的推理过程,显著提升情感识别的准确性和泛化能力。
1174 10
阿里通义开源全模态大语言模型 R1-Omni:情感分析成绩新标杆!推理过程全程透明,准确率飙升200%
|
域名解析 安全 网络安全
阿里云服务器WordPress环境上安装SSL证书
阿里云服务器WordPress环境上安装SSL证书
|
Go 开发工具 git
在Qemu+ARM上运行Minix3内核
在Qemu+ARM上运行Minix3内核
|
算法 调度 内存技术
操作系统中的内存管理优化策略
在数字时代的浪潮中,操作系统的高效运行成为了技术发展的关键。本文深入探讨了操作系统中内存管理的优化策略,旨在通过先进的技术和方法提高系统性能。文章首先概述了内存管理的基本概念和重要性,随后详细介绍了几种主要的内存优化技术,包括分页机制、虚拟内存以及内存泄漏检测等。最后,文章分析了这些优化措施对提升系统性能的实际影响,并展望了内存管理技术的未来发展方向。
407 0
|
关系型数据库 MySQL Linux
CentOS7下忘记MySQL数据库root密码与密码过期
CentOS7下忘记MySQL数据库root密码与密码过期
412 0
|
运维 Prometheus 监控
StarRocks 监控报警配置指南
StarRocks 监控报警配置指南

热门文章

最新文章