实验1 增加新的系统调用_第1页
实验1 增加新的系统调用_第2页
实验1 增加新的系统调用_第3页
实验1 增加新的系统调用_第4页
实验1 增加新的系统调用_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验1 增加新的系统调用目录实验基础知识介绍 系统调用概念 系统调用分类 系统调用实现实验目的实验内容和步骤实验要求2022-5-92022-5-9系统调用概念由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。系统调用是应用程序同系统之间的接口。内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。系统调用运行在内核态,是用户态进入内核态的唯一入口。系统

2、调用分类Linux操作系统中系统调用分类: 进程管理,如fork(), clone(), execve(), exit()等。 进程通信,如signal(), msgctl(), pipe()等。 控制硬件,如open(), read(), write()等。 设置系统状态或读取内核信息,如getpid(), getpriority(), setpriority()等。 内存管理,如brk(), mmap(), mlock()等。 系统控制 网络管理 socket控制 用户管理2022-5-9系统调用实现Linux的系统调用通过int 80h实现,用系统调用号来区分入口函数。 操作系统实现系统

3、调用的基本过程是: 应用程序调用库函数(API); API将系统调用号存入EAX,然后通过中断调用使系统进入内核态; 内核中的中断处理函数根据系统调用号,调用对应的内核函数(系统调用); 系统调用完成相应功能,将返回值存入EAX,返回到中断处理函数; 中断处理函数返回到API中; API将EAX返回给应用程序。应用程序调用系统调用的过程是: 把系统调用的编号存入EAX 把函数参数存入其它通用寄存器 触发0 x80号中断(int 0 x80)2022-5-9实验目的 阅读Linux内核源代码,通过添加一个简单的系统调用实验,进一步理解Linux操作系统处理系统调用的统一流程。 掌握Linux内核

4、编译方法实验内容下载、解压内核配置内核编译安装内核添加系统调用函数添加系统调用号声明测试新的系统调用2022-5-9下载、解压内核 下载内核 在官网:/下载linux内核, 完成后, 将下载文件放入/usr/src/目录下 解压内核 将下载的文件解压缩, 在 /usr/src/目录下, 输入如下命令: # xz -d linux-3.17.1.tar.xz # tar -xvf linux-3.17.1.tar 解压后的文件夹名为:linux-3.17.12022-5-9配置内核 安装ncurses-5.9: 下载ncurses-5.9.tar.gz文件

5、,并解压 # tar zxvf ncurses-5.9.tar.gz (解压) #cd ncurses-5.9(当前目录) #./configure(检查) #make (编译) #make install(安装)2022-5-9配置内核 在usr/src下的内核源码目录(linux-3.17.1)下,输入如下命令: # make menuconfig(需要安装ncurses)2022-5-9编译安装内核 在usr/src下的内核源码目录(linux-3.17.1)下,输入如下命令: # make (编译内核) 。2022-5-9编译安装内核# make modules_install(安装模

6、块)。 2022-5-9编译安装内核#make install(安装内核)。2022-5-9系统调用的名字 系统调用的名字,比如mysyscall。一旦这个名字确定,那么在系统调用中几个相关的名字也就确定了。 系统调用编号:#define _NR_name NNN (name为系统调用名称,NNN为系统调用对应的号码) 例如: #define _NR_mysyscall 338 内核中系统调用的实现程序的函数名字:sys_mysyscall2022-5-9添加系统调用函数 在内核源码目录(linux-3.17.1)kernel下修改sys.c文件 asmlinkage long sys_mys

7、yscall(int num)printk(This is my system calling.);return num ; 2022-5-9添加系统调用号 在内核源码目录arch/x86/include/asm下修改文件unistd.h,在unistd.h中添加系统调用号,格式为: #define _NR_name NNN (name为系统调用名称,NNN为系统调用对应的号码)例如: #define _NR_mysyscall 380 然后修改系统中所用的系统调用总数 #define _NR_syscalls 3812022-5-9声明 在在内核源码目录(linux-3.17.1)include/linux下修改文件syscalls.h文件。 文件中加入如下代码: asmlinkage long sys_mysyscall(int num);2022-5-9测试新的系统调用 编写测试程序(test.c)#include #include int main() syscall(380,1); return 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论