当前位置:  技术问答>linux和unix

请问:怎样写一个linux的系统调用,模块或写到kernel都行

    来源: 互联网  发布时间:2015-05-09

    本文导语:  怎样写一个linux的系统调用,模块或写到kernel都行 | #define MODULE #define __KERNEL__ #define LINUX   #include  #include  #include  #include  #include  #include  #include  #define __NR_pedagogictime 199 #define SCT 0xc0...

怎样写一个linux的系统调用,模块或写到kernel都行

|
#define MODULE
#define __KERNEL__
#define LINUX
 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define __NR_pedagogictime 199

#define SCT 0xc030a0f0//在/boot/System.map中查sys_call_table

static int (*anything_saved)(void);

/*static int sys_pedagogictime(struct timeval *tv)

{
  struct timeval ktv;

  MOD_INC_USE_COUNT;

  do_gettimeofday(&ktv);
  if(copy_to_user(tv,&ktv,sizeof(ktv))){
    MOD_DEC_USE_COUNT;
    return -EFAULT;
  }
  printk("Pid %ld called sys_gettimeofday().n",(long)current->pid);
  MOD_DEC_USE_COUNT;

  return 0;
}*/
static int sys_pedagogictime(int k )

{
 


  // printk(" the syscall is .......%dn",k);
  
  k+=100;
  return (k);
}

int __init init_addsyscall(void)
{
  long __MM_TEST;
  long * sys_call_table;
sys_call_table=(long *)SCT; 
  anything_saved=(int(*)(void))(sys_call_table[__NR_pedagogictime]);

 *( sys_call_table+__NR_pedagogictime)=(unsigned long)sys_pedagogictime;
  //EXPORT_SYMBOL(__MM_TEST);
  return 0;
  }


  void __exit exit_addsyscall(void)
    {
     long *sys_call_table; 
      sys_call_table=(long *)SCT; 
      *(sys_call_table+__NR_pedagogictime)=(unsigned long)anything_saved; 
    }

  module_init(init_addsyscall);
  module_exit(exit_addsyscall);
MODULE_LICENSE("GPL");

|
你可以在LINUX内核中增加系统调用。
1。首先找到entry.S,在这个文件中,找到syscall_table你就会看到很多的系统调用,加上你的系统调用的名称。
2。找到unistd.h文件,增加你的系统调用号,这些步骤你可以根据在这2个文件的原来的系统调用的格式来模仿着写。
3。这样,你就可以写你的系统调用了。以我的经验,你最好在原来的内核文件中写,而且最好是在有关的系统调用的文件中写。
4。在测试你的系统调用时,要加上_syscall0( ,),根据你的参数个数来写。

|
zeng_xiangyang(娃哈哈) 的程序比较标准,可以通过模块实现,但是有限制,只能用于2.4内核,2.6的内核已经不导出sys_call_table符号了
wenxiaoxue(wen) 的程序通用性强,但是需要重新编译内核

    
 
 

您可能感兴趣的文章:

  • 请问哪里有《精通EJB》这本书下载,中英文都行!
  • 请问用javaScript或vbScript可否调用页面上Applet的public函数?如何调用?
  • 请问在jsp中调用外部的类,与jsp调用javabean有何区别??
  • 请问如何在Java中调用一个VB所写的DLL?如何调用这个Dll的方法?如何取得和设置这个Dll的属性值?谢谢!
  • 请问linux中的系统调用号是如何跟系统调用表对应起来的
  • 请问如何在一个JSP页面调用一个exe程序呢?谢谢! iis7站长之家
  • 请问jsp可以调用EJB吗?
  • 请问这个方法如何调用?
  • 请问在jsp中如何调用ActiveX控件啊!求救
  • 请问:如何调用抽象类的方法
  • 请问make是如何调用gcc的啊
  • 请问.ini文件的格式及调用
  • 请问gcc有没有类似GetExitCodeProcess的函数,可以获得调用的外部程序的返回值呢?
  • 请问如何用jni类来调用一个非java写的外部exe?谢谢!
  • 请问高手:我想用applet调用一个本地的exe。怎么办?
  • 请问java如何调用com?请大家发表意见和指点一下。
  • 请问:make 嵌套调用,变量如何向下传递 3 级?
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 请问如何在一个JSP页面调用一个exe程序呢?谢谢!
  • 请问有没有和DU或DF对应的系统调用?
  • 请问如何在web页面调用word,并将所有的所有表单参数调的word中排版、打印。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问模块如何与用户程序进行数据交换
  • 请问,如何使用绑定在内核中的汉字模块?
  • 请问我要加载内核模块 ipip.o 怎么做
  • 请问如何给内核模块传递大量的数据?
  • 请问在Unix下开发ftp传输模块,有没有什么系统函数可以调用。
  • 请问加载动态snmpd扩展模块时使用的命令#./snmpd –f –L –DXXX,DLmod参数的含义是什么?
  • 请问:在Linux的C编程中,如何取得模块路径?
  • 请问加载自定义Ko模块
  • 请问模块加载需要怎样配置环境?
  • linux下用eclipse进行开发,尤其打开较大的python代码模块,老是会卡,请问大家有没有好点的解决办法,如能提供具体设置,不胜感激
  • 请问大侠: 2.4下应用程序(user space)传大量数据给内核模块(kernel space)的可选方法和最佳方法.
  • 请问:怎么样才能让程序成为一个Linux内核的可装载模块?
  • [求助]请问在2.6内核下,怎样用ld把几个o链接成一个ko驱动模块呢?
  • 请问问题出在哪里? 内核模块方面的。
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!
  • 请问linux下GUI开发的问题!
  • 请问出现fstab文件丢失该怎么修复呀?
  • 请问一个奇怪的问题!
  • 请问在网页中打开的新窗口,如何让其居中。
  • 请问我该学什么了


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3