Моя цель - выполнить поток ядра из функции зонда моего драйвера ТОЛЬКО ОДИН РАЗ, который выполняет загрузку встроенного программного обеспечения.
Для простоты приведен пример кода (не фактический),
#include<linux/module.h>
#include<linux/init.h>
#include<linux/kthread.h>
MODULE_LICENSE("GPL");
struct task_struct *kthread;
static int thread_func(void* data)
{
printk("In %s function\n", __func__);
return 0;
}
static int hello_init(void)
{
int ret = 0;
printk("Hello World\n");
kthread = kthread_run(thread_func,
NULL, "kthread-test");
if (IS_ERR(kthread)) {
ret = PTR_ERR(kthread);
printk("Unable to run kthread err %d\n", ret);
return ret;
}
return 0;
}
static void hello_exit(void)
{
printk("Bye World\n");
}
Я не использую ничего из следующего, потому что:
kthread_should_stop()
- используется для непрерывного выполнения, которое я не хочу
kthread_stop(struct task_struct *thread)
- если включено в функцию выхода из модуля, вызывает панику ядра, так как поток уже был завершен после однократного выполнения
Это правильный подход? если нет, пожалуйста, предложите