我接到一个任务来实现我自己的系统调用,我必须使用最新的 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 小时之外,仍然遇到相同的错误。为了编译内核,还需要某些软件包,我在步骤中没有提到它们。