Wenn ich Ihre Frage verstehe, klingt dieser Artikel wie das, wonach Sie suchen. Der Artikel trägt den Titel:Gerätetreiber im Benutzerbereich.
Auszug
UIO-Treiber
Linux bietet ein Standard-UIO-Framework (User I/O) zum Entwickeln von User-Space-basierten Gerätetreibern. Das UIO-Framework definiert eine kleine Kernel-Space-Komponente, die zwei Hauptaufgaben erfüllt:
- a. Speicherbereiche des Geräts dem Benutzerbereich anzeigen.
- b. Registrieren Sie sich für Geräteunterbrechungen und stellen Sie dem Benutzerraum eine Unterbrechungsanzeige zur Verfügung.
Die Kernelspace-UIO-Komponente stellt das Gerät dann über eine Reihe von sysfs-Einträgen wie /dev/uioXX bereit. Die User-Space-Komponente sucht nach diesen Einträgen, liest die Geräteadressbereiche und bildet sie auf den User-Space-Speicher ab.
Die User-Space-Komponente kann alle Geräteverwaltungsaufgaben ausführen, einschließlich E/A vom Gerät. Für Interrupts muss es jedoch ein blockierendes read () auf dem Geräteeintrag ausführen, was dazu führt, dass die Kernel-Komponente die User-Space-Anwendung in den Ruhezustand versetzt und sie aufweckt, sobald ein Interrupt empfangen wird.
Ich habe das noch nie zuvor gemacht, daher kann ich Ihnen nicht viel mehr Anleitung bieten, aber ich dachte, es könnte für Ihre Suche hilfreich sein.
In Anlehnung an @RBerteig enthält der BeagleBone Black PRU-32-Bit-Mikrocontroller (Programmable Real-Time Unit).
Es sieht nicht so aus, als gäbe es eine riesige Community, die diese Dinge voll ausnutzt. Ich bin mir nicht einmal sicher, ob es dafür einen guten Compiler gibt. Die Vorteile gegenüber einer Baugruppe aus einem SBC und einem Mikrocontroller oder einer Mikrocontroller-Platine bestehen darin, dass der PRU-Code vom Haupt-ARM kommen kann und ein gemeinsam genutzter Speicher ziemlich praktisch ist.
Ich kann nicht sagen, dass ich dies verwendet habe oder dass ich noch mehr als einige Beispiele auf meinen BeagleBone Blacks ausgeführt habe, aber die in dieser Frage zum Ausdruck gebrachten Anforderungen könnten eines der Dinge sein, die einen Entwickler mit diesen Anforderungen dazu bringen können Schwarz und weg vom Pi.