Newsgroup: it.comp.os.linux.development
Titolo: Lanciare un segnale da kernel

Ciao,
  Il mio problema è il seguente:
 Come faccio da un modulo kernel a inviare un segnale che dovrebbe
essere intercettato da un normale programma C (usando le glibc) ?
Per quello che devo fare io è l'unica soluzione, visto che un modulo non
puo' fare certe cose...
Saluti,
 Pierluigi


Dal modulo non puoi lanciare il comando kill?
-- 
Lorenzo
"Given enough eyeballs, all bugs are shallow", Linus'Law
(address rot13 encoded)

 Dal modulo non puoi lanciare il comando kill?
Non lo so! Posso?
Pierluigi

puo' fare certe cose...
Spiega cosa devi fare.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

Marco d'Itri wrote:

Volevo modificare il file keyb_pc.c e keyboard.c in modo tale da poter
utilizzare tutti i tasti della mia tastiera TRUST. Ho modificato il codice
in modo tale da riconoscere  i tasti quali "eject", "volume" ...
Ma volendo fare un'interfaccia grafica ho pensato che quando premo per
esempio il tasto eject, il driver della tastiera genera un segnale che viene
intercettato dal programma e fa, per esmpio, ejectare il CD.
Che ve ne pare?
Saluti,
 Pierluigi

Dal modulo non puoi lanciare il comando kill?
No di certo.


in modo tale da riconoscere  i tasti quali "eject", "volume" ...
Se ne sta discutendo su linux-kernel. Usare un segnale non e` il sistema
migliore, anche perche` i segnali disponibili sono limitati (a meno di
usare i segnali POSIX).


No di certo.
Mmmm, questo l'ho trovato in kmod.c:
        /* Go, go, go... */
        if (execve(modprobe_path, argv, envp) < 0) {
                printk(KERN_ERR
                       "kmod: failed to exec %s -s -k %s, errno = %d\n",
                        modprobe_path, (char*) module_name, errno);
	        return -errno;
        }
        return 0;
Cmq si deve prima creare un kernel thread:
        pid = kernel_thread(exec_modprobe, (void*) module_name, 0);
	if (pid < 0) {
	          printk(KERN_ERR "request_module[%s]: fork failed,
		         errno %d\n", module_name, -pid);
		  return pid;
        }
 
Si, non e` un modulo ma tra il codice nel modulo e quello nel kernel
vero e proprio non c'e` differenza concettuale, oppure no?
Pierluigi, forse ti interesserebbe contattare Andrea Arcangeli,
and...@suse.de
Di solito e` molto disponibile anche se in questi giorni e` molto
occupato.


Mmmm, questo l'ho trovato in kmod.c:
Si, e ci sono ottimi motivi per non fare la stessa cosa per eseguire
kill, se non altro perche` i segnali si possono inviare direttamente.
*MA* non e` il sistema giusto per questa applicazione.



Pero' mi č venuta un'altra idea!
Ma mi servono i sorgenti di showkey,  sapete dove posso trovarli?
Ho visto quello che fa e potrebbe tornarmi utile...
 Saluti,
 Pierluigi

 intercettato dal programma e fa, per esmpio, ejectare il CD.
E perche` fai di queste cose? Usa loadkeys: la tastiera di Linux e`
completamente rimappabile. Per il tasto di eject puoi usare la feature
kbrequest di init. Vedi man 5 inittab.
-- 
  /Kinkie
Se sulla scatola c'e` scritto "Per windows 95 e superiori", dovrebbe
funzionare sotto Linux, vero?

Che ve ne pare?
un po' complicata come idea, non puoi modificare semplicemente
la mappa della tastiera che stai usando aggiungendo i tasti che ora sono
inutilizzati, per realizzare le funzioni che ti srvono?