Powered By Blogger

Dienstag, 5. Januar 2010

Prosys.c und gauss.c

Mal ein bissel was aus meinem Fehrnlehrgang.

Als erstes _syscall ist seit dem 2.6.18 veraltet und in den Userspace verschoben.
Siehe man syscall

http://linux-digest.blogspot.com/2009/01/your-own-system-call-in-5-easy-steps.html


recht hilfreicher Beitrag

Ich habe unter /usr/src/linux/ meinen Kernel, alte Gentoo Angewohnheit.
Daher werde ich hier immer nur L/ schreiben für das Verzeichnis.


Portage 2.1.6.13 (default/linux/x86/10.0, gcc-4.3.2, glibc-2.9_p20081201-r2, 2.6.30-gentoo-r6 i686)
=================================================================
System uname: Linux-2.6.30-gentoo-r6-i686-Intel-R-_Pentium-R-_M_processor_1.86GHz-with-gentoo-1.12.11.1
Timestamp of tree: Sat, 10 Oct 2009 19:00:01 +0000
app-shells/bash:     4.0_p28
dev-lang/python:     2.6.2-r1
sys-apps/baselayout: 1.12.11.1
sys-apps/sandbox:    1.6-r2
sys-devel/autoconf:  2.63-r1
sys-devel/automake:  1.10.2
sys-devel/binutils:  2.18-r3
sys-devel/gcc-config: 1.4.1
sys-devel/libtool:   2.2.6a
virtual/os-headers:  2.6.27-r2
ACCEPT_KEYWORDS="x86 ~x86"
CBUILD="i686-pc-linux-gnu"
CFLAGS="-O2 -march=pentium-m -pipe"



damit auch mal ein paar grundlegende Dinge bekannt sind, das Gentoo lief unter Kubuntu in der Vbox.
Dies ist durch aus sinnvoll, das in einer Virtuellen Maschine laufen zulassen, nicht nur das man sich nicht unter Umständen das System zerlegt, das Neustarten und evtl Kernelpanic sind doch recht nervig.
So kann man bei Kernel backen wenigstens noch ein Film schauen und die Virtuellen Maschinen sind doch recht schnell neugestartet.
Mit Vbox meine ich virtualbox-ose.


L/arch/x86/kernel/syscall_table_32.S

.long sys_prosys                       335*
* bei mir an dieser Stelle beim Kernel 2.6.30-gentoo-r6

L/arch/x86/include/asm/unistd_32.h

#define __NR_prosys               335

L/arch/x86/include/asm/syscall.h

asmlinkage long sys_prosys()

Makefile des Kernel ändern

core-y += /kernel /etcpp /etcpp /prosys



Gauss.c

#include <sys/syscall.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>

#define __NR_prosys    335


long prosys ()
{
return syscall(__NR_prosys);
}

main()

{
printf("Berechnung nach der Gauss-Formel \n");
printf("Die Summe ist: %d \n", prosys());
}

Prosys.c

#include<linux/linkage.h>
#include<linux/kernel.h>

asmlinkage long sys_prosys(void)

{
long ergebnis=0;
int i;

for (i=1;i<=10;i++)

{
ergebnis +=i;
printk("i=%d\n", i);
printk("ergebnis=%d\n", ergebnis);

}

return ergebnis;

}






Damit geht bei mir das Beispiel aus dem Lehrbrief.



Mfg

WSco








Technorati-Tags: ,

2 Kommentare:

  1. Servus, haste es geschafft die gauss.c in 64Bit umzuwandeln? ich rätsel da seit tagen rum,
    bekomm es aber nicht gebacken! ;-)

    AntwortenLöschen
  2. mh 64 Bit? meist du jetzt die Variable vom Type "long" oder auf einem 64Bit System?

    http://openbook.galileocomputing.de/c_von_a_bis_z/005_c_basisdatentypen_004.htm#mj079e2eabd7a8b1c078ae842ebf04920b

    Ist ein recht gute Hilfe das Buch.

    Sorry für die lange Zeit zum Antworten, aber über das FF Addon sehe ich die Kommentare nicht.


    WSco

    AntwortenLöschen