Написание системных вызовов для Linux - PullRequest
1 голос
/ 11 ноября 2009

я пытаюсь написать системный вызов. Я следовал за этими шагами:

linux / arch / x86 / kernel / syscall_table_32.S ---->. long sys mycall

linux / include / linux / syscalls.h --------> asmlinkage int sys mycall (int i, int j);

linux / arch / x86 / include / asm / unistd_32.h ----> #define NR mycall 333

Я изменил linux / Makefile на core-y + = kernel / mm / fs / ipc / security / crypto / block / mycall /

Я создал каталог под названием mycall. ----> Linux / MYCALL

Внутри этого файла я поместил mycall.c:

#include <linux/kernel.h>
asmlinkageintsysmcall(int i,int j )
{
return i + j ;
}

6) Я создаю Makefile. ---> linux / mycall / Makefile.

obj−y := mycall.o

Затем, когда я пытаюсь выполнить этот системный вызов, он всегда возвращает -1. Эти строки - мой тестовый код в Desktop. testmycall.c

#include <stdio.h>
#include <sys/syscall.h>
#define __NR_mycall 333

int main(void)
{
int x1=10, x2=20, y ;
y = syscall (__NR_mycall, x1, x2 );
printf (”%d\n”,y );
return 0 ;
}

Тогда я перекомпилирую ядро. Если я скомпилирую код, нет ничего плохого. Когда я запускаю эту программу, она не суммирует два значения. Просто возвращает всегда -1. Что не так с моим системным вызовом? (когда я перекомпилировал ядро, система не тратила впустую больше 3 секунд. Думаю, здесь может быть проблема)

1 Ответ

2 голосов
/ 11 ноября 2009

Перекомпилируйте ядро ​​и перезагрузитесь. Или это модуль ядра?

...