假设我们新添加一个叫做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 \
...