Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在x86 ubuntu linux上添加自定义系统调用_Linux_Operating System_Kernel_System Calls - Fatal编程技术网

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

无法在x86 ubuntu linux上添加自定义系统调用,linux,operating-system,kernel,system-calls,Linux,Operating System,Kernel,System Calls,我是新手,刚刚了解了内核,我正在尝试向内核4.20.4添加一个自定义调用。这就是我所做的步骤 首先,我创建包含代码的文件(kernel/printmsg.c) 最后,我通过添加以下行将系统调用添加到arch/x86/entry/syscalls/syscall_64.tbl上的syscall表中(我正在64位Ubuntu上构建该表): 548 64 printmsg系统\u printmsg 现在,我继续运行make。但是,它有以下错误: arch/x86/entry/syscall_64.o:

我是新手,刚刚了解了内核,我正在尝试向内核4.20.4添加一个自定义调用。这就是我所做的步骤

  • 首先,我创建包含代码的文件(
    kernel/printmsg.c
  • 最后,我通过添加以下行将系统调用添加到
    arch/x86/entry/syscalls/syscall_64.tbl上的syscall表中(我正在64位Ubuntu上构建该表):
  • 548 64 printmsg系统\u 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系统调用可以以“uu x64_sys”开头

    因此,我没有使用
    548 64 printmsg sys\u printmsg
    ,而是将其更改为
    548 64 printmsg\uuuuux64\u sys\u printmsg
    。然后一切都开始了


    希望这能帮助所有可能有此问题的人。

    可以在此提交中找到代码更改
    obj-y = fork.o exec_domain.o panic.o \
            // A few more lines
    obj-y += printmsg.o // I added this line
    
    arch/x86/entry/syscall_64.o:(.rodata+0x1120): undefined reference to `sys_printmsg'
    Makefile:1034: recipe for target 'vmlinux' failed
    make: *** [vmlinux] Error 1