Autor Thema: Idee für Kernelmodule  (Gelesen 6854 mal)

[MM]

  • Beiträge: 130
    • Profil anzeigen
    • www.mmcoding.eu
Gespeichert
« am: 07. January 2006, 21:25 »
Hallo, ich habe vor diverse Funktionen meines Kernels in Module auszulager und mein bisheriges Konzept sah so aus, dass ich im Datensegment des Kernels beim Laden eines Moduls speicher allociere und das Modul an diese Stelle lade. Dann wird ein Codesegment eingerichtet, welches den Code des Moduls umfasst (immernoch im Kerneldatensegment). Als Daten und Stacksegment soll das des Kernels mitbenutzt werden. Um auf globale Daten des Moduls zugreifen zu können (welche per standard ja bei Offset 0 beginnen würden) habe ich es so gemacht, dass in Modulen beim Zugriff auf globale Daten noch edx auf die Adresse draufgezählt wird (wo der Offset der Moduldaten im Kerneldatensegment drinsteht).
Dies funktioniert auch soweit ganz gut, nun ist nur das Problem, dass ich nun alle Libs die ich so habe ein zweites mal compilieren müsste um eine spezielle Modulversion zur Verfügung zu stellen (mit +edx für globale Daten).
Hat da Jemand eine besser Idee?
Wie ich in einigen Threads gelesen habe ersetzen einige von euch nach dem Laden des Moduls alle Adressen mit dem richtigen Offset, das scheint mir aber etwas zu aufwändig zu sein, ebenso wie ein extra Datensegment für jedes Modul zu spendieren.

MM

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 08. January 2006, 09:48 »
Also ich habe vor, das mit Paging zu machen. Also bekommt jedes Modul eine eigene Page-Table.

Geht das so, ist das zu langsam ?????

Gruss Nooooooooooos

[MM]

  • Beiträge: 130
    • Profil anzeigen
    • www.mmcoding.eu
Gespeichert
« Antwort #2 am: 08. January 2006, 13:05 »
Du meinst also, dass deine Module dann immer virtuell an der gleichen Adresse liegen?
Interessant, aber was würde passieren, wenn dein Modul einen Zeiger auf irgendwelche globalen Daten des Moduls an ein anderes Modul weiterreicht? Dann stünde an der Adresse ja was ganz anderes...

MM

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 08. January 2006, 14:06 »
Ich mach das so, dass ein Modul Daten an den Kernel verschicken, welcher die Daten an das gewünschte Modul weiterleitet.

Weiss aber nicht ob das mit Paging zu langsam ist ????

Gruss
Nooooooooooos

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 08. January 2006, 15:01 »
Der Speicherbereich von meinem Kernel und meinen Modulen geht von 0x0 bis 0x20000000, und ist also 512 MB groß. Darein werden alle Module gemappt. Da sie eh Just-In-Time compiliert werden sollen, kann ich sie gleich an eine freie Stelle laden und linken. Wenn du deine Module nicht Just-In-Time linkst, kannst du ja z.B. ELF Relocateables benutzen, und sie zur Laufzeit linken. Alle Module nutzen die selben Segmente, ich nutze nur 4 Segmente, jeweils eins für Kernel Code und Kernel Daten und eins für Usermode Code und Usermode Daten. Ich versuche aber, möglichst viel in Kernelmode Threads auszulagern, was nicht so Performancekritisch ist, um so Kernelspeicher zu sparen.

 

Einloggen