【linux内核设计与实现-章节代码学习系列-系统调用】ubuntu 12.03 下系统调用实现
来源:互联网 发布:小数据时代的随机采样 编辑:程序博客网 时间:2024/04/28 01:11
【接下来的一段时间将会陆陆续续把我学习《linux内核设计与实现》的部分章节的代码拿来分享,书上的内容就不说了,主要就是结合代码理解一下,编一编玩一玩。欢迎大家共同学习进步】
ubuntu下加系统调用出奇的奇怪,你按照书上的以及网上做法保证你找不到相应的文件,其实实现并不难,但是就是找不到应该修改的系统文件,让人头疼。。
首先说明的是,实现一个系统调用需要修改的部分有三个。
1.、kernel/sys.c 下添加你的系统调用的函数内容
2. 在unistd.h中定义你的系统调用的系统调用号
3. 在syscall.h中写下你的系统调用函数声明
下面慢慢来讲解,加上图片就会看到具体的修改文件的路径在哪里了:
1.系统调用函数需要写到核心的内核映像中,这里大部分选择的是kernel/sys.c,但是如果功能与调度有关加入kernel/sched.c 所以根据自己需要加入函数内容。看下图,具体的文件路径看清楚喽。
2.在unistd.h中,这个文件的具体位置是根据你的计算机体系结构有关,一般电脑就是x86结构。看一下就知道这里根据你电脑的32、64位选择不同的文件修改,楼主的是64位。
在这个最后面加入你的函数名字,例如__NR_spiritcall,前面要固定的加入__NR_,和sys根据他的规则写~不啰嗦了。
3.在syscall.h中加入函数声明
函数前面加入asmlinkage 返回值根据自己的函数写,一般系统调用返回类型是long。
ok,系统调用需要重新编译内核,并且在编译内核之前需要下载内核源码,这些工作是你最开始应该做的。这些楼主就不多啰嗦了~~
给你们一个网站,参考一下
http://www.linuxidc.com/Linux/2013-06/85335.htm
然后编译好了之后就是在你的程序中调用你的系统调用了~
#include<stdio.h>#inlcude<unistd.h> int main(){ printf(“%d\n%d\n”,syscall(341,1),syscall(341,0));//341就是系统调用号,之后的是函数参数,最多5个 return 0;}
- 【linux内核设计与实现-章节代码学习系列-系统调用】ubuntu 12.03 下系统调用实现
- 《Linux内核设计与实现》--系统调用
- linux内核设计与实现:系统调用
- [Linux内核设计与实现]Linux系统调用
- Linux内核设计与实现读书笔记(4)-系统调用
- 《linux内核设计与实现》Chapter5章系统调用(笔记)
- linux内核设计与实现(第五章)----系统调用
- 《Linux内核设计与实现》读书笔记(五)- 系统调用
- 《Linux内核设计与实现》读书笔记(五)- 系统调用
- 《Linux内核设计与实现》——系统调用
- 系统调用——linux内核设计与实现读书笔记
- Linux内核的设计与实现 读书笔记(5)系统调用
- 《Linux内核设计与实现》读书笔记之系统调用
- 读薄《Linux 内核设计与实现》(3) - 系统调用
- [笔记]《Linux内核设计与实现》第五章系统调用
- 《Linux内核设计与实现》读书笔记(五)- 系统调用
- 《Linux内核设计与实现》读书笔记(五)- 系统调用
- 《Linux内核设计与实现》读书笔记(五)- 系统调用
- Xcode6添加.pch
- Unity3D Shader官方教程翻译(四)----Shader语法:SubShader
- PING DNS时中间出现超时
- VC中鼠标移动点击操作
- Android添加权限大讲解
- 【linux内核设计与实现-章节代码学习系列-系统调用】ubuntu 12.03 下系统调用实现
- Quartz中SimpleTrigger
- Unity3D Shader官方教程翻译(五)----Shader语法:Pass
- Live555源码彻底解密(testRTSPClient --rtsp交互流程)
- Cocos2d-x 3.x的渲染流程
- rsync命令详解
- Proxy、SSH 和VPN 的区别
- 2014腾讯笔试题
- NGUI系列教程 第二部