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 调试分析

相关内容

热门资讯

原创 不... 在探讨白酒的收藏价值时,我们不得不提到两种类型的白酒,它们虽然拥有悠久的历史和独特的风味,但随着时间...
原创 超... 红苹果 惠尔康的红苹果想必是不少朋友童年时的回忆,最初一块钱一盒,后来涨到1.5元,现在2元1盒,大...
知名零食品牌,来南京了! 长沙“人气王”几多全江苏首店 在南京正式开业了 国内知名鲜食零售品牌几多全日前通过招商引资落户高淳区...
原创 糖... 谁能想到,一盘普通的糖醋排骨,竟然让我的厨艺在小区里出了名?这事儿要从上个月说起,当我带着改良版的糖...
云南咖啡将正式揭晓统一标识,开... “以前我们把咖啡豆卖给世界,现在我们要让世界读懂云南。” 当你看到这句标语时,你读到的是跨越半个世纪...