insmod 参数和 $ 符号

insmod 参数和 $ 符号

我正在 Ubuntu 14.04.1 LTS 下修改设备驱动程序编程,并遇到了一个奇怪的行为;希望你能有所启发。

sudo insmod hello.ko whom="$"产生预期输出:

你好 $(0) !!!

sudo insmod hello.ko whom="$$"产生:

你好 3275 (0) !!!

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>

MODULE_LICENSE("Dual BSD/GPL");

static char *whom = "world";
static int howMany = 1;

static int __init  hello_init(void){
int i;
for(i = 0; i < howMany; i++){
    printk(KERN_ALERT "Hello %s (%d) !!!\n", whom, i);
    }
return 0;
}

static void __exit hello_exit(void){
printk(KERN_ALERT "Bye bye %s !!!\n", whom);
}

module_init(hello_init);
module_exit(hello_exit);
module_param(howMany, int, S_IRUGO);
module_param(whom, charp, S_IRUGO);

答案1

与内核无关,它只是$$扩展为 shell 的进程 ID,请参见例如Bash 的手册

($$) 扩展为 shell 的进程 ID。在 () 子 shell 中,它扩展为调用 shell 的进程 ID,而不是子 shell。

使用反斜杠转义美元符号,或使用单引号来防止扩展:

$ echo "$$" "\$$" '$$'
29058 $$ $$

相关内容