分享

sleep_on_timeout() -- 内核模块睡眠

 汉江秋月夜 2012-10-31


sleep_on_timeout()
-- 内核模块睡眠
---------------------------------------------
long sleep_on_timeout(wait_queue_head_t *q, long timeout)
@timeout: timeout value in jiffies


wait.c
---------------------------------------------
#include <linux/module.h> //Needed by all modules
#include <linux/kernel.h> //Needed for KERN_ALERT

static int __init hello_init(void)
{
    int timeout;
    wait_queue_head_t timeout_wq;
    init_waitqueue_head(&timeout_wq);
    printk("<1>Waiting for one second\n");
    printk("HZ = %d\n", HZ);
    sleep_on_timeout(&timeout_wq, HZ);                       //(1)
    timeout = interruptible_sleep_on_timeout(&timeout_wq, HZ);//(2)
    printk("timeout = %d\n", timeout);
    if (!timeout)
        printk("timeout\n");

    printk("<1>Hello world.\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_ALERT "Goodbye world 1.\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("zengxiaolong ");
MODULE_DESCRIPTION("A sample driver");
MODULE_SUPPORTED_DEVICE("testdevice");

(1) 当前进程睡眠1秒后继续运行
(2) 当前进程睡眠1秒,在此期间(1秒内)中断处理程序可以通过wake_up_interruptible(&timeout_wq)唤醒该进程。如果interruptible_sleep_on_timeout()的返回值为0,表明该进程睡眠期间没有中断处理程序唤醒她。

Makefile
---------------------------------------------
all: default
obj-m += wait.o

default:
    make -C /usr/src/kernels/2.6.23.1-42.fc8-i686 M=`pwd` modules
clean:
    make -C /usr/src/kernels/2.6.23.1-42.fc8-i686 M=`pwd` clean


PS: 在控制台下插入模块

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多