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