나는 커널 모듈 프로그래밍에 익숙하지 않다. 그리고 나는 다중 쓰레드 커널 모듈을 작성해야한다. 그래서 커널 스레드의 주요 용도를 시도했습니다. 나는 다음과 같이 썼다. 하나의 스레드에 1을 인쇄하고 다른 스레드에 2를 10 번 인쇄합니다.간단한 커널 다중 쓰레드
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/udp.h>
#include <linux/mm.h>
#include <linux/init.h>
#include <linux/kthread.h>
struct task_struct *task1;
struct task_struct *task2;
static void thread_func(void* data)
{
int *n;
n = (int *)data;
int i = 0;
while(i < 10){
printk("%d\n", *n);
i++;
}
//do_exit();
}
static int t_start(void)
{
printk("Module starting ... ... ..\n");
int *p1, *p2;
int one = 1, two = 2;
p1 = &one;
p2 = &two;
task1 = kthread_run(&thread_func, (void*)p1, "thread_func_1");
task2 = kthread_run(&thread_func, (void*)p2, "thread_func_2");
return 0;
}
static void t_end (void)
{
printk("Module terminating ... ... ...\n");
kthread_stop(task1);
kthread_stop(task2);
}
module_init(t_start);
module_exit(t_end);
MODULE_AUTHOR("Md. Taufique Hussain");
MODULE_DESCRIPTION("Testing kernel threads");
MODULE_LICENSE("GPL");
하지만 다음과 같은 문제가 있습니다. -
- 첫 번째 스레드는 10 개의 1을 모두 인쇄하고 두 번째 스레드는 입니다. 이 두 가지를 인터리브 방식으로 실행하고 싶었습니다.
- 첫 번째 스레드는 모두 1을 인쇄하지만 OK는 2 초를 인쇄하지 않습니다. 은 0을 인쇄 중입니다. 아마도 매개 변수가 두 번째 스레드 으로 제대로 전달되지 않습니다.
- 나는 그것을 실행 모듈을 삽입하고하지만 난 모듈을 제거하고 때 기계는 문제가 무엇입니까
을 중단? 어떻게 해결할 수 있습니까?
은이 질문에 다른 사람이 보면, 함수의 반환 형식은'thread_func'는'int'이어야합니다. – omerjerk