2013-07-15 13 views
6

Czytam Linux Kernel Development autorstwa Roberta Love'a i jednym z ćwiczeń, które wykonuje, jest stworzenie wywołania systemowego (strona 106). Problem polega na tym, że nie mogę znaleźć pliku tabeli wywołań systemowych w wersji 3.7 dla architektury x86_32. Wiem, że używa wersji 2.6.xx, ale nie wiem, czy ta wersja będzie działała z dystrybucją, której używam, ponieważ jest dość stara, więc wolałabym wolę v3.9.Gdzie jest tabela wywołań systemowych w jądrze Linux?

Więcej informacji: podczas wykonywania której mówię jest następujący: Dodaj wpis do końca table.This wywołań systemowych należy zrobić dla każdej architektury, który obsługuje połączenia systemowego (które dla większości nazywa się wszystkie architektury). Pozycja układu w tabeli, zaczynająca się od zera, jest jego numerem systemowym. Na przykład, dziesiąty wpis na liście ma przypisaną liczbę syscall dziewięć.

rozwiązać, stosując następujące metody: tabela wywołanie systemowe znajduje się w arch/x86/syscalli/syscall_32.tbl dla architektury x86. Dzięki Sudip Mukherjee za jego pomoc.

Innym podejściem jest następujący: http://lists.kernelnewbies.org/pipermail/kernelnewbies/2013-July/008598.html Dzięki Srinivas Ganji za pomoc too.

+0

skąd go wyszukać? – mnagel

+0

W książce mówi się, że znajduje się ona w punkcie S, ale o ile wiem, została zmieniona w ostatnich wersjach.Przeszukałem więc arch/x86/kernel, gdzie znalazłem plik entry_32.S, ale nie znalazłem tam tabeli ani – Iker

+0

Wydaje się, że to [tutaj] (http://lxr.linux.no /#linux+v3.9/arch/x86/ia32/syscall_ia32.c#L18) – levengli

Odpowiedz

6

Utwórz folder testowy w korzeniu src: src/linux-3.4/testing/, a następnie umieścić wewnątrz tego folderu:
- plik zawierający kod syscall: strcpy.c

#include <linux/linkage.h> 
#include <linux/kernel.h> 
asmlinkage long sys_strcpy(char *dest, char *src) 
{ 
    int i=0; 
    while(src[i]!='\0') { 
     dest[i]=src[i++]; 
    } 
    dest[i]='\0'; 
    printk(" Done it "); 
    return 0; 
} 

i Makefile, który zawiera tylko następującą linię:

obj-y:=strcpy.o 

dodania wpisu do tabeli syscall i prototyp funkcji:
- Edycja plików src/linux-3.4/arch/x86/syscalls/syscall_32.tbl b y dodanie tej linii do wejścia 223, który jest wolny

223  i386 strcpy   sys_strcpy 

edytować plik src/linux-3.4/include/linux/syscalls.h dodając prototyp funkcji

asmlinkage long sys_strcpy(char *dest, char *src); 

Edycja głównym Makefile w katalogu src (src/linux-3.4/Makefile) poprzez dodanie testowanie folder utworzony przed, jak następuje:

core-y  += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ testing/ 
8

z jądrem linux 4.2, tabela wywołanie systemowe został przeniesiony z arch/x86/syscalls/syscall_64.tbl t O arch/x86/entry/syscalls/syscall_64.tbl

Oto odpowiadające commit:

commit 1f57d5d85ba7f1f467173ff33f51d01a91f9aaf1 
Author: Ingo Molnar <[email protected]> 
Date: Wed Jun 3 18:36:41 2015 +0200 

    x86/asm/entry: Move the arch/x86/syscalls/ definitions to arch/x86/entry/syscalls/ 

    The build time generated syscall definitions are entry code related, move 
    them into the arch/x86/entry/ directory. 
Powiązane problemy