Я добавил простой системный вызов, который печатает привет, используя printk. Для этого я добавил следующую строку в 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»
Когда я генерирую 32-битное приложение, добавив флаг «-m32», оно завершается неудачно с -ENOSYS
syscall_0x1b2(0x5663bfd0, 0xffb09a8c, 0x5663a5a4, 0x1, 0xffb09a84, 0xffb09a8c) = -1 (errno 38)
Что такое «общее» поле во втором столбце таблицы системных вызовов. Нужно ли нам снова объявлять в 32-битной таблице системных вызовов доступ к 32-битным приложениям?