如何使用Linux内核模块中的Linux系统调用
发布时间:2020-12-14 01:28:34 所属栏目:Linux 来源:网络整理
导读:我在 Linux内核模块内调用系统调用时遇到一些困难.系统调用已经过测试,并且可以从标准的c用户空间程序中正常工作,但我似乎无法获得内核模块来编译和运行它们. 在我的用户程序中,我包含以下代码,系统调用有效: #include linux/unistd.h #define __NR_sys_myc
我在
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 %ldn",value); 但是当我在我的Linux内核模块中尝试相同的事情时,我得到一堆错误,或者说错误:隐式声明函数’syscall'(如果我不包括_syscall定义)或者一长串关于语法的错误if我…所以我的假设是我需要内核空间版本来调用系统调用.我是对还是错? //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 %ldn",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 %ldn",value); return 0; } static void finish_exit(void) { printk("Done!n"); } module_init(start_init); module_exit(finish_exit); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |