Создание своего системного вызова (Создание своего системного вызова)

Модератор: Модераторы разделов

Аватара пользователя
netelis
Сообщения: 95
ОС: Debian Wheezy i686

Создание своего системного вызова

Сообщение netelis »

У меня ядро linux-2.6.32. Создаю свой системный вызов mysyscall. Прописую в файл linux-2.6.32/arch/x86/kernel/syscall_table_32.S, и в файл linux-2.6.32/include/asm-generic/unistd.h номер системного вызова #define __NR_mysyscall <номер системного вызова>, для того чтоб функция была доступна с пространства пользователя прописую её в файл /usr/include/bits/syscall.h #define SYS_mysyscall __NR_mysyscall.Там чтоб системный вызов был доступен в пространстве пользователя надо создать файл в /usr/include/mysyscall.h
#define __NR_mysyscall номер моего системного вызова
_syscalln(long,mysyscall,type1,arg1,type2,arg2,.....,typen,argn);
Далее я подключаю этот файл в своей пользовательской программе, и всё равно выдаёт что функция mysyscall не доступна. Ещё пишут что макрос _syscalln находится в файле /usr/src/linux/include/asm-i386/unistd.h. Мой системный вызов не имеет параметров и должен вывести одну строку.

Код: Выделить всё

asmlinkage long sys_mysyscall(void)
{
printk(KERN_INFO"mysyscall\n");
return 5;
};

При компиляции выводит
In file included from p1.c:3:
/usr/include/mysyscall.h:2: error: expected declaration specifiers or ‘...’ before numeric constant
p1.c: In function ‘_syscall0’:
p1.c:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
p1.c:11: error: expected declaration specifiers before ‘;’ token
/usr/include/mysyscall.h:2: error: parameter name omitted
p1.c:11: error: expected ‘{’ at end of input
Что у меня не так?
Спасибо сказали: