# 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
|
编译完成以后,可以看一下结果:
![](http://blogimg.chinaunix.net/blog/upfile2/090925115910.jpg)
![](http://blogimg.chinaunix.net/blog/upfile2/090925120028.jpg)