que escribió el código siguiente para crear un hilo del núcleo:¿Cómo detener los hilos del kernel de Linux en rmmod?
#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/kthread.h>
#include<linux/sched.h>
struct task_struct *task;
int data;
int ret;
int thread_function(void *data)
{
int var;
var = 10;
return var;
}
static int kernel_init(void)
{
data = 20;
printk(KERN_INFO"--------------------------------------------");
task = kthread_create(&thread_function,(void *)data,"pradeep");
task = kthread_run(&thread_function,(void *)data,"pradeep");
printk(KERN_INFO"Kernel Thread : %s\n",task->comm);
return 0;
}
static void kernel_exit(void)
{
ret = kthread_stop(task);
}
module_init(kernel_init);
module_exit(kernel_exit);
En dando el comando insmod, soy capaz de crear un hilo de núcleo denominado "Pradeep" y puedo ver el nuevo hilo con el comando ps -ef
de la siguiente manera
root 6071 2 0 10:21 ? 00:00:00 [pradeep]
y su matriz se KThreadd cuyo PID es 2. pero no soy capaz de detener este hilo en dar rmmod
comando. Está dando la siguiente salida:
ERROR: Removing 'pradeep': Device or resource busy.
¿Alguien puede decirme cómo matar este hilo?
que corrigen el primer problema, pero yo no entendía la segunda prbblem. ¿Puede por favor explicarme el segundo en detalle? – pradeepchhetri
@pradeepchhetri, ¿resolvió su problema? Lamento haberme perdido esto por casi una semana.Sobre la terminación del hilo, parece que solo tiene dos opciones: llamar 'do_exit()' en su función de hilo (en lugar de caer al final de la función o intentar devolver un valor); o sondear 'kthread_should_stop()' periódicamente: cuando devuelve verdadero, entonces necesita 'devolver 0' (para tener éxito) o' devolver' uno de los códigos de error por un error. – sarnold
Hola, estoy escribiendo un controlador intensivo multi threading en kernel. Como, printk no funciona con los hilos del kernel, ¿cómo puedo registrar la información por hilos del kernel para depurar más fácilmente? –