Я новичок в этом и только изучаю ядро и пытаюсь добавить пользовательский вызов в ядро 4.20.4.Это шаги, которые я сделал.
- Сначала я создаю файл (
kernel/printmsg.c
), который содержит код.
#include <linux/kernel.h>
#include <linux/syscalls.h>
SYSCALL_DEFINE1(printmsg, int, i)
{
printk(KERN_DEBUG, "TESTING %d", i);
return 1;
}
Далее я добавляю этот файл в
kernel/Makefile
obj-y = fork.o exec_domain.o panic.o \
// A few more lines
obj-y += printmsg.o // I added this line
Наконец, я добавляю системный вызов к таблице системных вызовов на
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
Я долго чесал голову за это, но я не могу понять, что пошло не так.
Надеюсь, что кто-нибудьчто удалось найти проблему может помочь бедной душе.Заранее спасибо!