Ich versuche, einen Systemaufruf in Linux zu schreiben. I die unistd.h
modifiziert, syscall_32.tbl
und sys.c
wie folgt jeweils:Get 'errno 38: Funktion nicht implementiert' während eines Systemaufrufs
/*
#define __NR3264_fadvise64 223
__SC_COMP(__NR3264_fadvise64, sys_fadvise64_64, compat_sys_fadvise64_64)
*/
#define __NR_zslhello 223
__SYSCALL(__NR_zslhello, sys_zslhello)
223 i386 zslhello sys_zslhello
asmlinkage int sys_zslhello(int ret)
{
printk("Hello, my syscall!\n");
return ret;
}
Nachdem der Kernel kompilieren, verwende ich syscall(223, 10000);
, ist der Rückgabewert -1
und die errno
ist 38
, dh die Funktion ist nicht implementiert. Hast du irgendwelche Ideen dazu?
Übersetzen Sie Ihren Code als Modul? Haben Sie 'Ziele' gemacht, nachdem Sie den Code geändert haben? Ich denke auch, dass dies zu StackOverflow gehen sollte, da es sich eindeutig um eine Programmierfrage handelt. –
@SamiLaine Ich habe einen Systemaufruf im Kernel-Code hinzugefügt und den Kernel kompiliert. Es ist kein separates Modul. – zijuexiansheng
Warum kommentieren Sie 'sys_fadvise64_64' aus? Andere Teile des Kernels könnten sich darauf verlassen .... Sie sollten es nummeriert $ last_syscall_number + 1 haben. Außerdem könnten Sie die Tatsache treffen, dass das System 64 Bit ist, also sollten Sie es ändern 'syscall_64.tbl'. – fedepad