2016-03-26 6 views
0

Beim Schreiben eines Kernelmoduls für Linux können module_param und seine Varianten eine Zeichenfolge als Modulparameter verwenden, und der Speicherplatz, der für diese Zeichenfolge benötigt wird, wird hinter den Kulissen zugewiesen, ohne dass etwas explizit ausgeführt werden muss. Meine Frage ist, wie soll man mit diesem Stück Erinnerung umgehen? Müssen Sie es explizit freigeben, wenn Sie es nicht mehr brauchen? Was sollten Sie tun, wenn Sie die Zeichenfolge innerhalb des Moduls ändern möchten?Wie behandelt man den Speicher, der beim Schreiben eines Linux-Kernel-Moduls von module_param erhalten wird?

Antwort

0

zugewiesener Speicher von module_param für string (charp Typ) Argument wird durch Rückrufe für diesen Parameter der Typ beibehalten, siehe param_set_charp, param_get_charp und param_free_charp in kernel/params.c definierten Funktionen.

  1. Der einfachste Weg, um mit solchen param arbeiten ist es, als zu erklären Nur, Lesen und aus dem Modul nur für Zugriff lesen. In diesem Fall muss man sich nicht darum kümmern, den Zugriff zu sperren oder den Parameterwert freizugeben.

  2. Wenn Sie schreiben wollen vom Modul zum Nur Parameter lesen, benötigen Sie:

    1) Freier alter Wert des Parameters über param_free_charp.

    2) Weisen Sie dem Parameter einen neuen Wert zu. Wenn dieser Wert zugewiesen ist, müssen Sie ihn manuell in module_exit oder beim nächsten Schreiben in den Parameter freigeben.

    Diese beiden Aktionen sollten innerhalb des einzelnen kritischen Abschnitts kernel_param_lock(THIS_MODULE)/kernel_param_unlock(THIS_MODULE) ausgeführt werden, damit der Wert des Leseparameters aus dem Benutzerbereich seinen Wert vollständig initialisiert findet.

  3. Wenn Sie Parameter als beschreibbaren deklarieren, dann es im Inneren des Moduls zu lesen erfordert kritischen Abschnitt kernel_param_lock(THIS_MODULE)/kernel_param_unlock(THIS_MODULE).

  4. Das Schreiben zu beschreibbaren Parametern ist nur dann erlaubt, wenn neuer Wert woanders gespeichert ist, so dass, wenn der Parameter von User-Space neu geschrieben wird, kann sein vorheriger Wert gefunden und befreit werden, wenn nötig.

    Das Schreiben und Lesen eines solchen Parameters innerhalb des Moduls sollte den gleichen Anforderungen entsprechen wie in den Fällen 2 und 3 entsprechend.

Verwandte Themen