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 :
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?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 };
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![]()

Rispondi quotando