为linux-3.10.1内核添加系统调用

为linux-3.10.1内核添加系统调用

ID:22299394

大小:204.50 KB

页数:6页

时间:2018-10-28

为linux-3.10.1内核添加系统调用_第1页
为linux-3.10.1内核添加系统调用_第2页
为linux-3.10.1内核添加系统调用_第3页
为linux-3.10.1内核添加系统调用_第4页
为linux-3.10.1内核添加系统调用_第5页
资源描述:

《为linux-3.10.1内核添加系统调用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、系统调用是操作系统提供给用户程序调用的一组“特殊”接U。通过这组“特殊”接口,用户程序可以获得操作系统内核提供的服务,如文件系统相关系统调用提供的打开文件、关闭文件或读写文件服务,时钟相关的系统调用提供的获取系统时间、设置系统时间服务等。从逻辑上来说,系统调用可被看成是一个A核与用户空间程序交互的接口——好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户进程。一个系统调川的典型调川过程如下图所示。系统调用的作用:系统服务之所以需要通过系统调用提供给用户空间,其根本原因是为了对系统进行“保护”。我们知道操作系统的运行空间分为

2、N核空间与用户空间,它们各自运行在不同的级别中,逻辑上相互隔离,故用户进程在通常怙况下不允许访问内核数据、不允许使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。但是很多情况下,用户进程耑要获得系统服务(调用系统程序),这时就必须利用系统提供给用户的“特殊”接口——系统调川,其特殊性在于规定了用户进程进入内核的具体位置,即用户访问内核的路径是事先规定好的,只能从规定位置进入内核,而不准许肆意跳入内核。有了上述陷入内核的统一访问路径限制,才能有效保证系统内核的安全。我们可以形象地描述上述机制:作为一个游客,你可以买票要求进入野生动物闶,但你必须老

3、老实实的坐在观光车上,按照规定的路线观光游览。当然,不准卜车,因为那样太危险,不是让你丢掉小命,就是让你吓坏了野生动物。在前述文章“Linux-3.10.1内核的编译和安装”(详见http://www.lingyuecloud.com/Index/details/id/58.html)中,我们知道利用Linux内核的开源特性,可以对Linux系统进行定制化开发、编译和安装。例如,通过修改Linux内核源码,我们定制化开发了一个新功能,那么如何在应用程序屮使用这个新功能呢?为此,我们还需要为“应用程序”与“内核中新增的新功能”建立桥梁——即一个能够连接两者的系统

4、调用。假设我们己经获得了Linux-3.10.1的源码包linux-3.10.1.tar.bz2,解压该源码包后得到linux-3.10.1文件夹,并切换到该文件夹下(如何获取包linux-3.10.1.tar.bz2?如何解压?请详见http://www.lingyuecloud.com/Index/details/id/58.html“Linux-3.10.1内核的编译和安装”)。接下来,灵跃桌而云将以Linux-3.10.1A核为例,详细描述为A核添加一个新的系统调用的过程,T述所有操作都在linux-3.10.1R录下进行。2.环境说明操作系统Ubun

5、tu12.0464位内核版本linux-3.10.1注:在下述描述屮,涉及在服务器Ubuntu12.04操作系统环境上的所有操作,均以root身份登录并执行、3.为Linux-3.10.1内核添加一个系统调用3.1系统调用号Linux系统调用号的作用是在系统调用过程中,将其数值作为下标的在系统调用表中进行索引,从而得到处理该系统调用的函数的地址。每个系统调川都有一个唯一的系统调川号,应用程序可以通过系统调用号调用指定的系统调用。3.2系统调用表与Windows系统中的SSDT(SystemServicesDescriptorTable)的作用一样,Linux系

6、统调用表保留着处理各个系统调用的函数的入U地址;其实际上是一个二维的指针数组IXKYj,X代表系统调用号,Y代表系统调用函数的入口地址。3.3添加系统调用lingyuecloudsyscall1)添加自定义的系统调用源代码在“linux-3.10.1/kernel”A荣下的sys.c文件中添加自定义的系统调用lingyuecloudsyscall的实现函数。打开sys.c文件,添加以下示例代码:#vimkernel/sys.casmlinkagelongsys_lingyuecloudsyscall(intnumber){printk(uhellolingyu

7、ecloud!Callnumberis%d'number);returnnumber;}2)修改系统调用表系统调用表文件在“linux-3.10.1/arch/x86/syscalls”目录卜的syscall_64.tbl文件屮。打开syscall_64.tbl,添加新的系统调用指针,如下所示:#vimarch/x86/syscalls/syscall_64.tbl31464lingyuecloudsyscallsys_lingyuecloudsyscall;如下图所示:31064process_vm_readvsys_process_vm_readv31

8、164process一vm—write

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。