实现自己的系统调用linux

实现自己的系统调用linux

我接到一个任务来实现我自己的系统调用,我必须使用最新的 kernal v5.9。下载linux-5.9-rc8(即使稳定版本也会出现相同的错误)并解压。然后 cd 进入该目录。

mkdir hello && cd hello

制作一个文件hello.c并添加以下代码

#include <linux/kernel.h>
asmlinkage long sys_hello(void) 
{
    //printk prints to the kernel’s log file.
    printk("Hello world\n");
    return 0;
}

制作了一个Makefile并添加了以下代码

obj-y := hello.o

然后 cd .. 并打开目录的 Makefile 并编辑行

core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ hello/

在文件 arch/x86/entry/syscalls/syscall_64.tbl 中,在文件末尾添加

548     64      hello   sys_hello

在文件include/linux/syscalls.h中,在#endif语句的末尾和之前添加

asmlinkage long sys_hello(void);

使用命令的默认配置

make defconfig

最后

make -j4

出现以下错误

ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): undefined reference to `__x64_sys_hello'
make: *** [Makefile:1162: vmlinux] Error 1

我遵循的这些步骤是从在线教程网站复制的,尝试了几乎所有网站,但在编译内核的等待时间为 2-3 小时之外,仍然遇到相同的错误。为了编译内核,还需要某些软件包,我在步骤中没有提到它们。

相关内容