我正在移植为Linux 2.4编写的linux内核模块,以便与Linux 2.6一起使用。
通过syscallN()
宏声明并包含在set_fs()
调用中的一些系统调用在代码中使用。
如何在Linux 2.6中仍然使用那些不存在这些宏的sycall?
我知道从内核空间使用系统调用很不好,并且syscallN()
宏在大多数平台上都被破坏了。我们赞赏在内核空间中替换getuid
,geteuid
,mknod
,chown
,unlink
,sched_yield
系统调用的任何合理方法。
答案 0 :(得分:3)
current->uid
和current->euid
可以替代前两个。
schedule()
应该适用于最后一个。
文件系统操作看起来更复杂:您可以尝试查看是否导出sys_chown()
,sys_mknod()
和sys_unlink()
(可供任何模块使用)。如果他们工作,那很好。有一些useful tips here。否则,你必须深入挖掘一下:
chown
系统调用在fs/open.c
中定义。一目了然,我不明白为什么你不能将这些代码复制到你自己的“kernel_chown”函数中并尝试一下。
mknodat
和unlink
系统调用位于fs/namei.c
;他们最终分别致电vfs_mknod()
和vfs_unlink()
。也许你可以复制那些代码或弄清楚它是如何完成的。