PDA

View Full Version : [shell] comando awk, creazione device


Dawidh
19-05-2008, 07:53
allora ho un problema con questo comando:
major=$(awk "\\$2==\"$module\" {print \\$1}" /proc/devices)
e anche su questo:
mknod /dev/${device} c $major 0
si metto tutto lo script:
#!/bin/sh
module="module"
device="scull"
mode="664"
/sbin/insmod ./$module.ko $* || exit 1
rm -f /dev/${device}
major=$(awk "\\$2==\"$module\" {print \\$1}" /proc/devices)
mknod /dev/${device} c $major 0
Praticamente serve per inserire un modulo, eliminare eventuali device esistenti da prima e crearli nuovi con major number dinamico e minor dato. :Prrr: ma questo la sapete già vero???? :Prrr:
Questo è l'errore che mi restituisce:
awk: 0: unexpected character '\'
awk: line 1: syntax error at or near ==
mknod: numero di argomenti errato
Usare 'mknod --help' per ulteriori informazioni

Su un altro esempio ho visto che in quella riga al posto delle doppie \\ ce n'è una sola, quindi l'ho modificato ma spariscono solo i primi due errori e rimane quello di mknod.
Dove sbaglio? eppure è esattamente l'esempio del professore. :muro:
Se avete tanta gentilezza non è che mi date anche una spiegazione veloce veloce di quel comando per avere il major number?
Help. Grazie.

ilsensine
19-05-2008, 14:30
Fermo restando che questo è un modo scorretto per creare i device node, fatti una stampa di $major prima del mknod -- conterrà sicuramente un array di un numero diverso da 1 elementi (0 elementi o più di 1).

Dawidh
20-05-2008, 12:46
scusa se rispondo solo adesso ma per dovevo essere a scuola per provare, non avendo portato ancora il progetto a casa.
1. immaginavo non fosse un metodo scorretto, ma dobbiamo usare questo da direttive del professore e visto che anche nel libro di Rubini c'è spiegato in questo modo
2 ho provato come hai detto ed effettivamente dentro major non trovo nessun valore. come diavolo faccio allora a farmi dare un major number corretto?
Grazie

ilsensine
20-05-2008, 12:49
Guarda in /proc/devices...tu cerchi la stringa "module", controlla che esista effettivamente.

ilsensine
20-05-2008, 12:55
visto che anche nel libro di Rubini c'è spiegato in questo modo
Il modo corretto è lasciare che udev lo faccia per te. Registrare un chrdevice non è sufficiente, occorre anche un device_create o simili.
Guarda ad es. misc_register in drivers/char/misc.c

Comunque se il tuo professore vuole così...

Dawidh
20-05-2008, 14:33
Comunque se il tuo professore vuole così...
Bisogna farlo come lo vuole e come lo ha spiegato, meglio non mettersi a discutere con un prof.... :) non si sa mai che mi dia qualche voto in meno all'esame......

In ogni caso ora è perfetto, mi funziona tutto, creo ed elimino il device senza problemi, grazie mille.
Ci sentiamo più avanti se ho altri problemi ma non credo visto che adesso devo solo fare gestione di memoria condivisa tra lettori e scrittori.
Ciao e grazie ancora.

Caeddu
23-05-2008, 15:56
prova cosi'
major=$(awk "/\/\$2==/\"$module/\" {print /\/\$1}" /proc/devices)