【发布时间】:2020-01-18 06:22:19
【问题描述】:
我添加了一个简单的系统调用,它使用 printk 打印 hello world。为此,我在 syscall_64.tbl 中添加了以下行
434 common hello __x64_sys_hello
写了一个简单的应用,从用户空间调用系统调用
#define _GNU_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/syscall.h>
#include <string.h>
int main(void)
{
long return_value = syscall(434);
printf("return value from syscall: %ld\n", return_value);
return 0;
}
它可以工作,并且在 dmesg 中添加了“Hello World”字符串
当我通过添加“-m32”标志生成 32 位应用程序时,它会因 -ENOSYS 而失败
syscall_0x1b2(0x5663bfd0, 0xffb09a8c, 0x5663a5a4, 0x1, 0xffb09a84, 0xffb09a8c) = -1 (errno 38)
系统调用表第二列的“common”字段有什么用。我们是否需要在 32 位系统调用表中再次声明以供 32 位应用程序访问?
【问题讨论】:
标签: c linux linux-kernel linux-device-driver system-calls