Здравствуйте Хочу создать новый системный вызов. я уже пробовал, но не получалось... Я хочу, чтоб в параметрах вызову передавался адрес строки , куда скопировать строку "Hello!" сначала добавил в arch/x86/ia32/ia32entry.S: Код (Text): ........ .quad sys_epoll_pwait .quad compat_sys_utimensat /* 320 */ .quad compat_sys_signalfd .quad sys_timerfd_create .quad sys_eventfd .quad sys32_fallocate .quad compat_sys_timerfd_settime /* 325 */ .quad compat_sys_timerfd_gettime .quad sys_necrosyscall /* ЭТ Я ДОБАВИЛ ...... дальше добавил в include/asm/unistd_32.h: Код (Text): ...... #define __NR_tee 315 #define __NR_vmsplice 316 #define __NR_move_pages 317 #define __NR_getcpu 318 #define __NR_epoll_pwait 319 #define __NR_utimensat 320 #define __NR_signalfd 321 #define __NR_timerfd_create 322 #define __NR_eventfd 323 #define __NR_fallocate 324 #define __NR_timerfd_settime 325 #define __NR_timerfd_gettime 326 #define __NR_necrosyscall 327 /* ВОТ ТУТ ДОБАВИЛ */ ....... дальше само тело сист. вызова пишу в kernel/sys.c: Код (Text): asmlinkage long sys_necrosyscall (char *dst) { char buf[50]; strcpy(buf, "Hello!"); copy_to_user(dst, buf, strlen(buf)); return 121; } пересобрал ядро... теперь проверяю системный вызов: Код (Text): #include <stdio.h> #define __NR_necrosyscall 327 int main(void) { int r; char temp[50]; r = syscall(__NR_necrosyscall, temp); printf("%s\n", temp); printf("syscall возвратил %d\n", r); return 0; } компилирую, запускую.. выводит: Похоже, syscall вообще не запрегистрировался я делаю так, как описано в книге Р. Лава, только не все совпадает с тем, как в книге описано, похоже, сорцы ядра с того времени оч изменились. хотя у меня тоже 2.6 , которое в книге и описывается. помогите создать нормальный syscall , плиз.. И кстати.. еще вопрос.. интересно очень... макрос syscall где определен? если это вообще макрос. PS. тему уже эту создавла сегодня утром, только че-то ее не вижу нигде ^_^. или это у меня браузер заглючил, написал что тема создалась или тему удалили О_о
уже вроде разобрался с проблемой ) надо было не в arch/x86/ia32/ia32entry.S добавлять, а в arch/x86/kernel/syscall_table_32.S