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

相关内容

热门资讯

山海邂逅悦来玥美!青岛银丰玥美... 时光淬炼初心,山海见证成长。三百余日夜匠心耕耘,青岛银丰玥美酒店与崂山为伴,与黄海为邻,融青岛山海风...
摸鱼、钓虾、吃瓜、赏荷…初夏时... 这个周末,一场场充满野趣的“田园嘉年华”在沪郊金山多个农场上演,吸引众多市民带着孩子下乡来,赛跑、吃...
原创 戚... 5月28日,北京环球影城迎来了一对温暖的家庭画面:戚薇和李承铉携三岁半的儿子Seven现身游玩。现场...
滹沱河畔 遇见“诗和远方” 图为市民在滹沱河畔休闲娱乐。 初夏五月,惠风和畅。徜徉在石家庄滹沱河生态区(城区段),澄澈河水蜿蜒...
在迪士尼排队两小时,我才看清V... 文丨沈理 在网上看到一则新闻: 上海迪士尼,创极速光轮排队区。一个父亲牵着七八岁的儿子,已经在烈日...