作者:chenjieb520

Linux内核增加一个系统调用的方法

   为了更加好地调试linux内核,笔者的实验均在mini6410的arm板上运行的。这样做的原因,第一是因为本人是学嵌入式的,第二是这样可以在arm板上进行实验,可以提高实验的效率。

(1)、首先定义你所要添加的系统调用名,然后在Linux-2.6.x/kernel/创建一个文件,文件名为:mysyscall.c文件的内容为:

(2)、在Linux-2.6.x/arch/x86/include/asm/unistd_32.h中为系统调用定义一个索引号,这个索引号必须在索引列表的最后一个的后面。

(3)、在unistd_32.h中同时添加了系统调用的个数

#define __NR_syscalls 295   //add by chenjieb

(4)、在Linux-2.6.x/arch/x86/kernel/syscall_table.S,这个表按系统调用号(即前面提到的__NR_name)排列了所有系统调用函数的指针,以供系统调用入口函数查找。从这张表看得出,linux给它所支持的系统调用函数取名叫sys_name。

.long sys_mysyscall

(5)、在Linux-2.6.x/kernel/Makefile中添加如下的语句,这是用于内核的编译使用的。

obj-y += mysyscall.o

(6)、写一个测试的程序。测试上述的西系统调用是否可以用。

#include <errno.h>
 #include <sys/syscall.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <stdlib.h>
long errno_one;
#define __NR_mysyscall 294
int main() 
{
errno_one=mysyscall(12,24);
printf("%d\n",errno_one);
return 0;

}

运行结果:首先先对增加了新的系统调用的内核进行编译,将编译后的内核下载到arm板上,然后编译自己的测试程序。

1、编译内核结果如下:

2、运行的结果:如果在自己的PC板上运行的话,需要超级用户,而我是在arm板上运行,arm板上的系统默认是超级用户,所以我这里只需要一般的运行即可,结果如下:

希望这个教程对大家学习Linux内核有用!欢迎大家批评指教!

http://blog.csdn.net/chenjieb520/article/details/7317629

给Linux内核增加一个系统调用的方法(转)的更多相关文章

  1. 向linux内核增加一个系统调用-2(利用proc打印信息)

    添加系统调用,打印/proc中的系统信息 前面关于proc和内核态函数的东西可以对比代码来看. 参考 http://blog.csdn.net/kylin_fire_zeng/article/deta ...

  2. 向linux内核增加一个系统调用-1

    验证编辑编译内核的流程,并增加新的系统调用 注意:需要/目录至少10GB空间,/boot目录500MB空间 下载内核并解压 kernel下载 百度云搬运 密码: qc8b 进入 /usr/src目录 ...

  3. 操作系统项目:向Linux内核添加一个系统调用

    内容: 向Linux增加一个系统调用 撰写一个应用测试程序调用该系统调用 使用ptrace或类似的工具对该测试程序进行跟踪调 环境: 1.vmware workstation 15.0.0 2.ubu ...

  4. 成为Linux内核高手的四个方法

    首页 最新文章 资讯 程序员 设计 IT技术 创业 在国外 营销 趣文 特别分享 更多 > - Navigation -首页最新文章资讯程序员设计IT技术- Java & Android ...

  5. linux内核分析作业6:分析Linux内核创建一个新进程的过程

    task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  u ...

  6. 第六周分析Linux内核创建一个新进程的过程

    潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: ...

  7. 实验 六:分析linux内核创建一个新进程的过程

    实验六:分析Linux内核创建一个新进程的过程 作者:王朝宪  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...

  8. 20135202闫佳歆--week6 分析Linux内核创建一个新进程的过程——实验及总结

    week 6 实验:分析Linux内核创建一个新进程的过程 1.使用gdb跟踪创建新进程的过程 准备工作: rm menu -rf git clone https://github.com/mengn ...

  9. 《Linux内核--分析Linux内核创建一个新进程的过程 》 20135311傅冬菁

    20135311傅冬菁 分析Linux内核创建一个新进程的过程 一.学习内容 进程控制块——PCB  task_struct数据结构 PCB task_struct中包含: 进程状态.进程打开的文件. ...

随机推荐

  1. 20145106 《Java程序设计》第1周学习总结

    20145106 <Java程序设计>第1周学习总结 教材学习内容总结 因为我用的是Mac,所以教材内容暂时对我的编译java没有帮助.不过还好我也在同学和自己的帮助学习下初步学会了在Ma ...

  2. [JS] - level8 kata

    https://www.codewars.com/kata/57e3f79c9cb119374600046b function hello(name) { if(name == "" ...

  3. fiddler几种功能强大的用法(二)

    参考网址:http://blog.rekfan.com/articles/228.html http://www.cnblogs.com/tugenhua0707/p/4637771.html htt ...

  4. LA 6891 Money Transfers(最短路)

    https://vjudge.net/problem/UVALive-6891 题意: 给定一个加权无向图,还有起点和终点,现在有个SWERC公司,拥有图中的m个顶点,现在可以使图中的每一条边都加上k ...

  5. shell 计时获取输入

    #!/bin/bash   if read -t 5 -p "please enter your name:" name   then       echo "hello ...

  6. YAML(摘录)

    YAML:维基百科 一个用来表达数据序列的格式.强调以数据为中心的标记语言. 使用空白符缩进和大量依赖外观的特殊,适合编辑数据结构,配置文件. 基本格式: 缩进/区块 和内置两者格式,来表示array ...

  7. bzoj1211: [HNOI2004]树的计数 prufer序列裸题

    一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di ...

  8. UVA-1515 Pool construction (最小割)

    题目大意:有一块地,分成nxm块.有的块上长着草,有的块上是荒地.将任何一块长着草的块上的草拔掉都需要花费d个力气,往任何一块荒地上种上草都需要花费f个力气,在草和荒地之间架一个篱笆需要花费b个力气, ...

  9. Python3 内建函数一览

    ###################################################### """Python3 内建函数大全""& ...

  10. java并发编程:线程安全管理类--原子操作类--AtomicLong

    可以用原子方式更新的 long 值.有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范.AtomicLong 可用在应用程序中(如以原子方式增加的序列号), ...