Guten Tag. Ich möchte zwei (fast gleiche) Module erstellen - jedes Modul verwendet netlink socket und antwortet auf die eingehende Nachricht aus dem Userspace-Programm.
Während der Initialisierung des ersten Moduls wird der folgende Befehl erfolgreich ausgeführt:
%Vor%Wenn ich jedoch ein zweites Modul mit den gleichen Argumenten starte, wird derselbe Befehl einen Fehler verursachen.
Ich dachte, dass dieser Fehler passiert, weil der NETLINK_USER-Wert beider Module derselbe ist - deshalb konnte ich nicht die zweite Socket-Verbindung für denselben Netlink-Benutzer erstellen. Wenn ich jedoch NETLINK_USER Wert als 32 versuche, würde es einen Kernel-Fehler geben. Jeder andere Wert - auch Fehler.
Bitte sagen Sie mir, was ich tun muss, um zwei Kernel-Module gleichzeitig zu benutzen?
Im Kernel sind standardmäßig 32 NetLink-Slots verfügbar. Einige davon werden vom System verwendet (z. B. vom Audit-Subsystem). Sie finden die Details zu vordefinierten Konstanten hier . Wie für Ihre Frage, versuchen Sie Folgendes zu verwenden:
%Vor%MAX_LINKS hier ist die Grenze von netlink Slots, die der Kernel unterstützt.
Tags und Links sockets kernel linux-kernel kernel-module netlink