Pokud rozumím vaší otázce, zní tento článek jako to, co hledáte. Článek se jmenuje:Ovladače zařízení v uživatelském prostoru.
úryvek
Ovladače UIO
Linux poskytuje standardní rámec UIO (User I/O) pro vývoj ovladačů zařízení založených na uživatelském prostoru. Rámec UIO definuje malou komponentu kernel-space, která plní dva klíčové úkoly:
- a. Uveďte oblasti paměti zařízení do uživatelského prostoru.
- b. Zaregistrujte se pro přerušení zařízení a poskytněte uživatelskému prostoru indikaci přerušení.
Komponenta kernel-space UIO pak zpřístupní zařízení prostřednictvím sady položek sysfs jako /dev/uioXX. Komponenta uživatelského prostoru vyhledává tyto položky, čte rozsahy adres zařízení a mapuje je do paměti uživatelského prostoru.
Komponenta uživatelského prostoru může provádět všechny úlohy správy zařízení včetně I/O ze zařízení. Pro přerušení však potřebuje provést blokovací read() na položce zařízení, což má za následek, že komponenta jádra uspí aplikaci v uživatelském prostoru a probudí ji, jakmile je přijato přerušení.
Nikdy předtím jsem to nedělal, takže vám nemohu nabídnout o moc více rad, ale myslel jsem si, že by to mohlo být užitečné při vašem hledání.
Ve stejném duchu jako @RBerteig obsahuje BeagleBone Black 32bitové mikrokontroléry Programmable Real-Time Unit (PRU).
Nezdá se, že by existovala obrovská komunita, která tyto věci plně využívá. Nejsem si ani jistý, zda na to existuje dobrý kompilátor. Výhody oproti sestavě SBC a mikrokontroléru nebo desky mikrokontroléru jsou v tom, že kód PRU může pocházet z hlavního ARM a sdílená paměť je docela pohodlná.
Nemohu říci, že jsem to použil, nebo dokonce, že jsem na svých BeagleBone Blacks dosud spustil více než jen některé příklady, ale potřeby vyjádřené v této otázce mohou být jednou z věcí, které mohou vývojáře s těmito potřebami postrčit směrem k Černá a pryč od Pi.