我在我的Linux内核中定义了一个'Helloworld'系统调用并重新编译了它。系统调用的代码为:
#include<linux/kernel.h>
#include<linux/init.h>
#include<linux/sched.h>
#include<linux/syscalls.h>
#include "processInfo.h"
asmlinkage long sys_listProcessInfo(void)
{
printk("Hello World. My new syscall..FOSS Lab!n");
return 0;
}
但是,当我使用另一个内核版本来调用此系统调用时,使用以下代码:
#include<stdio.h>
#include<linux/kernel.h>
#include<sys/syscall.h>
#include<unistd.h>
int main()
{
long int var = syscall(326);
printf("Returning: %ldn",var);
return 0;
}
变量var
获取值-1。我想知道var
如何获得-1而不是显示错误。
为什么您期望错误?syscall
函数存在,链接器可以解析它。因此,编译器或链接器不会出现错误。运行可执行文件时,旧内核的syscall
函数检测到326是一个无效的系统调用号码,函数返回-1,可能将errno
设置为ENOSYS
=未实现的系统调用。