gpt4 book ai didi

linux-kernel - 如何从内核空间调用 Linux 系统调用?

转载 作者:行者123 更新时间:2023-12-04 20:59:49 25 4
gpt4 key购买 nike

我正在移植为 Linux 2.4 编写的 linux 内核模块以与 Linux 2.6 一起使用。
一些通过 syscallN() 声明的系统调用宏并包裹在 set_fs() 中代码中使用了调用。
在没有这些宏的 Linux 2.6 中,我如何仍然使用 sycall?

我知道从内核空间和 syscallN() 使用系统调用是一种不好的体验。宏在大多数平台上都被破坏了。任何合理的替换方式getuid , geteuid , mknod , chown , unlink , sched_yield内核空间中的系统调用受到赞赏。

最佳答案

current->uidcurrent->euid可以代替前两个。
schedule()应该适用于最后一个。

文件系统操作看起来更复杂:你可以试试看 sys_chown() , sys_mknod() , 和 sys_unlink()被导出(可供任何模块使用)。如果他们工作,那就太好了。有一些useful tips here .否则,您必须更深入地挖掘:
chown系统调用在 fs/open.c 中定义.乍一看,我不明白为什么您不能将该代码复制到您自己的“kernel_chown”函数中并试一试。
mknodatunlink系统调用位于 fs/namei.c ;他们最终调用 vfs_mknod()vfs_unlink() , 分别。也许您可以复制该代码或从那里弄清楚它是如何完成的。

关于linux-kernel - 如何从内核空间调用 Linux 系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2070514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com