Frage

Ich bin ziemlich neu in Linux-Gerätetreiber programmring, sondern Zwecke für die Fehlersuche, würde Ich mag einen Strom von Daten in eine Datei direkt schreiben. Oder vielleicht sollte ich die Frage aks anders:

Ich habe eine System-on-Chip, in dem ein Modul einen Datenstrom zur Verfügung stellt. Das Modul muss mit einer Schreibadresse werden initlized. Statt die Daten in den Speicher zu schreiben, würde Ich mag den Datenstrom in eine Datei zu dieser Adresse umleiten. Dies könnte auch über User-Space durchgeführt werden, weil das Schreiben in Kernel- Datei wird nicht empfohlen.

Kann jemand skizzieren grob, wie dies zu tun?

Danke, Stefan

War es hilfreich?

Lösung

Aus Ihrer Frage, ich nehme an, dies ist ein Hardware-Modul direkt in einen Speicherpuffer zu schreiben. Sie werden einen Zwischenspeicherpuffer auf dem Weg in die Datei immer brauchen, aber es gibt mehr Möglichkeiten, dies in Ihrem Gerätetreiber zu verwalten.

Der einfachste Fall ist ein Zeichen Gerätetreiber zu implementieren, die die Daten in User-Space über einen Lesevorgang zurückgibt. Ihre User-Space-Anwendung, die in die Datei schreibt kann dann so einfach sein wie cat. Ihr Modul wird in einen Speicherpuffer von Ihrem Fahrer zugeordnet schreiben, und die read Methode werden die Daten aus diesem Puffer auf den User-Space-Puffer kopiert werden. Dies wird durch DMA-Mapping.txt in der Kernel-Dokumentation abgedeckt und in Linux Device Drivers (LDD).

Wenn die Datenrate hoch ist (wo hoch ist in Bezug auf die Leistung des Geräts), müssen Sie eine erweiterte Leseoperation betrachten, in dem Sie die Seiten der read Anforderung in dem Speicher zu sperren, und das Modul schreibt direkt auf diesen Seiten. Das ist komplizierter, und die Dokumentation in LDD auf diesem Gebiet ist ziemlich alt. Ich rate würde die Quelle der Video-Capture-Treiber im Kernel, dies zu verstehen lernen.

Wenn Ihr Fahrer mehr Arten von Kommunikation hat durchzuführen, können Sie verwenden möchten

scroll top