日期:2014-05-16  浏览次数:20535 次

求助:内核系统调用的使用问题
才开始内核模块是在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);