如何使用Linux内核模块中的Linux系统调用

小李

我在从Linux内核模块内部调用系统调用时遇到一些困难。系统调用已通过标准c用户空间程序进行了测试,并且可以正常工作,但是我似乎无法获得内核模块来进行编译和运行。

在我的用户程序中,我包含以下代码,并且系统调用有效:

#include <linux/unistd.h>   
#define __NR_sys_mycall 343

extern long int _syscall(long int_sysno,...)__THROW;

//and then a simple call is done as such
long value = syscall(__NR_sys_mycall);

printf("The value is %ld\n",value);

但是,当我在Linux内核模块中尝试相同的操作时,会遇到一堆错误,要么说是错误:函数'syscall'的隐式声明(如果我不包括_syscall定义),要么是关于语法的一长串错误,如果我愿意...所以我的假设是我需要内核空间版本来调用系统调用。我是对还是错?

//My LKM code
#include <linux/module.h>
#include <linux/unistd.h>
#define __NR_sys_mycall 343

static int start_init(void)
{
   long value = syscall(__NR_sys_mycall);
   printk("The value is %ld\n",value);

   return 0;
}

static void finish_exit(void)
{
      printk("Done!\n");
}

module_init(start_init);
module_exit(finish_exit);
数量

您可以直接调用sys_mycall

#include <linux/module.h>
#include <linux/unistd.h>


static int start_init(void)
{
   long value = sys_mycall (pass_arguments)
   printk("The value is %ld\n",value);

   return 0;
}

static void finish_exit(void)
{
      printk("Done!\n");
}

module_init(start_init);
module_exit(finish_exit);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章