博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux内核增加一个系统调用的方法
阅读量:2342 次
发布时间:2019-05-10

本文共 1034 字,大约阅读时间需要 3 分钟。

本文转自:

作者:chenjieb520

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

   为了更加好地调试linux内核,笔者的实验均在mini6410arm板上运行的。这样做的原因,第一是因为本人是学嵌入式的,第二是这样可以在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://wdfvb.baihongyu.com/

你可能感兴趣的文章
log4j2.xml实用例子
查看>>
Dockerfile中的CMD和ENTRYPOINT有什么区别?
查看>>
jQuery提示和技巧
查看>>
是否可以在Python中将长行分成多行[重复]
查看>>
命令行上的Node.js版本? (不是REPL)
查看>>
你什么时候使用Builder模式? [关闭]
查看>>
在jQuery中每5秒调用一次函数的最简单方法是什么? [重复]
查看>>
Angular 2+中的ngShow和ngHide等效于什么?
查看>>
如何将Java String转换为byte []?
查看>>
@Transactional注释在哪里?
查看>>
找不到Gradle DSL方法:'runProguard'
查看>>
AngularJS ngClass条件
查看>>
连字符分隔的大小写是什么? [关闭]
查看>>
为什么Java中没有SortedList?
查看>>
在Go中表示枚举的惯用方法是什么?
查看>>
如何在本地运行travis-ci
查看>>
模板中关键字“ typename”和“ class”的区别?
查看>>
在React中显示或隐藏元素
查看>>
暂存已删除的文件
查看>>
为什么需要在脚本文件的开头加上#!/ bin / bash?
查看>>