小编ric*_*hau的帖子

将带空格字符的字符串参数传递给内核模块

模块名称: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 …

c linux-device-driver

15
推荐指数
1
解决办法
3337
查看次数

简单休眠(使用wait_event _*()函数)和高级休眠(使用prepare_to_wait()函数)有什么区别?

在LDD3一书中,它介绍了简单的休眠(wait_event*()函数)和提前休眠(prepare_to_wait()函数).

如果我的理解是正确的,那么wait_queue_t似乎是一个进程条目,但wait_queue_head_t似乎是等待队列来存储正在添加(wait_queue_t)的进程列表.

因此,令我感到困惑的是,我应该使用wait_event _*()函数与prepare_to_wait使用指定等待进程的情况.

我能告诉的唯一原因是我可以在睡觉前指定过程状态与简单睡眠.但是,简单的睡眠确实提供了可中断和不间断的wait_event功能.

所以,我有点困惑为什么从设计和实现的角度来看我们都需要两个.谢谢.

linux-device-driver linux-kernel embedded-linux

2
推荐指数
1
解决办法
1866
查看次数