zoukankan      html  css  js  c++  java
  • 给Linux内核增加一个系统调用的方法(转)

    作者: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 ",errno_one);
    return 0;

    }

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

    1、编译内核结果如下:

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

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

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

  • 相关阅读:
    iOS APM性能统计
    iOS promise
    静态代码检测工具Infer的部署
    ES读写数据的工作原理
    关于 Elasticsearch 内存占用及分配
    Elasticsearch中数据是如何存储的
    ES中的选举机制
    .net core 3.1 webapi解决跨域问题 GET DELETE POST PUT等
    .net framework WEBAPI跨域问题
    Angular前端项目发布到IIS
  • 原文地址:https://www.cnblogs.com/xihong2014/p/6795738.html
Copyright © 2011-2022 走看看