parâmetros insmod e $ sign

2

Eu estou mexendo com a programação do driver de dispositivo no Ubuntu 14.04.1 LTS e me deparei com um comportamento estranho; espero que você possa lançar alguma luz.

sudo insmod hello.ko whom="$" produz o resultado esperado:

Hello $ (0) !!!

mas sudo insmod hello.ko whom="$$" produz:

Hello 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);
    
por Vectorizer 12.10.2016 / 22:41

1 resposta

3

Nada a ver com o kernel, é apenas que $$ se expande para o ID do processo do shell, veja por exemplo Manual do Bash .

($$) Expands to the process ID of the shell. In a () subshell, it expands to the process ID of the invoking shell, not the subshell.

Escape o cifrão com uma barra invertida ou use aspas simples para impedir a expansão:

$ echo "$$" "\$$" '$$'
29058 $$ $$
    
por 12.10.2016 / 22:53