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

  • 相关阅读:
    Azure PowerShell (2) 修改Azure订阅名称
    Windows Azure Platform Introduction (11) 了解Org ID、Windows Azure订阅、账户
    Azure PowerShell (3) 上传证书
    Azure PowerShell (1) PowerShell入门
    Windows Azure Service Bus (2) 队列(Queue)入门
    Windows Azure Service Bus (1) 基础
    Windows Azure Cloud Service (10) Role的生命周期
    Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书
    Android studio 使用心得(一)—android studio快速掌握快捷键
    android 签名、混淆打包
  • 原文地址:https://www.cnblogs.com/xihong2014/p/6795738.html
Copyright © 2011-2022 走看看