Hinweise zum Erstellen von kthreads in einem Kernelmodul
Im Folgenden erfahren Sie, wie Sie ein ladbares Kernelmodul erstellen und erstellen. [Linux] [Kernelmodul] Erstellen und Laden eines einfachen ladbaren Kernelmoduls - Qiita
testmod.c
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kthread.h>
MODULE_LICENSE("MIT");
struct task_struct *k;
static void kthread_main(void)
{
schedule();
}
static int kthread_func(void* arg)
{
printk(KERN_INFO "[%s] start kthread\n", k->comm);
while (!kthread_should_stop()) {
kthread_main();
}
printk(KERN_INFO "[%s] stop kthread\n", k->comm);
return 0;
}
static int __init testmod_init(void)
{
printk(KERN_INFO "driver loaded\n");
k = kthread_run(kthread_func, NULL, "testmod kthread");
return 0;
}
static void __exit testmod_exit(void)
{
kthread_stop(k);
printk(KERN_INFO "driver unloaded\n");
}
module_init(testmod_init);
module_exit(testmod_exit);
kthread_run (3, ...)
mit der Init-FunktionDas Makro kthread_run (3, ...)
sieht folgendermaßen aus:
kthread_run
#define kthread_run(threadfn, data, namefmt, ...) \
({ \
struct task_struct *__k \
= kthread_create(threadfn, data, namefmt, ## __VA_ARGS__); \
if (!IS_ERR(__k)) \
wake_up_process(__k); \
__k; \
})
Nach dem Ausführen von "kthread_create (3, ...)" wird "wake_up_process (1)" ausgeführt.
Für namefmt
können Sie Formatbezeichner wie printf verwenden und Thread-Namen mithilfe von Variablen festlegen.
kthread_should_stop ()
erkannt).schedule ()
TODO: Untersuchen Sie das Verhalten von sched ()
Ausführungsbeispiel
$ sudo insmod testmod.ko
$ ps aux | head -1 && ps auwx | grep "\[testmod kthread\]"
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 28716 84.8 0.0 0 0 ? R 23:14 16:07 [testmod kthread]
$ sudo rmmod testmod.ko
$ dmesg | tail
[187744.330108] driver loaded
[187744.330326] [testmod kthread] start kthread
[187812.178718] [testmod kthread] stop kthread
[187812.178743] driver unloaded
Es wurde bestätigt, dass der Thread im Kernelmodul gestartet und beendet wurde. Ich konnte auch den mit dem Befehl ps erstellten Thread überprüfen.
[Linux] [Kernelmodul] Erstellen und Laden eines einfachen ladbaren Kernelmoduls - Qiita [Linux] [Kernelmodul] Übergeben von Parametern als Argumente beim Laden eines ladbaren Kernelmoduls --Qiita [[Linux] [Kernelmodul] Geben Sie die Ausführungs-CPU von kthread --Qiita an / begrenzen Sie sie (http://qiita.com/koara-local/items/a912155d4a423e8f9588).
Implementieren von Schleifen und Stoppen von Kernel-Threads in einem Kernel-Modul - die Zukunft von Mensch und Web kthread_run-Makro - Linux-Memorandum ... (Zum Inhaltsverzeichnis) [PDF] kthreads
Recommended Posts