Linux系统调用接口

时间:2015-02-18 00:22:41

标签: linux driver freebsd system-calls

所以,我正在从FreeBSD转到Linux上进行驱动程序编写,我有两个问题。

在FreeBSD中,有following

struct sysent {                 /* system call table */
   int     sy_narg;        /* number of arguments */
   sy_call_t *sy_call;     /* implementing function */
   au_event_t sy_auevent;  /* audit event associated with syscall */
   systrace_args_func_t sy_systrace_args_func; 
   /* optional argument conversion function. */
   u_int32_t sy_entry;     /* DTrace entry ID for systrace. */
   u_int32_t sy_return;    /* DTrace return ID for systrace. */
   u_int32_t sy_flags;     /* General flags for system calls. */
   u_int32_t sy_thrcnt;
   };

现在,当我写一个驱动程序或其他什么时,我可以填写它,并通过SYSCALL_MODULE(9)向用户空间提供系统调用。

在用户空间中,我可以使用:

int mod_find(const char *)mod_stat(int mod_id, module_stat *)syscall(int syscall_num, [args])

用于查找,获取详细信息和执行任意系统调用的函数。

我在Linux中知道我们有syscall(2),但我们是否有查找系统调用号码的功能?另外,如何让我的模块可供用户空间使用甚至调用它?

编辑:我做了一些阅读,我知道我可以改变syscall_64.tbl;然而,这是静态的,我想通过/dev动态而不是必需的东西。

0 个答案:

没有答案