MOOC哈工大操作系统实验2:添加系统调用

首先进入实验楼后,解压目标文件,做一下初始化的工作。

cd /home/shiyanlou/oslab
tar -zxvf hit-oslab-linux-20110823.tar.gz -C /home/shiyanlou

1. 在linux-0.11/include/linux/sys.h中添加函数声明extern int sys_iam()和extern int sys_whoami(); 然后在中断向量表fn_ptr sys_call_table[]的最后面填上系统调用sys_iam()和sys_whoami()。

cd ./linux-0.11/include/linux
vim sys.h

打开sys.h后,可以看到如下图的代码,其中红色圈起来的是我们要添加的内容:
在这里插入图片描述
即先添加函数声明:
extern int sys_iam();
extern int sys_whoami();
再在中断向量表最后面添加:sys_iam, sys_whoami

2.在linux-0.11/kernel/system_call.s中修改系统调用的个数nr_system_calls,使其增加2。

cd ../../kernel
vim system_call.s

如图所示,将nr_system_calls由72改成74.
在这里插入图片描述
**3.新增系统调用号,在虚拟机中修改unistd.h。先通过运行sudo ./mount-hdc 把虚拟机硬盘挂载在oslab/hdc目录下,然后在hdc/usr/include目录下修改unistd.h。
增加#define __NR_iam 72 和 #define __NR_whoami 73

首先运行mount-hdc来把虚拟机硬盘挂载在oslab/hdc目录下,然后切换目录打开unistd.h

cd ../../
sudo ./mount-hdc
cd ./hdc/usr/include
vim unistd.h

如图添加#define __NR_iam 72 和 #define __NR_whoami 73
在这里插入图片描述
4.新增who.c文件,实现系统调用的函数
切换目录到linux-0.01/kernel ,在这里创建一个who.c文件。

cd ../../../linux-0.11/kernel
vim

在这里首先要说明题目中的要求文件中iam()函数 “ 如果 name 的字符个数超过了 23,则返回 “-1”,并置 errno 为 EINVAL。”
这里我觉得可能是写错了?我在代码中返回-1后是通不过最后的测试的,只有返回EINVAL才可以通过测试。也就是说,EINVAL是错误代码的一个取值,题目实际上应该是让我们返回这个值EINVAL;同时<errno.h>头文件会自动帮我们把变量errno置为对应的错误码EINVAL,所以我们就不用再写errno = EINVAL 了。在代码中<errno.h>头文件定义了错误代

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值