salve,
sono alle prime armi con i misc driver linux (livello kernel).
ora, premetto che non sono un genio di queste cose (infatti le stò imparando), e non mi è molto chiara questa cosa :
quando creo un misc driver dichiaro la struttura dei suoi file operators e le relative funzioni da chiamare in base alle operazioni che vengono richiamate user-space.
per esempio :
codice:
static ssize_t my_write(struct file *file, const char __user * buf, size_t count, loff_t *ppos)
static struct file_operations my_fops = {
.owner = THIS_MODULE,
.read = my_read,
.open = my_open,
.release = my_close,
.write = my_write,
#if 0
.poll = my_poll,
.fasync = my_fasync,
#endif
};
quando a user space chiamo il driver (con una echo ciao>/dev/mio_modulo_caricato), passo da user-space a kernel-space e faccio la open su quel driver; poi in questo caso (essendo echo) la .write (chiamando, in questo caso, my_write); lavoro su di essa e poi chiudo il device. ma chi è che passa i miei dati user-space a quella funzione?
per esempio "buf" chi glielo passa? lo prende dallo stack kernel dati memorizzato al cambio di contesto (tipo quando si chiama una a_primitiva) ? o c'è una subroutine che si occupa di questo? o forse ho capito male il procedimento
saluti