新版Linux内核添加系统调用的方法
今天做Linux内核的作业,要自己动手添加一个系统调用。在网上搜了很多帖子,都是真的2.6版本的,我下载的版本是3.2.11,发现新版的内核添加方法非常不同,旧的方法已经不再使用,于是记下方法,仅供参考。
第一步
在linux-3.2.11/kernel下创建mysyscall.c文件,内容如下:
#include <linux/kernel.h>
asmlinkage long sys_mysyscall(void){
printk(KERN_ALERT "This is my sys call!\n");
return 0;
}
第二步
在linux-3.2.11/kernel/Makefile中加入:
obj-y += mysyscall.o
第三步
在linux-3.2.11/include/linux/syscalls.h中加入:
asmlinkage long sys_mysyscall(void);
第四步
在linux-3.2.11/arch/x86/kernel/syscall_table_32.S(如果你编译的是64位机器则32替换为64)中加入:
.long sys_mysyscall
在linux-3.2.11/arch/x86/ia32/ia32entry.S中加入:
.quad sys_mysyscall
第五步
在linux-3.2.11/arch/x86/include/asm/unistd_32.h中加入:
#define __NR_mysyscall 349
并将
#define NR_syscalls 349
替换为
#define NR_syscalls 350
(这里根据实际情况,__NR_mysyscall为现有最大值,NR_syscalls加一即可)
第六步
重新编译、安装、重启
测试
查看/proc/kallsyms中是否有mysyscall,如果有,表示符号已经导出。
编写测试程序:
#include <sys/syscall.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
printf("%d\n", syscall(__NR_mysyscall));
return 0;
}
编译运行,输出0即为正确,-1为错误。
若运行正确,用dmesg查看,末尾有输出:This is my sys call!
分享到:
相关推荐
以linux2.4内核为基础添加用户自己的系统调用。该文档详细介绍了添加系统调用的过程。
进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩展操作系统的功能。 1.向Linux 内核增加新的系统调用,系统调用名称和功能自行定义 2.Linux 新内核的编译、安装和配置 3.编写应用程序以测试新的系统调用...
linux内核添加系统调用的方法, 含详细过程 操作系统课程设计
介绍了通过添加新文件、或修改源文件的方法添加一个新的系统调用。 本文有添加及编译的详细步骤截图与分析,可作为操作系统课程设计。
讲述如何为linux内核添加新的系统调用 内核版本是linux3.4.4 平台是以arm11为核心的S3C6410
题目内容:添加一个系统调用,实现对指定进程的nice值得修改或读取功能,并返回进程最新的nice值及优先级prio。 考察的知识点:在系统中根据需要添加新的系统调用。 问题的关键点:添加的系统调用实现对指定进程的...
实验目标:在Linux内核中增加一个系统调用,并编写对应的linux应用程序。利用该系统调用能够遍历系统当前所有进程的任务描述符,并按进程父子关系将这些描述符所对应的进程id(PID)组织成树形结构显示。 实验环境:...
在linux 2.6.30中添加系统调用,认识linux系统调用运行原理。
使用编译内核法和内核模块法这两种添加系统调用的方法添加一个不用传递参数的系统调用,其功能是简单输出类似“hello wold”这样的字符串。 三. 实验步骤 3.1内核编译法添加系统调用 (1)通过su root 输入密码后...
在Linux中添加新的系统调用,涉及到Linux内核,以及添加系统调用后的重新编译内核,最后对新的系统调用的测试,本人课程设计亲自实现了!
为了在内核态下运行,本实验针对Linux的内核进行修改,增加自定义系统调用函数实现用户态程序对任意进程的nice值进行修改或者读取来进行测试。详细介绍参考:...
Linux® 系统调用 —— 我们每天都在使用它们。不过您清楚系统调用是如何在用户...本文将探究 Linux 系统调用接口(SCI),学习如何添加新的系统调用(以及实现这种功能的其他方法),并介绍与 SCI 有关的一些工具。
整个程序的构思是将增加系统调用号的所有操作在一个文件中体现,之后将该程序运行得到内核模块,将内核模块加载进入系统内核中,之后利用测试程序测试内核模块是否添加成功以及新增的系统调用的功能是否能够实现。...
Linux内核中增加一个系统调用.pdfLinux内核中增加一个系统调用.pdfLinux内核中增加一个系统调用.pdfLinux内核中增加一个系统调用.pdfLinux内核中增加一个系统调用.pdfLinux内核中增加一个系统调用.pdf
操作系统实验:使用脚本编译重装Linux内核,并增加一个打印缺页数的系统调用.zip 操作系统实验:使用脚本编译重装Linux内核,并增加一个打印缺页数的系统调用.zip 操作系统实验:使用脚本编译重装Linux内核,并增加...
实验2 Linux内核编译及系统调用添加.doc
linux系统调用 和 进程 pdf 文档
提供了linux-2.26-32内核版本的编译及添加系统调用方法
操作系统实验一向LINUX内核增加一个系统调用.pdf