当前位置: 技术问答>linux和unix
求助:内核系统调用的使用问题
来源: 互联网 发布时间:2016-02-29
本文导语: 才开始内核模块是在2.6.8上开发的,用到了time,truncate,getcwd这几个系统调用,使用起来很简单,只需要在文件前面加上: static inline _syscall2(int, truncate, const char*, path,unsigned long, length); 然后在后面函数里直接使...
才开始内核模块是在2.6.8上开发的,用到了time,truncate,getcwd这几个系统调用,使用起来很简单,只需要在文件前面加上:
static inline _syscall2(int, truncate, const char*, path,unsigned long, length);
然后在后面函数里直接使用就可以了。
现在要移植到2.6.20上,用原拉这种方式,将会显示:
security/sec/sec_user.c:12: error: syntax error before "truncate"
security/sec/sec_user.c:12: warning: type defaults to `int' in declaration of `_syscall2'
security/sec/sec_user.c:12: warning: function declaration isn't a prototype
而且在2.6.20内核中没找到_syscall2这个宏。
有试了一种方式,直接在文件中包含#include ,然后调用sys_truncate,此时当内核编译完后,就会提示sys_truncate没定义。
WARNING: "sys_truncate" [security/sec/sec.ko] undefined!
请大家指点一下到底怎么该啊?
static inline _syscall2(int, truncate, const char*, path,unsigned long, length);
然后在后面函数里直接使用就可以了。
现在要移植到2.6.20上,用原拉这种方式,将会显示:
security/sec/sec_user.c:12: error: syntax error before "truncate"
security/sec/sec_user.c:12: warning: type defaults to `int' in declaration of `_syscall2'
security/sec/sec_user.c:12: warning: function declaration isn't a prototype
而且在2.6.20内核中没找到_syscall2这个宏。
有试了一种方式,直接在文件中包含#include ,然后调用sys_truncate,此时当内核编译完后,就会提示sys_truncate没定义。
WARNING: "sys_truncate" [security/sec/sec.ko] undefined!
请大家指点一下到底怎么该啊?
|
EXPORT_SYMBOL(_syscall2);
|
如果你不厌其烦的话,直接用汇编写算了,就是自己从头使用系统调用,但是你要先查出你想的系统调用的调用数字号是多少