增加可执行文件
在user文件夹中添加文件print-pid.c
,同时在Makefile里面添加:
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
int main()
{
printf("My PID is : %d", getpid());
exit(1);
}
然后可以在操作系统中验证:
增加系统调用(我们将以getcpuid为例子)
增加系统调用我个人理解可以分为下面四个步骤,下面我们按照步骤进行解析(PS:这里我们先跳过原理部分):
- 增加系统调用号
- 增加用户态入口
- 修改kernel/syscall.c中的跳转表
- 实现系统调用函数
增加系统调用号
在kernel/syscall.h
后面增加定义就好:
增加用户态入口
修改user/user.h
user/user.h
中定义了程序在用户态下能使用的所有函数。如同上面的第一个例子,我们使用了getpid
,但是其实我们是已经定义在user.h
中了。
我们往其中加入getcpuid
:
// user/user.h
...
int getcpuid(void);
...
kernel/usys.S定义用户态入口函数
这个的作用就是把系统调用号赋值给a7寄存器,为后面使用syscall()
进行分发的时候提供依据。
// kernel/usys.S
...
SYSCALL(getcpuid)
...
这样就完成了用户态入口的定义。