嵌入式 kthread_run()和kthread_stop()和wake_up_process()函数相关

原创 2013年12月03日 16:16:08
kernel/kthread.c中是关于线程创建,关闭的函数。
kthread_stop是关闭线程的,实质的操作是:
kthread_stop_info.k = k;

这样,kthread_should_stop()就会返回为真。

hrtimer_wakeup() --> wake_up_process()

linux-2.6.21.5/kernel/sched.c

int fastcall wake_up_process(struct task_struct *p)
{
       return try_to_wake_up(p, TASK_STOPPED | TASK_TRACED |
                    TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE, 0);
}

1 使用kthread_create创建线程:

    struct task_struct *kthread_create(int (*threadfn)(void *data),
                                       void *data,
       const char *namefmt, ...);

这个函数可以像printk一样传入某种格式的线程名

线程创建后,不会马上运行,而是需要将kthread_create() 返回的task_struct指针传给wake_up_process(),然后通过此函数运行线程。

2. 当然,还有一个创建并启动线程的函数:kthread_run

   struct task_struct *kthread_run(int (*threadfn)(void *data),
                                    void *data,
				    const char *namefmt, ...);

3. 线程一旦启动起来后,会一直运行,除非该线程主动调用do_exit函数,或者其他的进程调用kthread_stop函数,结束线程的运行。

    int kthread_stop(struct task_struct *thread);

kthread_stop() 通过发送信号给线程。

如果线程函数正在处理一个非常重要的任务,它不会被中断的。当然如果线程函数永远不返回并且不检查信号,它将永远都不会停止。

 

driver_probe_device() --> kthread_run()

linux-2.6.21.5/include/linux/kthread.h

/**
* kthread_run - create and wake a thread.
* @threadfn: the function to run until signal_pending(current).
* @data: data ptr for @threadfn.
* @namefmt: printf-style name for the thread.
*
* Description: Convenient wrapper for kthread_create() followed by
* wake_up_process(). Returns the kthread or ERR_PTR(-ENOMEM).
*/
#define kthread_run(threadfn, data, namefmt, ...)                  /
({                                                                 /
    struct task_struct *__k                                        /
        = kthread_create(threadfn, data, namefmt, ## __VA_ARGS__); /
    if (!IS_ERR(__k))                                              /
        wake_up_process(__k);                                      /
    __k;                       

 

 

相关文章推荐

linux同步机制之wait_event和wake_up

1. 关于 wait_event_interruptible() 和 wake_up()的使用      读一下wait_event_interruptible()的源码,不难发现这个函数先将  ...

linux内核中等待队列(wait_event,wake_up...)

2012-12-25 15:09:57 分类: LINUX 根据内核3.1.6版本源码、书籍和网上资料,对几个函数进行分析        介绍这几个函数,不得不先介绍...

Linux使用wake_up_interruptible()唤醒注册到等待队列上的进程

功能:唤醒注册到等待队列上的进程 原型:    #include    void wake_up_interruptible (wait_queue_head_t *q); 说明...
  • prike
  • prike
  • 2017年08月03日 10:23
  • 208

Linux唤醒抢占----Linux进程的管理与调度(二十三)

Linux CFS调度器之唤醒抢占 日期 内核版本 架构 作者 GitHub CSDN 2016-07-05 Linux-4.6 X86 & arm gatiem...
  • gatieme
  • gatieme
  • 2016年07月10日 19:11
  • 5501

新路程------hi3516a的uart rts cts功能

有位前辈写了以gpio方式控制rts,在驱动内核中修改http://blog.csdn.net/edw200/article/details/52251385?locationNum=4   就是在...

新路程------adv7180禁止自动输出信号

adv7180使能以后,运行sample_vio发现哪怕没有摄像头,7180还是会输出中断,vi_dump图片看起来似乎是freerun mode,本来0x0c有控制free run的开关,但是貌似设...

SenchaArchitect-2.0.0.000442

  • 2012年08月21日 09:07
  • 28.81MB
  • 下载

Linux命令行学习笔记

Linux学习笔记 命令行学习笔记(一) 进入中文虚拟终端: zhcon --utf8 常用命令: ls 显示 ls -a 显示全部 ls -al ...
  • charlv
  • charlv
  • 2011年09月20日 17:34
  • 500

定时提醒器-免费软件网

  • 2013年09月03日 19:50
  • 6.52MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 kthread_run()和kthread_stop()和wake_up_process()函数相关
举报原因:
原因补充:

(最多只允许输入30个字)