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

里克豪

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

当使用默认设置时,加载驱动程序时,我可以看到“这是我的字符字符串”。

但是,如果我使用命令行来传递带有空格的字符串,它将显示以下错误:

示例1: # insmod ./params.ko mystring="Hello World"

insmod: error inserting './params.ko': -1 Unknown symbol in module

dmesg显示以下信息:

params: Unknown parameter 'World'

示例2: # insmod ./params.ko mystring="HelloWorld"

如果使用不带空格的“ HelloWorld”,则显示字符串没有问题。

我还尝试使用\或''来查看是否可以转义该空间以忽略该空间,但徒劳无功。

想咨询任何知道如何将包含空格的字符串传递给内核模块的人吗?

谢谢,感谢您的帮助。

阿芬斯特

当您运行insmod ./params.ko mystring="Hello World"引号时,shell会使用引号,并且insmod二进制文件将字符串mystring=Hello World作为参数。它按原样将其传递给内核,然后全部传递给内核parse_args函数(在中kernel/params.c),该函数依次调用next_arg将下一个参数拆分为名称和值。

正如我们在代码中看到以下注释一样,它绝对可以处理空格:

/* You can use " around spaces, but can't escape ". */
/* Hyphens and underscores equivalent in parameter names. */

和以下条件语句:

static char *next_arg(char *args, char **param, char **val)
{
    ...
    for (i = 0; args[i]; i++) {
        if (isspace(args[i]) && !in_quote)
            break;
    ...
}

因此,想法是您需要将引号传递给内核,而不是传递给Shell。现在没有Linux框可以检查内核模块的插入,但是我想以下命令将起作用:

# insmod ./params.ko mystring='"Hello World"'

在这里,shell将使用单引号,而insmodbinary的参数将是mystring="Hello World"这样,因此这些引号将按原样传递给内核,这将使解析值成为可能。试试看,应该可以。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将带有空格字符的参数传递给argparse

来自分类Dev

如何将带有空格的字符串传递到PowerShell中?

来自分类Dev

将带空格的字符串传递给参数-Powershell

来自分类Dev

如何将带有尾随空格的字符串传递给python的子进程

来自分类Dev

将字符串传递给带有空格的bash函数

来自分类Dev

如何正确传递带有空格的字符串作为单独的命令行参数?

来自分类Dev

将带有破折号的字符串作为参数传递给Trollop

来自分类Dev

如何使用curl将带有空格的字符串作为http POST数据传递

来自分类Dev

内核模块参数的字符串长度限制

来自分类Dev

内核模块参数的字符串长度限制

来自分类Dev

如何将字符串传递给Ant java?我的程序以某种方式不接受带有空格的参数

来自分类Dev

将带有空格的字符串作为元素添加到数组

来自分类Dev

如何传递可以在VBscript到Powershell之间留有空格的ADS(带有动态字符串的参数)

来自分类Dev

如何在脚本中将带有特殊字符的字符串传递给shell命令?

来自分类Dev

将带有不可打印字符的六进制字符串传递给a

来自分类Dev

将带空格的字符串传递到参数中-Powershell

来自分类Dev

将带有空格和引号的参数传递给脚本(不引用所有内容)

来自分类Dev

将带有空格的数组传递给Bash函数以充当其参数列表

来自分类Dev

从Shell脚本中将带有空格的参数传递给命令?

来自分类Dev

将带有空格的路径作为参数传递给批处理文件

来自分类Dev

将带有空格的参数$ *传递给第二个脚本

来自分类Dev

将带有空格的PHP变量传递给bash

来自分类Dev

在Python中将带有空格的字符串转换为具有所需尺寸的数据框

来自分类Dev

如何在剃刀中传递带有空格的字符串

来自分类Dev

将带有字符串的结构化numpy数组传递给cython函数

来自分类Dev

将带有数字的字符串传递给mysql所在的位置

来自分类Dev

如何将带有 DatetIme.Today() 的字符串传递给 sql 存储过程

来自分类Dev

如何将带有逗号的字符串 (VARCHAR) 传递给存储过程?

来自分类Dev

如何将带有字符串变量的字符串传递给C ++中的函数

Related 相关文章

  1. 1

    将带有空格字符的参数传递给argparse

  2. 2

    如何将带有空格的字符串传递到PowerShell中?

  3. 3

    将带空格的字符串传递给参数-Powershell

  4. 4

    如何将带有尾随空格的字符串传递给python的子进程

  5. 5

    将字符串传递给带有空格的bash函数

  6. 6

    如何正确传递带有空格的字符串作为单独的命令行参数?

  7. 7

    将带有破折号的字符串作为参数传递给Trollop

  8. 8

    如何使用curl将带有空格的字符串作为http POST数据传递

  9. 9

    内核模块参数的字符串长度限制

  10. 10

    内核模块参数的字符串长度限制

  11. 11

    如何将字符串传递给Ant java?我的程序以某种方式不接受带有空格的参数

  12. 12

    将带有空格的字符串作为元素添加到数组

  13. 13

    如何传递可以在VBscript到Powershell之间留有空格的ADS(带有动态字符串的参数)

  14. 14

    如何在脚本中将带有特殊字符的字符串传递给shell命令?

  15. 15

    将带有不可打印字符的六进制字符串传递给a

  16. 16

    将带空格的字符串传递到参数中-Powershell

  17. 17

    将带有空格和引号的参数传递给脚本(不引用所有内容)

  18. 18

    将带有空格的数组传递给Bash函数以充当其参数列表

  19. 19

    从Shell脚本中将带有空格的参数传递给命令?

  20. 20

    将带有空格的路径作为参数传递给批处理文件

  21. 21

    将带有空格的参数$ *传递给第二个脚本

  22. 22

    将带有空格的PHP变量传递给bash

  23. 23

    在Python中将带有空格的字符串转换为具有所需尺寸的数据框

  24. 24

    如何在剃刀中传递带有空格的字符串

  25. 25

    将带有字符串的结构化numpy数组传递给cython函数

  26. 26

    将带有数字的字符串传递给mysql所在的位置

  27. 27

    如何将带有 DatetIme.Today() 的字符串传递给 sql 存储过程

  28. 28

    如何将带有逗号的字符串 (VARCHAR) 传递给存储过程?

  29. 29

    如何将带有字符串变量的字符串传递给C ++中的函数

热门标签

归档