1
一个KLD我写了FreeBSD新的KLD。 我有一个C文件是这样的: Question about writing my own system call in FreeBSD - 但我的代码的功能是一个有点不同。我在kernelspace中初始化一个变量,我的函数名是my_KLD
。写了FreeBSD
我可以加载它没有问题与“kldload”,但我有一个问题:我要通过另一个C文件使用此kld。
文件结构是这样的:
int
main(int argc, char **argv)
{
f (atoi(argv[1]) ;
}
f (int x) {
printf("hi\n");
int syscall_num ;
struct module_stat stat ;
stat.version = sizeof(stat) ;
modstat (modfind("my_KLD") , &stat) ;
syscall_num = stat.data.intval ;
return syscall (syscall_num , x) ;
}
但是,当我把这个文件与自变量x 结果是:
hi
Bad System call (core dumped)
还有什么应该怎么办?
在您的示例代码中,您没有检查modstat()调用的结果。它可能会以一些有趣的方式失败 - 你应该检查它的结果,如果它不是0,就调用err()。如果有错误信息,可能会帮助你弄清楚结果。 – 2013-07-22 18:07:41