Syscall und Werteübergabe
-
Hallo Community,
bin neu hier und suche Rat und Hilfe.
Ich bin absolut neu in C und mache gerade einen Linux-Kurs. Nichts weltbewegendes, aber im Augenblick knackig für "Nichtskönner" wie mich.
Frage: Ich soll einen Syscall schreiben. Das ist passiert mit:#include <linux/linkage.h>
asmlinkage long sys_prosys(void)
{
long ergebnis=0;
int i;
for (i=1;i<=10;i++)
{
ergebnis +=i;
}
return ergebnis;
}Kernel comiliert und Rest alles OK.
Syscall wird aufgerufen mit:#include <sys/syscall.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>#define __NR_prosys 337
long prosys ()
{
return syscall(__NR_prosys);
}main()
{
printf("Berechnung nach der Gauss-Formel \n");
printf("Die Summe ist: %d \n", prosys());
}GCC gemacht etc. Auch alles OK und es kommt 55 dabei raus. Es geht um Gaussche Summenformel.Wunderbar. So soll es sein.
Zwei Fragen:
Wie ist der Syscall für 64 Bit Rechner ? Da habe ich gar keine Ahnung, weil ich keinen habe.
Und zweitens: Wie kann ich den Aufruf und Syscall so verändern, dass ich einen Wert übergeben kann und mit dem Start des Programms gefagt werde.
ZB Welchen Wert wollen Sie berechnen o.ä.
Brauche nur ein paar Hinweise, weil ich 4 Wochen komplett neben der Spur war.
Habe schon ewig gebraucht um Kernel zu compilieren.
Wäre für jeden Tipp dankbar. Danke