注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

最简单的创建Linux内核线程的例子  

2010-12-10 13:18:12|  分类: linux相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kthread.h>
#include <linux/gfp.h>
#include <linux/delay.h>
#include <linux/sched.h>
#include <linux/err.h>
MODULE_LICENSE("Dual BSD/GPL");
int test_thread(void *data){
struct page *page =NULL;
struct page *leave_one_page =NULL;
set_current_state(TASK_UNINTERRUPTIBLE);
printk("thread start....\n");
while(1){
msleep(10000);
while ((page = alloc_page(GFP_ATOMIC))!= NULL)
{
left_one_page = page;
printk("page =%p\n",leave_one_page);
}
if (leave_one_page)
__free_page (leave_one_page);
}
return 0;
}
static struct task_struct * task_test;
staticint hello_init(void)
{
int err;
task_test = kthread_create(test_thread, NULL, "test_task");
printk(KERN_ALERT "Hello, world\n");
if(IS_ERR(task_test)){
printk("Unable to start kernel thread.\n");
err = PTR_ERR(task_test);
task_test = NULL;
return err;
}
wake_up_process(task_test);
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
if (task_test) kthread_stop(task_test);
}
module_init(hello_init);
module_exit(hello_exit);

=======Makefile========


ifneq ($(KERNELRELEASE),)
obj-m += hello.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

==========================================

  评论这张
 
阅读(833)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017