我可以从模块添加一个系统调用吗?
答
在某些内核版本中,可以通过更改sys_call_table来添加或修改systemcall
。但是因为这个表不打算在运行时改变,所以它没有保护。改变表格会导致竞争状况。即使没有竞赛条件,在使用或堆叠模块时也会出现相关问题。由于从模块更改sys_call_table
时出现问题,该符号不再在新内核中导出。换句话说,如果在尝试加载模块时得到"unresolved symbol sys_call_table"
,这意味着模块中存在一个错误,并且内核不再接受这样的错误模块。
答
听起来像一个非常糟糕的主意,不管你是否可以。如果你的新系统调用将在文件/设备上运行,也许你可以使它成为一个ioctl或类似的东西,而不是使它成为自己的系统调用?
如果你正在谈论一个特定的内核,你应该添加一个标签(例如'linux-kernel')。 – caf 2010-07-31 01:15:21