HDU操作系统 实验1.2·1.3——设计和添加Linux系统调用

实验介绍

上篇文章已经介绍了Linux内核的编译与安装,我们已经掌握了Linux系统内核的编译和启用。接下来,我们将学习掌握如何添加Linux的系统调用,学习掌握测试Linux系统调用。


什么是系统调用(system call)

由操作系统提供的供所有系统调用的程序接口集合;用户程序通常只在用户态下运行,当用户程序想要调用只能在内核态运行的子程序时,所以操作系统需要提供访问这些内核态运行的程序的接口,这些接口的集合就叫做系统调用。简要的说,系统调用是内核向用户进程提供服务的唯一方法。应用程序有时会需要一些危险的、权限很高的指令,如果把这些权限放心地交给用户程序是很危险的(比如一个进程可能修改另一个进程的内存区,导致其不能运行),但是又不能完全不给这些权限。于是有了系统调用,危险的指令被包装成系统调用,用户程序只能调用而无权自己运行那些危险的指令。另外,计算机硬件的资源是有限的,为了更好的管理这些资源,所有的资源都由操作系统控制,进程只能向操作系统请求这些资源。操作系统是这些资源的唯一入口,这个入口就是系统调用。


实验准备

华为云服务器,OpenEuler操作系统,Xshell远程登录软件(可选)

在做此实验时需要多次编译内核,如果使用VMware本地虚拟机来进行实验,8个线程编译内核耗时过多,所以使用华为云服务器,购买32线程的云服务器编译内核1分钟就搞定,这样会节省很多时间,而且不用担心编译内核时出现bug导致本地虚拟机死机。


本次实验全程在华为云服务器下进行

掌握Linux内核的编译与安装请参考https://blog.csdn.net/weixin_53621503/article/details/123832515?spm=1001.2014.3001.5501


开始实验

1.2——掌握Linux系统调用基本概念

添加一个新的系统调用,通过内核打印调试语句printk打印自己的学号

1.将系统调用的函数加入到syscalls数组中

输入

cd kernel-kernel-4.19/include/uapi/asm-generic/  /*进入操作目录*/

vim unistd.h  /*编辑该文件*/

在该文件中输入

#define __NR_hyb 294
__SYSCALL(__NR_hyb, sys_hyb)

 如上图所示(注意坑点1:在编辑该文件时,找到文件最后一行为294,在其上加入系统调用函数,然后将最后的294改为295。后续实验添加调用函数后将295改为296以此类推。)

Esc退出编辑模式,:wq保存并退出,cd /root返回桌面

2.在头文件中声明系统调用函数

输入

cd kernel-kernel-4.19/include/linux/  /*进入头文件目录*/

vim syscalls.h  /*编辑该文件*/

在该文件中输入

asmlinkage long sys_hyb(void);

  • 127
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值