Minix添加系统调用

在Minix中添加一个新内核调用

假设我们新添加一个叫做sample的内核调用
1.在 /usr/src/minix/kernel/system.h 中添加你的函数原型 do_sample()

...
int do_sample(struct proc *caller, message *m_ptr);

#endif  /* SYSTEM_H */

2.在 /usr/src/minix/kernel/system/ 中实现do_sample()的函数 (添加一个sample.c文件)

#include "kernel/system.h"
#include 

/*===========================================================================*
  *                                do_sample                                  *
  *===========================================================================*/
int do_sample(struct proc *caller_ptr, message *m_ptr)
{
        return(OK);
}

3.把do_sample.c添加到*/usr/src/minix/kernel/system/Makefile.inc*的Makefile文件中编译

# Makefile for system library implementation
.include 

.PATH:  ${.CURDIR}/system
SRCS+=  \
        do_fork.c \
        do_exec.c \
...

        do_statectl.c \
        do_sample.c

4.在系统调用表 * /usr/src/minix/kernel/system.c* 用SYS_SAMPLE映射do_sample()

...
  map(SYS_STATECTL, do_statectl);       /* let a process control its state */
  map(SYS_SAMPLE, do_sample);           /* your kernel call */
...

5.在 /usr/src/minix/include/minix/syslib.h 添加sys_sample的原型

...
int sys_sample(unsigned flags, endpoint_t proc_ep);
...

6.在*/usr/src/minix/include/minix/com.h*添加sys_sample的调用号,修改调用增量

...
#  define SYS_PADCONF (KERNEL_CALL + 57)       /* sys_padconf() */
#  define SYS_SAMPLE    (KERNEL_CALL + 58)      /* sys_sample() */

/* Total */
#define NR_SYS_CALLS    59      /* number of kernel calls */
...

7.在system tab /usr/src/minix/commands/service/parse.c 中添加一个名为SAMPLE的服务, build更新过的system tab然后用make命令安装它,在*/usr/src/minix/commands/service/*中make install

...
struct
{
        char *label;
        int call_nr;
} system_tab[]=
{
...
        { "PADCONF",             SYS_PADCONF },
        { "SAMPLE",             SYS_SAMPLE },
        { NULL,         0 }
};
...

8.在 * /usr/src/minix/lib/libsys/sys_sample.c* 中实现你sys_sample函数

#include "syslib.h"

int sys_sample(unsigned flags, endpoint_t proc_ep)
{
        message m;

        return(_kernel_call(SYS_SAMPLE, &m));
}

9.在/usr/src/minix/lib/libsys/Makefile添加sys_sample.c,make install /usr/lib/${MACHINE_ARCH}

# Makefile for libsys

LIB=            sys

SRCS+=  \
...
        sys_sample.c \
...

你可能感兴趣的:(操作系统)