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: 在控制台下插入模块 |
|