#
include
<
linux/
module.
h>
#
include
<
linux/
kernel.
h>
#
include
<
linux/
init.
h>
#
include
<
linux/
sched.
h>
MODULE_AUTHOR(
"T-bagwell_CU"
)
;
MODULE_LICENSE(
"GPL"
)
;
static
DECLARE_WAIT_QUEUE_HEAD(
myevent_waitqueue)
;
extern
unsigned
int
myevent_id;
static
int
example_kernel_thread(
void
*
unused)
{
DECLARE_WAITQUEUE(
wait,
current)
;
daemonize(
"create_by_T-bag"
)
;
allow_signal(
SIGKILL)
;
add_wait_queue(
&
myevent_waitqueue,
&
wait)
;
while
(
1)
{
set_current_state(
TASK_INTERRUPTIBLE)
;
schedule(
)
;
if
(
signal_pending(
current)
)
{
break
;
}
}
set_current_state(
TASK_RUNNING)
;
remove_wait_queue(
&
myevent_waitqueue,
&
wait)
;
printk(
KERN_WARNING "This is in example_kernel_thread/n"
)
;
return
0;
}
static
__init int
init_hello_kernel_thread(
void
)
{
int
ret;
ret=
kernel_thread(
example_kernel_thread,
NULL
,
CLONE_FS |
CLONE_FILES |
CLONE_SIGHAND |
SIGCHLD )
;
if
(
unlikely(
ret<
0)
)
{
printk(
KERN_WARNING "kernel_thread create failed /n"
)
;
}
else
{
printk(
KERN_WARNING "kernel_thread create success /n"
)
;
}
return
0;
}
static
__exit void
cleanup_hello_kernel_thread(
void
)
{
printk(
KERN_WARNING "kernel_thread exit /n"
)
;
return
;
}
module_init(
init_hello_kernel_thread)
;
module_exit(
cleanup_hello_kernel_thread)
;
写一个Makefile来编译这个module
modules: |
编译完成以后,可以看一下结果: