#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
#include<linux/fs.h>
#include<linux/slab.h>
#include<linux/timer.h>
#include<linux/sched.h>
#include<linux/list.h>
#include<linux/interrupt.h>
#include<linux/kthread.h>
#include<linux/err.h>
#include<linux/delay.h>
MODULE_AUTHOR("Tan xujia");
MODULE_LICENSE("Dual BSD");
static struct task_struct *test_task;
int test_thread(void *data)
{
printk("test_thread\n");
while(1){
if(kthread_should_stop())
break;
schedule_timeout(HZ);
}
return 0;
}
static
int __init hello_init (void)
{
printk("hello_init\n");
int err;
test_task = kthread_create(test_thread, NULL, "test_task");
if(IS_ERR(test_task)) {
test_task = NULL;
return -1;
}
wake_up_process(test_task);
msleep(100000);
kthread_stop(test_task);
return 0;
}
static
void __exit hello_exit (void)
{
printk("hello_exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
obj-m :=kthread.o
all:
make -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.* .tmp_versions *.mod *.order *.symvers *.dwo