Я учусь писать модули ядра, и в одном из примеров я должен был убедиться, что поток выполняется 10 раз и выходит, поэтому я написал это в соответствии с тем, что я изучил:Linux - Control Flow в модуле ядра linux
#include <linux/module.h>
#include <linux/kthread.h>
struct task_struct *ts;
int flag = 0;
int id = 10;
int function(void *data) {
int n = *(int*)data;
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(n*HZ); // after doing this it executed infinitely and i had to reboot
while(!kthread_should_stop()) {
printk(KERN_EMERG "Ding");
}
flag = 1;
return 0;
}
int init_module (void) {
ts = kthread_run(function, (void *)&id, "spawn");
return 0;
}
void cleanup_module(void) {
if (flag==1) { return; }
else { if (ts != NULL) kthread_stop(ts);
}
return;
}
MODULE_LICENSE("GPL");
то, что я хочу знать: а) Как сделать нить выполнить 10 раз, как цикл б) Как потоки управления в такого рода процессах, то есть если мы делаем это, чтобы выполнить 10 раз то происходит ли оно взад и вперед между function
и cleanup_module
или init_module
или что именно происходит?