zoukankan      html  css  js  c++  java
  • Linux添加系统调用

    本文基于Linux 2.4.26内核,GCC 3.2.2添加系统调用mycall(int num)

    增加系统调用只修改/usr/src/linux-2.4.29/include/asm-i386/unistd.h和arch/i386/kernel/entry.S,系统调用函数一般在kernel/sys.c中,这里把增加的系统调用代码也加入这个文件中。

     

    1.修改kernel/sys.c文件,加入自己的系统调用代码,同参考文献(见文后地址)中,

    asmlinkage int sys_mycalll(int num)

    {

    printk("This is added by yan/n");

    return num;

    }

    往内核输出一句话,然后返回参数值。asmlinkage表示通过堆栈递参数。

     

    2.然后把sys_mycall(int )的入口地址添加到sys_call_table表中。该表依次存储所有系统调用的入口地址。

    修改前为:

    .long SYMBOL_NAME(sys_ni_syscall)    /* sys_set_tid_address这是第258个系统调用* /

    .rept NR_syscalls-(.-sys_call_table)/4

       .long SYMBOL_NAME(sys_ni_syscall)

    修改后:

    .long SYMBOL_NAME(sys_ni_syscall)       /* sys_set_tid_address *        /

    .long SYMBOL_NAME(sys_mycall)           /*这是增加的第259个系统调用*/

    .rept NR_syscalls-(.-sys_call_table)/4-1   /*这里重复次数减少1*/

           .long SYMBOL_NAME(sys_ni_syscall)

     

    3.把增加的sys_call_table表项所对应的向量,在include/asm-i386/unistd.h中进行必要申明,以供用户进程和其他系统进程查询或调用:

    #define __NR_exit_group         252

    #define __NR_mycall          259   /*这是增加的第259个系统调用*/

     

    然后编译内核make bzImage,并用生成的新内核启动系统。

    覆盖原有的内核 cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.26

    cp System.map /boot/System.map-2.4.26

     

    4.测试程序(test.c)如下:

    1. #include <stdio.h>   
    2. #include <asm/unistd.h>   
    3. int errno;  
    4. _syscall1(int,mycall,int,num);//_syscall1表示该系统调用有1个参数,同样_syscall2表示2个调用参数   
    5.   
    6. int main()  
    7. {  
    8.   
    9.         int i,j;  
    10.   
    11.         printf("Please input a number/n");  
    12.   
    13.         scanf("%d",i);  
    14.   
    15.         j=mycall(i);  
    16.   
    17.         printf("The value returned from the kernel is %d/n",j);  
    18.   
    19. }  
      

    然后执行命令

    dmesg | tail

    看到输出的内容

    This is added by yan

  • 相关阅读:
    ActiveSync合作关系对话框的配置
    WINCE对象存储区(object store)
    Wince 隐藏TASKBAR的方法
    Wince输入法换肤换语言机制
    poj 3080 Blue Jeans 解题报告
    codeforces A. Vasily the Bear and Triangle 解题报告
    hdu 1050 Moving Tables 解题报告
    hdu 1113 Word Amalgamation 解题报告
    codeforces A. IQ Test 解题报告
    poj 1007 DNA Sorting 解题报告
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6173174.html
Copyright © 2011-2022 走看看