【问题标题】:Unable to add a custom system call on x86 ubuntu linux无法在 x86 ubuntu linux 上添加自定义系统调用
【发布时间】:2019-07-17 08:32:25
【问题描述】:

我是新手,刚刚了解内核,我正在尝试向内核 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 operating-system kernel system-calls


    【解决方案1】:

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

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

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

    【讨论】:

    • 代码改动可以在本次提交link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2021-05-11
    • 2020-01-17
    • 2012-10-04
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多