文章目录实验链接
- 前言
- 做实验前一定要先拍个快照!!
- 操作系统实验环境的搭建请看如下链接(Ubuntu系统)
- Linux0.11环境搭建
- 一、实验内容
- 二.基础知识
- 三、实验步骤
- 注:因为实验一已经修改过启动文件。但此次实验需要完整的启动文件,所以需要新的linux0.11环境。(在做实验一之前拍过一个快照所以我们只需要回复快照就行)
- 我们添加到linux-0.11中的系统调用只能在bochs虚拟机中运行,不能在终端上运行
- 完结
前言 做实验前一定要先拍个快照!! 操作系统实验环境的搭建请看如下链接(Ubuntu系统) Linux0.11环境搭建
提示:以下是本篇文章正文内容,下面案例可供参考
一、实验内容
具体请查看此文章
参考的文章
注:因为实验一已经修改过启动文件。但此次实验需要完整的启动文件,所以需要新的linux0.11环境。(在做实验一之前拍过一个快照所以我们只需要回复快照就行)步骤一:打开unistd.h文件(在linux-0.11/include目录下)
在第132和133行添加如下代码
#define __NR_whoami 72 #define __NR_iam 73
步骤二:打开system_call.s文件(在linux-0.11/kernel目录下)
将61行的72改成74,因为现在总的系统调用有74个多了两个我们自己添加的系统调用
步骤三:进入sys.h文件(在linux-0.11/include/linux/目录下)
在第73行和第74行添加两句话
extern int sys_whoami(); extern int sys_iam();
并在第89行把两个系统调用名添加到最后
步骤四:在路径:linux-0.11/kernel目录下创建who.c文件并添加如下代码
代码来源处
#define __LIBRARY__ #include#include #include char temp[64]={0}; int sys_iam(const char* name) { int i=0; while(get_fs_byte(name+i)!=' ') i++; if(i>23) return -EINVAL; printk("%dn",i); i=0; while((temp[i]=get_fs_byte(name+i))!=' '){ i++; } return i; } int sys_whoami(char* name,unsigned int size) { int i=0; while (temp[i]!=' ') i++; if (size


