我在从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] 删除。
我来说两句