http://blog.csdn.net/zhangjs0322/article/details/8963748

本文以linux-3.5.4内核、x86平台、64位,为例进行说明。

添加新的系统调用,共需修改3处文件:

(1)分配系统调用号:include/asm-generic/unistd.h

(2)修改系统调用表:arch/x86/syscalls/syscall_64.tbl。较早版本的内核,修改的是arch/x86/kernel/syscall_table_32.S文件。

(3)添加处理函数:kernel/sys.c,(不是必须在这个文件中添加,可在其他文件或新建文件)

1、分配系统调用号

修改include/asm-generic/unistd.h文件,设系统调用号为314,不冲突即可。同时修改__NR_syscalls的值274为275。

[cpp] view plaincopyprint?

  1. #define __NR_mysyscall 313

  2. __SYSCALL(__NR_mysyscall, sys_mysyscall)

  3. #undef __NR_syscalls

  4. #define __NR_syscalls 273

#define __NR_mysyscall 313 __SYSCALL(__NR_mysyscall, sys_mysyscall) #undef __NR_syscalls#define __NR_syscalls 273

2、修改系统调用表

修改arch/x86/syscalls/syscall_64.tbl文件,根据原有表内容的格式,在322行处添加如下内容

[cpp] view plaincopyprint?

  1. 313     64      mysyscall               sys_mysyscall

313     64      mysyscall               sys_mysyscall

3、添加处理函数

修改kernel/sys.c文件。添加不带参数的系统调用处理函数。

[cpp] view plaincopyprint?

  1. SYSCALL_DEFINE0(mysyscall)

  2. {

  3. //在此处加入遍历进程的代码

  4. struct task_struct *p;

  5. printk("********************************************\n");

  6. printk("------------the output of mysyscall------------\n");

  7. printk("********************************************\n\n");

  8. printk("%-20s %-6s %-6s %-20s\n","Name","pid","state","ParentName");

  9. for(p = &init_task; (p = next_task(p)) != &init_task;)

  10. printk("%-20s %-6d %-6d %-20s\n",p->comm , p->pid, p->state, p->parent->comm);

  11. return 0;

  12. }

SYSCALL_DEFINE0(mysyscall){        //在此处加入遍历进程的代码        struct task_struct *p;        printk("********************************************\n");        printk("------------the output of mysyscall------------\n");        printk("********************************************\n\n");        printk("%-20s %-6s %-6s %-20s\n","Name","pid","state","ParentName");        for(p = &init_task; (p = next_task(p)) != &init_task;)                printk("%-20s %-6d %-6d %-20s\n",p->comm , p->pid, p->state, p->parent->comm);        return 0;}

4、系统调用测试程序

编写简单的测试程序

[cpp] view plaincopyprint?

  1. #include <linux/unistd.h>

  2. #include <sys/syscall.h>

  3. //系统调用号根据实验具体

  4. #define __NR_mysyscall 313

  5. //数字而定

  6. int main()

  7. {

  8. syscall(__NR_mysyscall);    /*或 syscall(313) */

  9. }

linux-3.5.4内核添加新的系统调用并测试!!!!!相关推荐

  1. 向linux内核增加新的系统调用,为linux内核添加新的系统调用

    为linux内核添加新的系统调用 作者:李志勇 更多精彩: 更多精彩: 开发平台:x86 ubuntu 目标平台:S3C6410 linux3.4.4 一.    打开内核源码目录下arch/arm/ ...

  2. linux 添加新的系统调用,如何在Linux中添加新的系统调用

    如何在Linux中添加新的系统调用 2010-01-29 eNet&Ciweek #define __NR_mycall 191 系统调用号为191,之所以系统调用号是191,是因为Linux ...

  3. 学习笔记——《LINUX设备驱动程序(第三版)》Linux设备模型:内核添加、删除设备、驱动程序

    文章目录 1. 前言 2. 准备工作 2.1. 概念 2.2. 具体总线.设备.驱动结构体说明 2.3. 注册总线 3. 添加设备 3.1. STEP1 --发现设备并创建设备结构 struct XX ...

  4. Linux——安全权限(禁止添加新用户+umask值+修改默认密码最长有效期)

    目录 一.不再允许添加新用户的请求 演示: 二.umask值: (1)简介: (2)查看: (3)为什么 umask 里目录是 022,文件是 002? (4)演示: (5)更改: 三.修改默认的密码 ...

  5. Linux学习-25-useradd命令:添加新的系统用户

    8.9 Linux useradd命令:添加新的系统用户 添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号.用户组.主目录和登录Shell等资源.刚添加的账号是被锁定的,需设置密码,才可 ...

  6. esx linux 硬盘 扩容,ESX虚拟机添加新磁盘并扩容逻辑卷

    查看有哪些iscsi通道 ls /sys/class/scsi_host/ 扫描 echo "- – -" > /sys/class/scsi_host/host0/scan ...

  7. linux rootkit手动排查,Linux Rootkit如何避开内核检测的

    Rootkit在登堂入室并得手后,还要记得把门锁上. 如果我们想注入一个Rootkit到内核,同时不想被侦测到,那么我们需要做的是精妙的隐藏,并保持低调静悄悄,这个话题我已经谈过了,诸如进程摘链,TC ...

  8. linux 3.5.0-23-generic内核版本系统调用数目,Linux操作系统分析(三)- 更新内核与添加系统调用...

    环境:Ubuntu 12.10     学号:SA****199 1.更新内核: 直接安装的系统内核版本一般不是最新,用 uname -a 查看一下 自己的版本,OK,我的是: Linux chenh ...

  9. [iMX6UL开发常见问题连载2.2] 内核make menuconfig 如何剪裁,如何添加新设备?

    i.MX6UL/i.MX6ULL开发常见问题 基于米尔电子 i.MX6UL/i.MX6ULL产品 V.10 2.2内核make menuconfig 如何剪裁,如何添加新设备? 答:如下讲如何配置内核 ...

最新文章

  1. 用verilog实现检测1的个数_入门指南:用Python实现实时目标检测(内附代码)
  2. 【OkHttp】OkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 )
  3. ARouter源码探究
  4. 为什么要从自然数扩大到实数,进而扩大到复数?
  5. python二维图颜色函数_Python绘图之二维图与三维图详解
  6. Ant Design 3.15.0 发布,企业级 UI 设计语言和 React 实现
  7. makefile 文件 (​ http://blog.csdn.net/ruglcc/article/details/7814546/ )
  8. 报名啦!旷视研究院解读COCO 2017物体检测夺冠算法 | 吃瓜社
  9. CentOS6.X安装10G需要额外安装的软件包
  10. 管理感悟:人才是发现的,不是培养的
  11. 40套各种风格住宿酒店行业网站html5模板大气商务酒店网站模板度假村酒店官方网站模板旅行酒店宾馆整站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应
  12. 2.3 伯努利试验和直线上的随机游动
  13. 正经分析iOS包大小优化
  14. 基于kinect的人体动作识别系统
  15. js点击使内容变成可编辑状态
  16. [转] 介绍深度学习和长期记忆网络
  17. QGtkStyle was unable to detect the current GTK+ theme
  18. 彩色流程图怎么做?这样的操作方法你尝试过吗?
  19. 12星座的出生年月日性格_十二星座的日期和性格特点
  20. android 地图导航开发思路,基础功能-导航组件-开发指南-Android 导航SDK | 高德地图API...

热门文章

  1. SinoBBD亮相全球云计算大会 彰显一体化云力量
  2. OpenGL ES 2 o 初探
  3. 想要更好的云基础设施管理!你检查IT工具集了吗?
  4. mysql慢查询分析工具和分析方法
  5. SCONS如何集成工具
  6. HUD 2544 最短路 迪杰斯特拉算法
  7. C#datagridView中嵌套控件
  8. 为app添加发微博功能
  9. DB2一个嵌套循环的sql
  10. Hyperledger Fabric、Corda和以太坊对比