S vyvoláváním funkcí v uživatelském prostoru z jádra máte smůlu, protože jádro neví a ani by nemělo vědět o jednotlivých funkcích a logice aplikací v uživatelském prostoru, nemluvě o tom, že každá aplikace v uživatelském prostoru má svou vlastní paměť. rozvržení, do kterého žádný jiný proces ani jádro nemůže tímto způsobem napadnout (sdílené objekty jsou zde výjimkou, ale přesto se do toho z prostoru jádra nedostanete). A co model zabezpečení, neměli byste spouštět kód uživatelského prostoru (který je v kontextu jádra automaticky považován za nebezpečný) v kontextu jádra, protože to naruší bezpečnostní model jádra přímo v něm. ten okamžik. Nyní vezmeme-li v úvahu vše výše uvedené a mnoho dalších motivů, možná budete chtít přehodnotit svůj přístup a zaměřit se na jádro <-> IPC a rozhraní v uživatelském prostoru, systém souborů nebo pomocné API uživatelského režimu (přečtěte si níže).
Aplikace uživatelského prostoru však můžete vyvolat z jádra pomocí rozhraní API uživatelského režimu. Následující článek IBM DeveloperWorks by vám měl pomoci začít používat rozhraní API pro jádro Linuxu usermode-helper:
Rozhraní API jádra, Část 1:Vyvolání aplikací v uživatelském prostoru z jádra
Myslím, že nejjednodušší způsob je zaregistrovat znakové zařízení, které se stane připraveným, když má zařízení nějaká data.
Jakýkoli proces, který se pokusí číst z tohoto zařízení, se poté uspí, dokud není zařízení připraveno, a poté se probudí, v tomto okamžiku může provést příslušnou věc.
Pokud chcete pouze signalizovat připravenost, čtečka může přečíst pouze jeden prázdný bajt.
Programu v uživatelském prostoru by pak stačilo provést blokující volání read() a byl by patřičně zablokován, dokud ho neprobudíte.
Abyste to mohli používat, budete muset porozumět mechanismu fronty čekání v plánovači jádra.
Zdá se, že vaše přerušovací linka je již dostupná uživatelskému prostoru prostřednictvím gpiolib? (/sys/class/gpio/...)
Testovali jste, zda je pro vás spouštění okrajů gpio a poll() dostatečně rychlé? Tímto způsobem nemusíte zjišťovat stav z aplikace uživatelského prostoru, ale spouštění okrajů jej ohlásí pomocí poll(). Viz Documentation/gpio.txt ve zdrojovém kódu jádra.
Pokud spouštění hran pomocí sysfs není dost dobré, pak správným způsobem je vyvinout ovladač jádra, který se postará o časově kritickou část a exportuje výsledky do uživatelského prostoru přes API (sysfs, uzel zařízení atd.).