模块名称:params.ko
#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/stat.h>
MODULE_LICENSE("Dual BSD/GPL");
static char *mystring = "this is my char string";
module_param(mystring, charp, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(mystring, "A char string");
static int __init params_init(void)
{
printk("Driver is loaded\n");
printk(" My char string(mystring): %s\n", mystring);
return 0;
}
static void __exit params_exit(void)
{
printk("Driver is unloaded\n");
}
module_init(params_init);
module_exit(params_exit);
当我使用默认设置时,我可以在加载驱动程序时看到"这是我的字符串".
但是,如果我使用命令行来传递带空格的字符串,它将显示以下错误:
EX1:
# insmod ./params.ko mystring="Hello World"
insmod: error inserting './params.ko': -1 Unknown symbol in module
dmesg显示以下信息:
params: Unknown parameter …
在LDD3一书中,它介绍了简单的休眠(wait_event*()函数)和提前休眠(prepare_to_wait()函数).
如果我的理解是正确的,那么wait_queue_t似乎是一个进程条目,但wait_queue_head_t似乎是等待队列来存储正在添加(wait_queue_t)的进程列表.
因此,令我感到困惑的是,我应该使用wait_event _*()函数与prepare_to_wait使用指定等待进程的情况.
我能告诉的唯一原因是我可以在睡觉前指定过程状态与简单睡眠.但是,简单的睡眠确实提供了可中断和不间断的wait_event功能.
所以,我有点困惑为什么从设计和实现的角度来看我们都需要两个.谢谢.