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