Frage

Ist es möglich, einen Linux-Kernel (2.6) Modul, das durch Nicht-Kernel definierte Funktionalität zu kompilieren enthält enthält?

Zum Beispiel:


kernelmodule.h

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>   // printk()
// ...
#include <openssl/sha.h>
// ...

Makefile

obj-m := kernelmodule.o
all:
    $(MAKE) -C /lib/modules/`uname -r`/build M=`pwd` modules

clean:
    $(MAKE) -C /lib/modules/`uname -r`/build M=`pwd` clean
    $(RM) Module.markers modules.order

Das Kernel-Modul habe ich geschrieben und versuchen, enthält Funktionalität in einer Reihe von OpenSSL-Include-Dateien gefunden zu kompilieren.

Die Standard-Make-Datei oben dargestellt ist umfasst außerhalb der Linux-Header nicht zulassen. Ist es möglich, diese Funktionalität zu schließen, und wenn ja, könnten Sie mir bitte in die richtige Richtung zeigen.

Danke, Mike

War es hilfreich?

Lösung

Der Kernel nicht User-Space-Code verwenden kann und muss allein stehen (das heißt vollständig selbst enthalten sein, keine Bibliotheken), daher ist es nicht Standard-Header holen.

Es ist nicht klar, welchen Nutzen versuchen, User-Space-Header zu holen ist. Wenn es Dinge gibt, da drin, dass es gültig wäre, zu verwenden (Konstanten, vielleicht einige Makros, vorausgesetzt, sie rufen keine User-Space-Funktionen), dann kann es besser sein, sie zu vervielfältigen und sind nur der Kernel-kompatible Teile, die Sie benötigen.

Es ist nicht möglich, den Kernel mit Bibliotheken für Userspace-Einsatz zu verbinden - auch wenn sie keine OS Anrufe nicht -. Weil die Verknüpfung Umgebung im Kernel nicht sie abholen kann

Stattdessen neu kompilieren alle Funktionen im Kernel verwendet werden (vorausgesetzt, sie keine OS oder Bibliothek Anrufe tätigen - zum Beispiel malloc - in diesem Fall werden sie brauchen, modifiziert sowieso werden). Integrieren Sie sie in Ihre eigene Bibliothek in Ihrer Kernel-Module verwendet werden.


Neuere Versionen von Linux enthalten Verschlüsselungsfunktionen wie auch immer, einschließlich verschiedenen SHA Hashes -. Vielleicht können Sie einen von denen, anstatt


Eine weitere Idee wäre zu stoppen, die versuchen, Krypto im Kernel-Raum zu tun und den Code zu User-Space zu bewegen. User-Space-Code ist einfacher zu schreiben / debug / pflegen etc.

Andere Tipps

Ich habe Bits von Userspace-Code genommen, die ich geschrieben habe, und konvertiert es in den Kernel zu arbeiten (das heißt mit kmalloc (), usw.), es ist nicht so schwierig. Sie sind jedoch auf die Kernel-Verständnis von C beschränkt, nicht User-Space, die etwas unterscheidet .. vor allem mit verschiedenen Standard-int-Typen.

Just Verknüpfung mit User-Space DSO nicht möglich ist - der Linux-Kernel monolithisch ist, enthalten ist vollständig in sich. Es verwendet keine User-Space libc, Bibliotheken oder andere Bits als andere angemerkt haben.

9/10 mal, werden Sie feststellen, was Sie brauchen irgendwo in den Kernel. Es ist sehr wahrscheinlich, dass jemand anderes in die gleiche lief müssen Sie haben und schrieb einige statische Funktionen in einem gewissen Modul zu tun, was Sie wollen .. nur diejenigen greifen und wieder verwenden sie.

Im Fall von Krypto, wie andere gesagt haben, benutzen Sie einfach, was im Kernel ist. Eine Sache zu beachten, müssen Sie sie in kconfig aktiviert werden, das kann oder nicht passieren kann, je nachdem, was der Benutzer auswählt, wenn es zu bauen. Also, achten Sie auf Abhängigkeiten und explizit sein, können Sie einige Einträge in kconfig hacken müssen, die auch die Krypto-API wählen Sie möchten, wenn Ihr Modul ausgewählt ist. dass dabei ein bisschen wie ein Schmerz sein kann, wenn aus Baum zu bauen.

Also auf der einen Seite haben wir „einfach kopieren und so umbenennen beim Hinzufügen von insgesamt aufblasen“, auf der anderen Seite haben Sie haben „den Leuten sagen, sie müssen den vollständigen Kernel-Quelle haben“. Es ist eine der Macken, die mit einem monolithischen Kernel kommen.

Mit einem Microkernel, fast alles, was in Userspace läuft, verbindet keine Sorgen vor einem DSO für einige Fahrer ... es ist kein Thema. Bitte nehmen Sie nicht diese Aussage als Hinweis auf Kernel-Design-Philosophie in den Kommentaren wieder zu starten, das ist nicht in den Anwendungsbereich dieser Frage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top