Autor Thema: Syscall definieren.  (Gelesen 4622 mal)

sence123

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« am: 12. January 2010, 17:02 »
Hallo,

ich benötige kurz mal hilfe bei einer implementation eines Syscalls unter x86_64bit System:

der code (übungsaufgabe)
# include <linux/linkage.h>

asmlinkage long sys_prosys(long n) {
long ergebnis=0;
int i;

for(i=1; i<=10; i++) {
ergebnis +=i;
}
ergebnis = ergebnis + n;
return ergebnis
}

1. ich erstelle einen neuen Ordner im Patch oder kompletten source Kernel prosys/

2. erstelle ich das Makefile im selben ordner:
obj-y := prosys.o

3. in globalen Makefile eintragen:
core-y. += kernel/ mm/ fs/ usw ... ... ... .... prosys/

4. dies in ter unistd.h eintragen
#define __NR_prosys 242

5. #define NR_syscalls um ein erhöhen

6. in arch/z.b i386/kernel in der datei syscall_table.S
.long sys_prosys
eintragen

7. wie mache ich das nun bei x86_64 bit systemen ?

vielen Dank

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 12. January 2010, 18:16 »
Hallo,


bei 7 Punkten sehe ich nur ein Fragezeichen. Was genau möchtest Du wissen?
Ich hab zwar nur wenig Ahnung von der konkreten Implementierung der SYSCALLs im Linux-Kernel aber ich denke das die Punkte 1 bis 6 die Antwort auf die Frage in Punkt 7 sind.
Mal ein anderer Gedanke : sollte Dein Lehrer/Prof/whatever Hausaufgaben nicht so erklären das Du diese ohne externe/fremde Hilfe lösen kannst. Ich will nicht unhöflich sein, aber Hausaufgaben dienen doch dazu den Stoff des Unterrichts zu verfestigen und dieses Ziel wird nicht erreicht wenn man die Hausaufgaben nicht selber macht.


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

sence123

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 12. January 2010, 23:31 »
hey, ich nimm es dir nicht übel :- )
eigentlich hast du recht.

aber leider nein, habe bis jetzt alles ohne hilfe hinbekommen, jedoch wurde mir dort einfach ein brocken vorgelegt und sowas wie, hier fress, wenn ich das sagen darf.

zudem wird in dem Lehrbrief (fern studium) noch mit dem alten kernen 2.6.1 gearbeitet..... was mich auch schon nervt, da syscall ein paar sprünge später anders anfgerufen wird.


zudem wurde im lernbrief die defination des eigenen aufrufes nicht mit in syscall.h erläutert, was ich in anderen Tutorials fand.

ich erhalte mehrere fragen von anderen Mitschülern bezüglich dieser Aufgabe, somit bestätigt das die unausführlichkeit des Lernb.

deshalb suche ich hier rat


kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 13. January 2010, 09:30 »
jedoch wurde mir dort einfach ein brocken vorgelegt und sowas wie, hier fress, wenn ich das sagen darf.
Wenn du "friss" sagst, darfst du das. :)

Du hast leider nicht genau beschrieben, wo dein Problem liegt. Ich gehe davon aus, dass Schritt 1-5 genau die gleichen sind, und du bei Schritt 6 eben ein anderes Unterverzeichnis von arch nehmen musst. Einfach kurz nachvollziehen kann ich das nicht, weil i386 und x86_64 ja mittlerweile eine Architektur sind und der Code deswegen vermutlich etwas anders aussieht als bei deinem antiken Kernel.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen