2015-01-17 9 views
6

Ich habe auf den folgenden Links zu Benutzern lesen, I/O: http://www.hep.by/gnu/kernel/uio-howto/Kernel User-I/O-Anwendungsentwicklung

und http://nairobi-embedded.org/uio_example.html gefolgt.

Ich verwende das ivshmem-Gerät, um Speicher vom Host auf den Gast abzubilden (in QEmu). Der Client-Treiber, den ich verwende, ist kernel_module/uio/uio_ivshmem.c von https://www.gitorious.org/nahanni/guest-code.

Ich hatte Erfolg, den Speicher zwischen mehreren Gästen zu teilen, und ich kann auch Interrupts vom Host zum Gast ausgeben, indem ich den ivshmem-Server aus dem obigen Git-Repository verwende.

Aber ich kann nicht herausfinden, wie ich von dem Gast "unterbrechen" kann, um zu bemerken, dass das Schreiben in den Speicher abgeschlossen ist. I.e. signalisieren Sie dem anderen Gast, dass er lesen sollte, was der erste Gast geschrieben hat.

Was mache ich falsch? Gibt es eine Möglichkeit, Interrupts mit UIO zu senden oder kann ich nur empfangen? Wie sollte ich sonst bemerken, dass ich fertig mit dem Schreiben/Lesen bin?

+0

Was? Es ist kein Interprozess, sondern Inter-VM. Nicht sicher, was du meinst, aber könnte es falsch verstehen. – netigger

Antwort

2

Ok, ich habe jetzt herausgefunden, warum ich Interrupts nicht senden kann.

Ich habe versucht, die Test-Anwendungen zu verwenden, aber, wie Sie in diesem (http://lists.gnu.org/archive/html/qemu-devel/2014-08/msg05388.html) Post lesen können, brach ein Patch im Kernel uio_ivshmem.c.

Dieser Patch gemacht Ivshmem nicht BAR0 zuordnen, die zum Senden von Interrupts verwendet wird. BAR2 ist immer noch in Ordnung und kann verwendet werden, um Daten zu teilen, obwohl Interrupts nicht funktionieren.