[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Interaktion Kernel<->Libs<->Anwendungen
[Thread Prev] | [Thread Next]
- Subject: Re: Interaktion Kernel<->Libs<->Anwendungen
- From: Markus Demleitner <msdemlei@xxxxxxxxxxxxxxxxxxxx>
- Date: Mon, 10 Apr 2006 11:56:14 +0200
- To: uugrn@xxxxxxxxxxxxxxx
On Sun, Apr 09, 2006 at 01:26:54AM +0200, Stephan Gromer wrote: > Ich habe frueher auf dem AMIGA in Assembler programmiert. > Wenn ich dort eine Library-Funktion aufrufen wollte, so habe ich zuerst > die Basisadresse der Bibliothek erfragt und dann die gewuenschte Funktion > mit einem Offset zu dieser Basisadresse aufgerufen (z.B. jsr -188(a6)). > Dieser Offset war fix, d.h. ich konnte mich darauf verlassen, das > Updates (die es ja frueher viel seltener gab) mir da keinen Aerger einhandeln. > > Frage: Ist das bei Linux genauso (Ich habe hier von der technischen > Umsetzung leider keinen Plan)? D.h. wenn ich einen Kernel neu Das ganze ist eine Frage der calling convention, und die haengt von der Architektur ab. So, wie du die Frage gestellt hast, laesst sie sich also nicht fuer "Linux", sondern allenfalls z.B. fuer "Linux/x86" beantworten -- dort laufen die syscalls, soweit ich weiss, ueber int 0x80. Aber das ist wahrscheinlich nicht das, was du wissen willst. > kompiliere, aendern sich dadurch irgendwelche Sprungziele/Bezugspunkte > fuer Libraries bzw. externe Module (sprich muss ich diese mit den dann > veraenderten, neuen Kernelheaders alle neu kompilieren?). Die Sprungziele sind alle durch Namen identifiziert. Dass diese selbst ueber zwei Releases von Quelle, Compiler oder sonstwas konstant bleiben, ist hoechst unwahrscheinlich, aber auch nicht wichtig, weil ld.so (im Fall von Bibliotheken) oder der Modul-Lader (im Fall von Kernel-Modulen) fuer die Abbildung der Namen auf die passenden Adressen sorgen. Das mit den Kernel-Headern ist wieder eine andere Sache -- dabei gehts darum, dass sich Datenstrukturen, die du zur Kommunikation mit dem Kernel einsetzt (z.B. Krempel, den du in ioctls packst), dann und wann aendern. Gluecklicherweise ist das haeufig so gemacht, dass ein neuer Kernel auch noch mit alten Headern ganz ordentlich funktioniert (was aber eigentlich eher als "durch Zufall" zu klassifizieren ist). Aber das wiederum ist fuer Module ganz egal (die verwenden immer die Header des Kernels, fuer den sie gebaut werden), waehrend die meisten Bibliotheken auf die libc aufsetzen, und in dem Moment ist das alles ein Problem der libc. > Falls nein, kann ich dann im Regelfall vielleicht sogar begruendet darauf > hoffen, dass dies auch bei einem Kernelversionssprung (z.B. > 2.6.8->2.6.15) fuer die im aelteren Kernel bereits vorhandenen und extern > benoetigten Symbole ebenfalls der Fall ist (nat. vorausgesetzt, die > Uebergabeparameter haben sich nicht geaendert)? Die Symbole solltest du in der Regel haben. Trotzdem unterstuetzt Linux aus vielen Gruenden kein stabiles Binaerinterface fuer Kernel-Module (und ich glaube, dass es dir letztlich um diese geht). Das ist aber auch nicht sehr schlimm, zumal viele Distributionen mit allerlei Helferlein kommen, die zusaetzlich benoetigte Module automatisch mitbauen, wenn man einen neuen Kernel baut, bei Debian macht das etwa make-kpkg. Ansonsten waere es vielleicht hilfreich, wenn du verraetst, ob du die Module selbst schreiben willst oder nur gucken moechtest, dass Module von Dritten sich in deinem System wohlfuehlen. Gruesse, Markus