2015-01-17 17 views
6

ho letto sui seguenti collegamenti I/O utente: http://www.hep.by/gnu/kernel/uio-howto/Kernel utente lo sviluppo di applicazioni di I/O

e seguito http://nairobi-embedded.org/uio_example.html.

Sto utilizzando il dispositivo ivshmem per mappare la memoria dall'host al guest (in QEmu). Il driver client che sto utilizzando è kernel_module/uio/uio_ivshmem.c da https://www.gitorious.org/nahanni/guest-code.

Ho avuto successo condividendo la memoria tra più guest e posso anche inviare interrupt dall'host al guest, utilizzando ivshmem-server dal repository git qui sopra.

Ma non riesco a capire come posso "interrompere" l'ospite per notare che la scrittura sulla memoria è completata. Cioè segnalare all'altro ospite che dovrebbe leggere ciò che il primo ospite ha scritto.

Cosa sto sbagliando? C'è un modo per inviare interrupt usando UIO o posso solo ricevere? In quale altro modo dovrei notare che ho finito di scrivere/leggere?

+0

Cosa? Non è inter-processo, è inter-VM. Non sei sicuro di cosa intendi, ma potrebbe essere sbagliato. – netigger

risposta

2

Ok, ora ho capito perché non posso inviare interruzioni.

ho provato utilizzando le applicazioni di test, ma, come si può leggere in questo (http://lists.gnu.org/archive/html/qemu-devel/2014-08/msg05388.html) palo, una patch nel kernel rotto uio_ivshmem.c.

Questa patch ha reso ivshmem in grado di mappare BAR0, che viene utilizzato per inviare interruzioni. BAR2 è ancora valido e può essere utilizzato per condividere i dati, anche se gli interrupt non funzioneranno.