linux内核4.2.x实现自定义系统调用
来源:互联网 发布:vb中cancel是什么意思 编辑:程序博客网 时间:2024/06/06 00:59
前言:
内核2.xx | 3.xx | 4.xx在添加系统调用时,需要的步骤大体相同。但是由于内核版本的变动,有些步骤的做法发生改变。网上的教程多是关于2.xx | 3.xx版本的。有些地方在4.xx版本上不相符。以下内容均以4.2.1版本为例子,基于Ubuntu虚拟机,64位PC。
首先,给出几个关键的路径:
/usr/src/linux-4.2.1/arch/x86/include/asma/sysclls.h 自定义的系统调用函数声明
/usr/src/linux-4.2.1/kernel/sys.c 自定义的系统调用函数实现
/usr/src/linux-4.2.1/arch/x86/entry/syscalls/syscall_32.tbl 系统调用表
接下来,介绍以下添加系统调用的步骤:
1、在sysclls.h文件内定义函数声明:
asmlinkage long sys_hello(long t); 返回值、参数和正常定义函数一样,函数名一定要以sys_开头
asmlinkage不要缺少。函数定义前加宏asmlinkage ,表示这些函数通过堆栈而不是通过寄存器传递参数。
2、在sys.c内实现上面声明的函数:
asmlinkage long sys_hello(long t)
{
return t; 实现自己需要的功能
}
3、在syscall_32.tbl 内为上面的函数分配一个调用编号:
359 i386 hello sys_hello 单独占一行
然后,介绍编译的步骤:
1、执行sudo apt-get installlibncurses5-dev , 这一步是为了make menuconfig的正确执行。如果这步遇见其它问题,不在本文讨论之列。
2、执行make menuconfig,不做任何修改,保存退出即可。
3、执行make modules,这步非常耗时间。
4、执行make modules_install.
5、执行make install
6、重启。
最后,编写测试程序:
#include <stdio.h>
int main()
{
long t = syscall(359,888); // 359为syscall_32.tbl 内的调用编号 888为参数
printf("t = %ld\n",t);
return 0;
}
- linux内核4.2.x实现自定义系统调用
- linux内核4.2.x实现自定义系统调用
- Linux内核:getpid系统调用的实现
- 《Linux内核设计与实现》--系统调用
- linux内核设计与实现:系统调用
- 在linux 4.x内核中增加系统调用
- Linux内核-系统调用
- [Linux内核设计与实现]Linux系统调用
- linux:socket 系统调用在linux内核中的实现流程图
- linux内核分析---系统调用实现代码分析(By e4gle)
- linux内核分析---系统调用实现代码分析
- linux内核分析---系统调用实现代码分析
- Linux内核设计与实现读书笔记(4)-系统调用
- linux内核文件IO的系统调用实现分析
- 《linux内核设计与实现》Chapter5章系统调用(笔记)
- linux内核设计与实现(第五章)----系统调用
- 《Linux内核设计与实现》读书笔记(五)- 系统调用
- 《Linux内核设计与实现》读书笔记(五)- 系统调用
- 内存访问
- 机器学习中的数据清洗与特征处理综述
- 【bzoj2395】[Balkan 2011]Timeismoney
- Xcode、模拟器的常用快捷键
- underscore.js 源码中一些实用的工具方法
- linux内核4.2.x实现自定义系统调用
- 如何不用VPN就可以轻松访问谷歌浏览器
- Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory Android
- CentOS 6.3下PostgreSQL 的安装与配置
- mvp+recycleView+cardView+customToolbar+按密度适配之一
- Eclipse之properties文件编辑器中将Unicode码显示为翻译后的字符
- PHP请求远程地址设置超时时间
- 广告投放方式:CPC、CPM、CPA、CPS、CPT
- 视频编解码原理