操作系统---linux0.11系统调用

项目地址:https://www.lanqiao.cn/courses/115
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改include/unistd.h文件以添加系统调用,
在这里插入图片描述
移动include/unistd.h到usr/include文件夹下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在函数表中增加函数引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编写测试程序传到linux0.11中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.从linux/include/unistd.h中可以知道,_syscall宏展开的系统调用最多有三个参数,使用ebx、ecx、edx寄存器存储参数。
解决限制的办法:将需要传递的多个参数保存在一段自定义的数据结构中,并将该用户态地址空间的首地址作为参数传递给系统调用,最后通过寄存器间接寻址即可获得所有参数,当然先需要验证参数的合法性。

2.首先修改include/linux/sys.h,在sys_call_table数组末尾加上sys_foo,再加上extern rettype sys_foo();

修改include/unistd,#define __NR foo num,这里的num表示接下来的系统调用号

修改kernel/system_call.s,nr_system_calls = num,num为在原值上加1,即系统调用总数加一

在kernel中添加foo.c,如果需要支持内核态和用户态的数据交互,则应包含include/asm/segment.h,其中有put_fs_XXX, get_fs_XXX函数,在foo.c中实现系统调用sys_foo()

修改kernel的MAKEFILE,将foo.c与其他内核代码编译链接到一起

系统调用用户界面需要
#define LIBRARY
#include <unistd.h>
_syscallN宏展开系统调用,提供用户态的系统调用接口

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值