lab3_系统调用(下)
admin
2024-03-22 17:23:19

1. 修改的文件

1.1 添加系统调用 宏定义的 编号

include/unistd.h 中 添加 iam ,whoami 系统调用宏定义的编号,

#define __NR_sgetmask	68
#define __NR_ssetmask	69
#define __NR_setreuid	70
#define __NR_setregid	71
#define __NR_iam 72
#define __NR_whoami 73

1.2 修改 可以系统调用的总数量

kernel/system_call.s

# offsets within sigaction
sa_handler = 0
sa_mask = 4
sa_flags = 8
sa_restorer = 12nr_system_calls = 74

1.3 添加系统调用名

为新增的系统调用 添加 系统调用名 并维护 系统调用表,
include/linux/sys.h

extern int sys_setregid();
extern int sys_iam();
extern int sys_whoami();fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read,
sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link,
sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod,
sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount,
sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm,
sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access,
sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir,
sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid,
sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys,
sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit,
sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid,
sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask,
sys_setreuid,sys_setregid, sys_iam, sys_whoami };

2. 编写新增的系统调用

为新增的系统调用编写代码实现, 在 linux-0.11/kernel 目录下, 创建一个who.c 的文件;

2.1 系统调用编写

2.2 make

修改 Makefile 文件,
参见这里makefile 文件修改

重新 make
/home/shiyanlou/os/oslab/linux-0.11 的路径下,
重新执行 make clean && make BootImage ,

3. 调用 新增的系统函数

3.1 编写测试文件

3.2 文件传输

以上两个文件需要放到启动后的linux-0.11操作系统上运行,才能验证新增的系统调用是否有效,

  • 那如何才能将这两个文件从宿主机转到稍后虚拟机中启动的linux-0.11操作系统上呢?

这里我们采用挂载方式实现宿主机与虚拟机操作系统的文件共享,

  • 在 oslab 目录下执行以下命令挂载hdc目录到虚拟机操作系统上。
:~/Hit_os-main/hit-oslab-linux-20110823/oslab$ sudo ./mount-hdc

挂载之后, 则虚拟机的操作系统的文件系统 可以显示:

~/Hit_os-main/hit-oslab-linux-20110823/oslab/hdc$ pwd
/home/shiyanlou/Hit_os-main/hit-oslab-linux-20110823/oslab/hdc
shiyanlou@Lenovo-Legion:~/Hit_os-main/hit-oslab-linux-20110823/oslab/hdc$ ls
bin  dev  etc  image  Image  mnt  shoelace  tmp  usr  var

拷贝文件

cp  /home/shiyanlou/Hit_os-main/hit-oslab-linux-20110823/lab3_system_call/iam.c  /home/shiyanlou/Hit_os-main/hit-oslab-linux-20110823/lab3_system_call/whoami.c   hdc/usr/root
~/Hit_os-main/hit-oslab-linux-20110823/oslab/hdc/usr/root$ ls
gcclib140  hello.c  iam.c       linux0.tgz    README  shoelace.tar.Z
hello      hello.o  linux-0.00  mtools.howto  shoe    whoami.c

注意,需要关闭该终端, 才能启动 bochs

3.3 编译运行

启动 bochs 虚拟机, 在该虚拟环境下, 编译并运行这两个测试程序;

3.4 调试分析

相关内容

热门资讯

17道 特色旺销菜 恰恰茄子 原料: 糯长茄200克,香菜3克。 调料: 秘制茄子酱40克。 制作: 1.将长茄去皮后...
西藏攻略:7天6晚经典路线,带... 每年5月至10月,是西藏的季节,也是游客最多的时段。最近我们收到很多朋友的咨询:“次来西藏,只有7天...