gpt4 book ai didi

linux - 无法在 x86 ubuntu linux 上添加自定义系统调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:37 28 4
gpt4 key购买 nike

我是新手,刚刚了解内核,我正在尝试添加对内核 4.20.4 的自定义调用。这是我执行的步骤。

  1. 首先,我创建了包含代码的文件 (kernel/printmsg.c)。
#include <linux/kernel.h>
#include <linux/syscalls.h>

SYSCALL_DEFINE1(printmsg, int, i)
{
printk(KERN_DEBUG, "TESTING %d", i);
return 1;
}
  1. 接下来,我将此文件添加到 kernel/Makefile
obj-y = fork.o exec_domain.o panic.o \
// A few more lines
obj-y += printmsg.o // I added this line
  1. 最后,我将系统调用添加到 arch/x86/entry/syscalls/syscall_64.tbl 上的系统调用表(我在 64 位 Ubuntu 上构建它),方法是附加此行:

548 64 printmsg sys_printmsg

现在,我继续运行 make。但是,它有这个错误:

arch/x86/entry/syscall_64.o:(.rodata+0x1120): undefined reference to `sys_printmsg'
Makefile:1034: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1

我为此绞尽脑汁很长时间,但我似乎无法意识到哪里出了问题。

希望任何设法找到问题的人都能帮助可怜的灵魂。提前致谢!

最佳答案

好的,经过几个小时的反复试验,我终于找到了问题所在。从 linux 内核 v4.17 开始,x86_64 系统调用可能以“__x64_sys”开头。

因此,我没有使用 548 64 printmsg sys_printmsg,而是将其更改为 548 64 printmsg __x64_sys_printmsg。然后一切正常。

希望这对可能遇到此问题的每个人都有帮助。

关于linux - 无法在 x86 ubuntu linux 上添加自定义系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54840772/

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