求助:内核系统调用的使用问题
才开始内核模块是在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 <linux/syscalls.h> ,然后调用sys_truncate,此时当内核编译完后,就会提示sys_truncate没定义。
WARNING: "sys_truncate " [security/sec/sec.ko] undefined!
请大家指点一下到底怎么该啊?
------解决方案--------------------如果你不厌其烦的话,直接用汇编写算了,就是自己从头使用系统调用,但是你要先查出你想的系统调用的调用数字号是多少
------解决方案--------------------EXPORT_SYMBOL(_syscall2);