Kernel module in c++ erstellen ???

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
juschold
Beiträge: 24
Registriert: 17.10.2006 16:12:57

Kernel module in c++ erstellen ???

Beitrag von juschold » 08.11.2006 10:08:29

Hallo

kann man in Kernelmodule in C++ erstellen???
ich Arbeite momentan mit Debian und den Kernelpatch RTAI!!!

Vielleicht meis einer was!!!


Grüße
juschold

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 08.11.2006 10:20:25

nein.
Und wenn RTAI!!! was mit realtime zu tun hat,
schon zweimal nicht. Denk nichtmal dran.
Danke.
Beware of programmers who carry screwdrivers.

juschold
Beiträge: 24
Registriert: 17.10.2006 16:12:57

Beitrag von juschold » 08.11.2006 10:40:42

Warum, geht das nicht ???

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 08.11.2006 11:16:31

Dir ist klar, dass OO einiges an Overhead mit sich bringt, was zu Realtime nicht so recht dazu passt?

juschold
Beiträge: 24
Registriert: 17.10.2006 16:12:57

Beitrag von juschold » 08.11.2006 11:36:41

also wenn ich das richtig verstehe kann ich das Projekt vergessen. Ich muss mein source auf C sprache bringen damit ich in RTAI oder RTLinux eine chance habe!!!

Ist das Grundsätzlich so das ich kernelmodule in C schreiben muss?
Mich wundert es ein wenig das man in Linux hier nur mit C weiter kommt, das ist für mich ein rückschritt!!!!

Benutzeravatar
uljanow
Beiträge: 529
Registriert: 20.09.2005 21:14:00

Beitrag von uljanow » 08.11.2006 12:23:40

nepos hat geschrieben:Dir ist klar, dass OO einiges an Overhead mit sich bringt, was zu Realtime nicht so recht dazu passt?
OO ist ein Paradigma, dass von C++ unterstützt wird. Man kann genauso gut auch einen Kernel in C++ schreiben.

Vor kurzem gab es ja mal wieder eine Diskussion in der LKML zu dem Thema. AFAIK wäre es viel zu umständlich Module in C++ zu erlauben.

Benutzeravatar
armin
Beiträge: 2682
Registriert: 17.03.2005 11:49:14

Beitrag von armin » 08.11.2006 12:53:59

juschold hat geschrieben:Ist das Grundsätzlich so das ich kernelmodule in C schreiben muss?
Mich wundert es ein wenig das man in Linux hier nur mit C weiter kommt, das ist für mich ein rückschritt!!!!
Ich weiß ja nicht genau, was du vor hast, aber kannst du das nicht eventuell auch im Userspace erledigen? Dann könntest du nämlich C++ problemlos nutzen...
Formerly known as Trigger.
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams

Benutzeravatar
eagle
Beiträge: 2282
Registriert: 05.11.2002 11:20:53
Wohnort: Berlin

Beitrag von eagle » 08.11.2006 12:55:59

nepos hat geschrieben:Dir ist klar, dass OO einiges an Overhead mit sich bringt, was zu Realtime nicht so recht dazu passt?
Es gibt Gerüchte die wollen einfach nicht aussterben ...

eagle
"I love deadlines. I love the whooshing sound they make as they fly by." -- Douglas Adams

juschold
Beiträge: 24
Registriert: 17.10.2006 16:12:57

Beitrag von juschold » 08.11.2006 13:22:20

ich muss ein Programm von Windows in Linux portieren. Bei diesen Programm muss man Threads anhalten und aufweken können. Dies ist im POSIX Standart mit den Funktionen "pthread_wakeup_np" und "pthread_suspend_np" hinterlegt. Leider sind diese funktionen nur im RTLinux möglich (siehe http://inf3-www.informatik.unibw-muench ... ode75.html).

Darauf hin hab ich RTLinux und RTAI installiert und festgestellt das es nicht geht!!!
Ich benötige nicht unbedingt Echtzeitverhalten, ich würde mich auch im Userspace zufieden geben. Irgendwie bin ich von Linux sehr enttäuscht

Ich weis einfach nicht mehr weiter!!!

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 08.11.2006 13:48:00

Na, das hört sich aber trotzdem schon besser an.

Bei einem aktuellen Debian-Etch mit aktuellem Kernel kannst du
die NPTL (Native POSIX Threads Library) benutzen -- ganz
ohne Realtime-Stress. Laut deinem Link sind die beiden _np
Funktionen sowieso nicht Posix, da lohnt sich die Portierung
doch doppelt ;)
Beware of programmers who carry screwdrivers.

juschold
Beiträge: 24
Registriert: 17.10.2006 16:12:57

Beitrag von juschold » 08.11.2006 13:54:25

ja stimmt, sorry _np hab ich wohl übersehen.

Gibt es bei den aktl. Kernel die gewünschten Threadfunktionen???
Bei anderen Betriebssystemen sind solche Funktionen standard (Windows, RTOS32,...)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 08.11.2006 17:56:42

juschold hat geschrieben:ich muss ein Programm von Windows in Linux portieren.!
Solltest du dann nicht den Quellcode deines Programms an das Betriebsystem "Linux" anpassen ? Stattdessen versuchst du, mittels C++ Kernelmodul, dem Linux Kernel, ein Win32 API zu entlocken 8O
Warum liest du dich nicht einfach in die Posix Signal/Thread-behandlung ein ?
Es ist nicht allzuschwer ein SIGSTOP bzw SIGCONT Signal an einen Thread zu senden.
Du könntest aber auch eine der vielen Libraries verwenden. Z.B gibt es da eine "Common C++" Library, welche dir soche "Portierungsproblematiken" abnehmen kann.

Gruß
gms

juschold
Beiträge: 24
Registriert: 17.10.2006 16:12:57

Beitrag von juschold » 08.11.2006 18:17:46

Hallo

SIGSTOP und SIGCOND ist für das anhalten und fortsetzen eines "Prozesses" ich muss aber "Threads" anhalten und fortsetzen.
Das Programm ist soweit schon an Linux angepasst, auf userspace ebene. Mir fehlen halt nur diese genannten Funktionen. Natürlich kann ich das Programm so umschreiben das ich diese funktionen umgehen kann, ist aber in meiner anwendung nicht so einfach. Ich bin nur verwundert das ich noch nicht gefunden habe ein Threads zu stoppen und fortzusetzen.

Gruß
juschold

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 08.11.2006 19:18:44

hmm, vielleicht ist OpenThreads was fuer dich...
Beware of programmers who carry screwdrivers.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 08.11.2006 19:44:29

juschold hat geschrieben: Ich bin nur verwundert das ich noch nicht gefunden habe ein Threads zu stoppen und fortzusetzen.
na wenn du lieber bei RTLinux suchst oder solche "Lösungsansätze" wie ein C++ Kernelmodul verfolgst, ist das auch kein Wunder
juschold hat geschrieben:SIGSTOP und SIGCOND ist für das anhalten und fortsetzen eines "Prozesses" ich muss aber "Threads" anhalten und fortsetzen.
Blödsinn! Natürlich kannst du diese Signale auch an einen Thread schicken ! (siehe "man pthread_kill" bzw google nach phtread_kill und SIGSTOP und du wirst ca 1500 Ergebnisse bekommen )

Hier nur eines davon:
http://cvs.cinelerra.org/devcorner/doxy/a118/guicast/html/thread_8C-source.html hat geschrieben: 00121 int Thread::suspend_thread()
00122 {
00123 if((int)tid > 0) pthread_kill(tid, SIGSTOP);
00124 return 0;
00125 }
00126
00127 int Thread::continue_thread()
00128 {
00129 if((int)tid > 0) pthread_kill(tid, SIGCONT);
00130 return 0;
00131 }

Antworten