___ qstntxt ___

Einige statistische Informationen unserer benutzerdefinierten Hardware werden angezeigt, wenn der Benutzer nach einem Befehl im Linux-Benutzerbereich fragt. Diese Implementierung verwendet derzeit die PROC-Schnittstelle. Wir fingen an, weitere Statistikinformationen hinzuzufügen, dann stießen wir auf ein Problem, bei dem der bestimmte Statistikbefehl zweimal ausgeführt werden musste, um die gesamten Daten zu erhalten, da die PROC-Schnittstelle auf 1 Seite beschränkt war.

Wie oben erwähnt, ist der Datentransfer zwischen dem Kernel und dem Benutzerraum nicht kritisch, aber gemäß den Daten können einige Entscheidungen vom Benutzer getroffen werden. Unsere Anforderung an dieses Schnittstellendesign ist, dass es in der Lage sein sollte, Datenmengen von mehr als 8192 Bytes zu übertragen, und der Befehl muss minimale Kernel-Ressourcen (wie Sperren usw.) verwenden und muss schnell sein.

Die Verwendung von ioctl kann das Problem lösen, aber da der Befehl das Gerät nicht genau steuert, sondern einige statistische Informationen sammelt, ist es nicht sicher, ob es ein guter Mechanismus ist, wie unter Linux zu verwenden. Wir verwenden derzeit 3.4 Kernel; nicht sicher, ob Netlink in dieser Version verlustbehaftet ist (in früheren Versionen stieß ich auf Probleme wie wenn die Warteschlange voll wird, fängt Socket an, Daten zu löschen). mmap ist eine weitere Option. Kann mir jemand vorschlagen, was die beste Schnittstelle zu verwenden wäre

    
___ answer12430609 ___

Sie können einen ioctl IO-Aufruf (statt IOR, IOW oder IORW) durchführen. Ioctls können sehr nützlich sein, um Informationen zu sammeln. Auf diese Weise haben Sie eine große Flexibilität, da Sie Puffer oder Strukturen unterschiedlicher Größe übergeben können, um sie mit Daten zu füllen.

    
___ tag123linuxdevicedriver ___ Gerätetreiber übernehmen im Linux-Kernel eine besondere Rolle. Es sind programmatisch abstrahierte "Black Boxes", die ein bestimmtes Hardware-Teil auf eine wohldefinierte interne Programmierschnittstelle reagieren lassen. Sie verbergen vollständig die Details, wie das Gerät funktioniert. ___ tag123linux ___ LINUX FRAGEN MÜSSEN PROGRAMMIEREN VERWANDT SEIN. Verwenden Sie dieses Tag nur, wenn sich Ihre Frage auf das Programmieren mit Linux-APIs oder das Linux-spezifische Verhalten bezieht, nicht nur, weil Sie Ihren Code unter Linux ausführen. Wenn Sie Linux-Unterstützung benötigen, können Sie https://unix.stackexchange.com oder https://askubuntu.com ausprobieren ___

8

Einige statistische Informationen unserer benutzerdefinierten Hardware werden angezeigt, wenn der Benutzer nach einem Befehl im Linux-Benutzerbereich fragt. Diese Implementierung verwendet derzeit die PROC-Schnittstelle. Wir fingen an, weitere Statistikinformationen hinzuzufügen, dann stießen wir auf ein Problem, bei dem der bestimmte Statistikbefehl zweimal ausgeführt werden musste, um die gesamten Daten zu erhalten, da die PROC-Schnittstelle auf 1 Seite beschränkt war.

Wie oben erwähnt, ist der Datentransfer zwischen dem Kernel und dem Benutzerraum nicht kritisch, aber gemäß den Daten können einige Entscheidungen vom Benutzer getroffen werden. Unsere Anforderung an dieses Schnittstellendesign ist, dass es in der Lage sein sollte, Datenmengen von mehr als 8192 Bytes zu übertragen, und der Befehl muss minimale Kernel-Ressourcen (wie Sperren usw.) verwenden und muss schnell sein.

Die Verwendung von ioctl kann das Problem lösen, aber da der Befehl das Gerät nicht genau steuert, sondern einige statistische Informationen sammelt, ist es nicht sicher, ob es ein guter Mechanismus ist, wie unter Linux zu verwenden. Wir verwenden derzeit 3.4 Kernel; nicht sicher, ob Netlink in dieser Version verlustbehaftet ist (in früheren Versionen stieß ich auf Probleme wie wenn die Warteschlange voll wird, fängt Socket an, Daten zu löschen). mmap ist eine weitere Option. Kann mir jemand vorschlagen, was die beste Schnittstelle zu verwenden wäre

    
lxusr 16.07.2012, 09:27
quelle

1 Antwort

1

Sie können einen ioctl IO-Aufruf (statt IOR, IOW oder IORW) durchführen. Ioctls können sehr nützlich sein, um Informationen zu sammeln. Auf diese Weise haben Sie eine große Flexibilität, da Sie Puffer oder Strukturen unterschiedlicher Größe übergeben können, um sie mit Daten zu füllen.

    
reign_man 14.09.2012 19:12
quelle

Tags und Links